当前位置:   article > 正文

element-ui菜单el-menu的使用

el-menu

效果演示

先给大家看一下效果吧

el-menu详解

官方属性

属性名说明类型可选值默认值
mode菜单展示模式stringhorizontal / verticalvertical
collapse是否水平折叠收起菜单(仅在 mode 为 vertical 时可用)booleanfalse
ellipsis是否省略多余的子项(仅在横向模式生效)booleantrue
background-color菜单的背景颜色(十六进制格式)(已被废弃,使用--bg-colorstring#ffffff
text-color文字颜色(十六进制格式)(已被废弃,使用--text-colorstring#303133
active-text-color活动菜单项的文本颜色(十六进制格式)(已被废弃,使用--active-colorstring#409EFF
default-active页面加载时默认激活菜单的 indexstring
default-openeds默认打开的 sub-menu 的 index 的数组Array
unique-opened是否只保持一个子菜单的展开booleanfalse
menu-trigger子菜单打开的触发方式,只在 mode 为 horizontal 时有效。stringhover / clickhover
router是否启用 vue-router 模式。 启用该模式会在激活导航时以 index 作为 path 进行路由跳转 使用 default-active 来设置加载时的激活项。booleanfalse
collapse-transition是否开启折叠动画booleantrue
popper-effectTooltip 主题,内置了 dark / light 两种主题stringdark / lightdark
方法名说明参数
open展开指定的 sub-menuindex: 需要打开的 sub-menu 的 index
close收起指定的 sub-menuindex: 需要收起的 sub-menu 的 index
事件名说明回调参数
select菜单激活回调index: 选中菜单项的 index, indexPath: 选中菜单项的 index path, item: 选中菜单项, routeResult: vue-router 的返回值(如果 router 为 true)
opensub-menu 展开的回调index: 打开的 sub-menu 的 index, indexPath: 打开的 sub-menu 的 index path
closesub-menu 收起的回调index: 收起的 sub-menu 的 index, indexPath: 收起的 sub-menu 的 index path
插槽名说明子标签
自定义默认内容SubMenu / Menu-Item / Menu-Item-Group
属性名说明类型可选值默认值
index唯一标志string
popper-class为 popper 添加类名string
show-timeout展开 sub-menu 的延时number300
hide-timeout收起 sub-menu 的延时number300
disabled是否禁用booleanfalse
popper-append-to-body(已废弃)是否将弹出菜单插入至 body 元素。 在菜单的定位出现问题时,可尝试修改该属性boolean一级子菜单:true / 非一级子菜单:false
teleported是否将 popup 的下拉列表插入至 body 元素boolean一级子菜单:true / 非一级子菜单:false
popper-offset弹出窗口偏移number6
expand-close-icon父菜单展开且子菜单关闭时的图标, expand-close-iconexpand-open-icon 需要一起配置才能生效string | Component
expand-open-icon父菜单展开且子菜单打开时的图标, expand-open-iconexpand-close-icon 需要一起配置才能生效string | Component
collapse-close-icon父菜单收起且子菜单关闭时的图标, expand-close-iconexpand-open-icon 需要一起配置才能生效string | Component
collapse-open-icon父菜单收起且子菜单打开时的图标, expand-open-iconexpand-close-icon 需要一起配置才能生效string | Component
插槽名说明子标签
自定义默认内容SubMenu / Menu-Item / Menu-Item-Group
title自定义标题内容
属性名说明类型可选值默认值
index唯一标志string/nullnull
routeVue Router 路径对象object
disabled是否禁用booleanfalse
事件名说明回调参数
click菜单点击时的回调函数el-menu-item 实例
插槽名说明
自定义默认内容
title自定义标题内容
属性名说明类型可选值默认值
title组标题string
插槽名说明子标签
默认插槽内容Menu-Item
title自定义组标题内容

属性解析

el-menu属性

mode:菜单展示模式【horizontal水平/vertical垂直】【默认vertical】
collapse:是否水平折叠收起菜单(仅在垂直模式生效)【默认false】,可以修改为动态如::collapse="menuStore.isCollapse"
collapse-transition:是否开启折叠动画(仅在垂直模式生效)【默认true】
ellipsis:是否省略多余的子项(仅在横向模式生效)【默认true】

unique-opened:是否只保持一个子菜单的展开
router:可以把点击高亮里的index的地址变为路由地址,进行路由访问
default-active:点击高亮(与index=""搭配,在script设置默认访问/) 如::default-active="active" const active = ref("/")

background-color:菜单的背景颜色【默认#ffffff】
text-color:文字颜色【默认#303133】
active-text-color:选中文字颜色【默认#409EFF】

el-sub-menu属性

index:唯一标志
disabled:是否禁用
show-timeout:展开 sub-menu 的延时【默认300】
hide-timeout:收起 sub-menu 的延时【默认300】

el-menu-item属性

index:唯一标志
route:Router路径对象
disabled:是否禁用

修改默认样式

  1. /**el-menu默认样式 */
  2. .el-menu{
  3. border-right: 0 !important;/*去掉element menu的右侧边框 */
  4. border-radius: 5px!important;
  5. background-image: linear-gradient(135deg, #EE9AE5 10%, #5961F9 100%) !important;
  6. }
  7. .el-menu-item{
  8. border-radius: 15px!important;
  9. }
  10. .el-menu-item.is-active {
  11. font-weight: 900!important;
  12. font-size: 20px!important;
  13. color: #c1ecef!important;
  14. }
  15. 注意:垂直模式水平折叠收起菜单后里面item的背景色要在App.vue中设置
  16. .el-menu {
  17. background-image: linear-gradient(135deg, #EE9AE5 10%, #5961F9 100%) !important;
  18. }

直接上代码

  1. <!--添加动画效果:设置内部样式-->
  2. <div class="slider-navs" :style="{ width: menuStore.isCollapse ? '64px' : '210px' }">
  3. <div v-if="menuStore.toggleStore" class="logo">{{ menuStore.isCollapse ? 'J' : "JKW" }}</div>
  4. <!--background-color:背景颜色(只有菜单这块,菜单占多少背景占多少)
  5. text-color:文本颜色
  6. active-text-color:选中后文本颜色
  7. :default-active="active":点击高亮(与index=""搭配,在script设置默认访问/)
  8. router:可以把点击高亮里的index的地址变为路由地址,进行路由访问
  9. :collapse:是否开启折叠面板
  10. unique-opened 是否只保持一个子菜单的展开
  11. 点击的是el-sub-menu,所以el-sub-menu 的唯一性是必须的,设置index属性来保持唯一性
  12. -->
  13. <el-menu background-color="rgba(255,255,255,.1)" text-color="rgb(214, 205, 251)" active-text-color="orange"
  14. :default-active="active" router class="el-menu-vertical-demo" :collapse="menuStore.isCollapse" unique-opened>
  15. <el-menu-item index="/home/index">
  16. <el-icon>
  17. <HomeFilled />
  18. </el-icon>
  19. <span>首页</span>
  20. </el-menu-item>
  21. <el-sub-menu index="99">
  22. <template #title>
  23. <el-icon>
  24. <Tickets />
  25. </el-icon>
  26. <span>页面</span>
  27. </template>
  28. <el-menu-item index="/:pathMath(.*)*">
  29. <el-icon>
  30. <Warning />
  31. </el-icon>
  32. <span>404</span>
  33. </el-menu-item>
  34. </el-sub-menu>
  35. <el-sub-menu index="1">
  36. <template #title>
  37. <el-icon>
  38. <Management />
  39. </el-icon>
  40. <span>分析</span>
  41. </template>
  42. <el-menu-item index="/annlysis/Analysis1">
  43. <el-icon>
  44. <Operation />
  45. </el-icon>
  46. <span>样例1</span>
  47. </el-menu-item>
  48. </el-sub-menu>
  49. <el-sub-menu index="2">
  50. <template #title>
  51. <el-icon>
  52. <Tools />
  53. </el-icon>
  54. <span>系统</span>
  55. </template>
  56. <el-menu-item index="/sys/admin">
  57. <el-icon>
  58. <User />
  59. </el-icon>
  60. <span>用户</span>
  61. </el-menu-item>
  62. <el-menu-item index="/sys/role">
  63. <el-icon>
  64. <CopyDocument />
  65. </el-icon>
  66. <span>角色</span>
  67. </el-menu-item>
  68. <el-menu-item index="/sys/permission">
  69. <el-icon>
  70. <Lock />
  71. </el-icon>
  72. <span>权限</span>
  73. </el-menu-item>
  74. </el-sub-menu>
  75. </el-menu>
  76. </div>

  1. <script setup>
  2. import { ref } from 'vue';
  3. import { useMenuStore } from "@/stores/menuStore.js";//stores
  4. //解决页面刷新后 菜单高亮与面包屑不匹配
  5. const menuStore = useMenuStore()
  6. const active = ref("/")
  7. if (localStorage.getItem("active")) {
  8. active.value = localStorage.getItem("active")
  9. }
  10. </script>
  1. <style scoped>
  2. .slider-navs {
  3. background-image: linear-gradient(135deg, #EE9AE5 10%, #5961F9 100%) !important;
  4. /*固定在左侧(position: fixed生成绝对定位的元素, 相对于浏览器窗口进行定位) */
  5. position: fixed;
  6. left: 0;
  7. top: 0;
  8. bottom: 0;
  9. /*width: 210px;*/
  10. /*设置动画过渡 和<el-menu>内部的一样 */
  11. transition: 0.3s ease-in;
  12. }
  13. .el-menu-vertical-demo {
  14. background-image: linear-gradient(to bottom right, rgb(114, 135, 254), rgb(130, 88, 186));
  15. }
  16. .logo {
  17. background-image: linear-gradient(120deg, #00e4d0, #5983e8) !important;
  18. /*需要在App.vue设置公共样式,把element menu的右边框去掉,否则对不齐 */
  19. width: 100%;
  20. height: 60px;
  21. background-color: #364e6d;
  22. font-size: 45px;
  23. font-weight: 900;
  24. color: rgb(124, 101, 215);
  25. text-align: center;
  26. /*左右居中 */
  27. line-height: 60px;
  28. /*上下居中:和高度保持一致 */
  29. }
  30. .icon {
  31. width: 16px;
  32. height: 16px;
  33. margin-right: 5px;
  34. /*让图标和文字有空隙 */
  35. }
  36. </style>

app.vue全局样式的设计

  1. /**侧边栏样式修改 */
  2. .el-menu{
  3. border-radius: 5px!important;
  4. background-image: linear-gradient(135deg, #EE9AE5 10%, #5961F9 100%) !important;
  5. }
  6. .el-menu-item{
  7. border-radius: 15px!important;
  8. }
  9. .el-menu-item.is-active {
  10. font-weight: 900!important;
  11. font-size: 20px!important;
  12. color: #c1ecef!important;
  13. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/225787
推荐阅读
相关标签
  

闽ICP备14008679号