Element-UI修改默认的菜单样式

这个是在做小应用时遇到的问题,本来想以后将问题汇总后一起发布。可是很开心撒,而且网上没找到这个问题的简单解决方案(解决方案中经常让使用Vue或者scss等外部组件,可我就一个Hello Word,安装vue-cli什么的感觉太小题大做),所以先记录下来,也让需要的人少跑几步。
先贴上图看一下效果,虽然不美观,但聪明的你掌握思路后还可以继续美化哈。
在这里插入图片描述
这个问题的解决方法当然不是我凭空想出来的,也是在网上找了很多文章后自己鼓捣出来的(虽然这些文章没有给出解决方案,但告诉了我怎么自己去寻找答案,哈哈)。其中一个问题是:element-ui 如何修改nav menu 带有二级的title样式?

接下来说一下这个问题的解决思路,虽然我只是修改了水平菜单栏,但其他控件的样式修改思路应该是差不多的。对于Element-UI这种前端框架,里面的自定义标签(例如el-menu,el-header等)基本上都是通过设置原生html标签的class属性来实现的,包括自定义标签的其他属性,最后大部分都转换成了class的值(例如el-menu的mode属性如果是horizontal,那么最后会转换成class中的一个值“el-menu–horizontal”,而菜单中的slot属性title会转换为“.el-submenu__title”,bootstrap就很直接,直接设置原生html标签的类属性),所以修改样式时只需找到这些标签对应的类名称,然后按照结构用css语法做相应的处理。
知道了原理还不行,最麻烦的实际上还是怎么找这些类的值,用F12开发人员工具一步一步找到自己需要的内容,对于那些在浏览器源码中没有找到的属性,就需要自己琢磨一下了。

根据代码说明会比较容易理解,贴上代码,里面只包含菜单相关的内容,为了便于解释,我将说明直接写到了代码中。

<el-header style="padding: 0px;">
        <!-- 设置顶部菜单的最大高度以避免菜单栏太高 -->
          <el-menu id="menubar" mode="horizontal" style="max-height:30px;">
              <el-submenu index="1">
                <template slot="title">
                  <i class="fa fa-edit"></i>
                  <span slot="title">打开的文件</span>
                </template>
                <el-menu-item index="1-1">选项1</el-menu-item>
              </el-submenu>
              <el-submenu index="2">
                <template slot="title">
                  <i class="fa fa-file-text-o"></i>
                  <span slot="title">临时文件</span>
                </template>
                <el-submenu index="2-1">
                  <span slot="title">选项4</span>
                  <el-menu-item index="2-1-1">选项1</el-menu-item>
                </el-submenu>
              </el-submenu>
              <el-submenu index="3">
                <template slot="title">
                  <i class="fa fa-star-o"></i>
                  <span slot="title">模板文件</span>
                </template>
                <el-menu-item index="3-1">选项1</el-menu-item>
              </el-submenu>
              <el-submenu index="4">
                <template slot="title">
                  <i class="fa fa-file-archive-o"></i>
                  <span slot="title">归档文件</span>
                </template>
                <el-submenu index="4-1">
                  <span slot="title">选项4</span>
                  <el-menu-item index="4-1-1">选项1</el-menu-item>
                </el-submenu>
              </el-submenu>
              <el-menu-item index="4">
                <i class="fa fa-trash-o"></i>
                <span slot="title">废纸篓</span>
              </el-menu-item>
            </el-menu>
      </el-header>
<style>
  /* 水平菜单顶层菜单样式 */
  /* >符号表示直接孩子,.el-menu--horizontal>.el-submenu .el-submenu_title表示的
  是类.el-menu--horizontal元素(这个是顶层菜单el-menu)下的第一层元素(sub-menu)下的标题,
  这个标题是放在<i>元素的slot属性中的,从而找到了<i>元素,修改它的样式就可以了 */
  .el-menu--horizontal>.el-submenu .el-submenu__title {
    height: 30px;
    line-height: 30px;
    border-bottom: 2px solid transparent;
  }
  /* 水平菜单子菜单的标题(注意,标题和菜单项不一样,标题是使用<i slot="title">表示的,需要单独处理),
  这里使用.el-submenu>.el-submenu_title定位到子菜单(不是菜单项) */
  .el-menu--horizontal .el-menu .el-submenu>.el-submenu__title {
    float: none;
    height: 23px;
    line-height: 23px;
  } 
  /* 水平菜单子菜单中的所有菜单项 */
  .el-menu--horizontal .el-menu .el-menu-item {
    float: none;
    height: 23px;
    line-height: 23px;
    width: auto;
  } 

</style>

就写这么多吧,因为注释写的比较简单,希望能够帮到你。如果对于文章中的内容有疑问,欢迎指出来以便讨论或修正。

补充一下竖直菜单折叠后的处理情况
非折叠的竖直菜单处理方式和上方的水平菜单一样,只不过需要将horizontal改为vertical。对于折叠菜单,菜单栏会和非折叠竖直菜单的菜单栏样式一样,只需要单独处理弹出菜单的情况。样式如下代码所示:

/* ########################## */
  /* Element-UI中,在没有折叠的菜单中,无论是水平还是竖直菜单,子菜单是放在菜单栏所在的div中的,
  只是将display属性设置为了none。
     而在折叠菜单中,虽然菜单项也是放在页面上,但不在是放在菜单栏所在的div中,而是放在了页面底部的单独div中,
     类属性值是el-menu--popup,因为是单独的div,所以在处理弹出菜单时就比较方便,直接处理el-submenu__title
     和el-menu-item就可以,而不必区分是几级菜单项(如果不同级别菜单项要分别处理,需要使用“>”等操作分别处理) */
  /* 处理竖直菜单收齐后的弹出菜单中的子菜单 */
  .el-menu--vertical .el-menu--popup .el-submenu__title {
    height: 30px;
    line-height: 30px;
  }
  .el-menu--vertical .el-menu--popup .el-menu-item {
    height: 30px;
    line-height: 30px;
  }

弹出菜单效果:
折叠后的竖直菜单

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值