Element:改变原生 el-dropdown 的样式

在使用Element UI的el-dropdown组件时遇到一个特定dropdown的间距问题,尝试通过在div外层添加类名和使用>>>选择器进行样式调整,但导致图标不显示。最终解决方案是在el-dropdown-menu上添加类名,并为这个类名编写样式,避免全局影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调整前:
在这里插入图片描述
调整后:
调整样式后

前情

在用 el-dropdown 的时候,不知道为什么一个页面中的某个 dropdown 的间距过大,其他的都很正常,所以需要 调整许多 el-dropdown 中一个的样式

  • 但 ElementUI 会有自己的样式,他绑定的 id 会动态变化,每个 el 标签的类名也是一致的。
  • 看了其他博主的解法,说 >>>/deep/ 快被废弃了,说不建议使用,也不知道真假。
    • >>>/deep/ 可用于加了 scoped 的style 中,不会污染其他组件,同时要使用 lesssass
    • 外层 >>> 第三方组件 { 样式 }
一:在整个 el 标签的外层加上一个 div ,在 div 上加上类名来选中?(我失败了)
<div class="newDrop">
	<el-dropdown trigger="click">
        <span class="el-dropdown-link">
          <el-badge class="right-menu-item">
            <svg-icon icon-class="alert"/>
          </el-badge>
        </span>
        <el-dropdown-menu slot="dropdown" :style="styleObject" v-if="length > 0">
          <template>
            <el-dropdown-item>
              <el-button
                type="text"
                icon="el-icon-delete"
                size="mini"
                style="color: red"
                @click="allRead"
              >
                全部已读</el-button
              >
            </el-dropdown-item>
          </template>
          
            <template v-if="unReadInnerMsgList">
            <el-dropdown-item
              v-for="(item, index) in unReadInnerMsgList"
              :key="index"
            >
            </el-dropdown-item>
            </template>
        </el-dropdown-menu>
        
        <el-dropdown-menu v-else>
          <el-dropdown-item>
            <div>暂无未读消息</div>
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    </div>

这样做直接导致我的图标没有显示

二、成功的方法:在 el-dropdown-menu 上加类名
 <el-dropdown-menu slot="dropdown" :style="styleObject" v-if="length > 0" class="newDrop">
          <template>
            <el-dropdown-item>
              <el-button
                type="text"
                icon="el-icon-delete"
                size="mini"
                style="color: red"
                @click="allRead"
              >
                全部已读</el-button
              >
            </el-dropdown-item>
          </template>
          
            <template v-if="unReadInnerMsgList">
            <el-dropdown-item
              v-for="(item, index) in unReadInnerMsgList"
              :key="index"
            >
              <router-link
                v-if="item.msgType == 1"
                to="/info/history"
                style="margin-left: 0"
                @click.native="updateNoticeState(item.id, item.msgType)"
              >
                <div>
                  <svg-icon icon-class="fire-fight"></svg-icon>
                  <span style="font-size: 12px">
                    {{ item.time }}
                  </span>
                </div>
                <div style="font-size: 12px; padding-top: 0; margin-top: -10px">
                  {{ item.content }}
                </div>
              </router-link>
            </el-dropdown-item>
            </template>
        </el-dropdown-menu>
        
        <el-dropdown-menu class="newDrop" v-else>
          <el-dropdown-item>
            <div>暂无未读消息</div>
          </el-dropdown-item>
        </el-dropdown-menu>

然后再新写一个 没有 scoped 的 style

<style>
.newDrop {
  top: 50px !important;

}
 .el-popper[x-placement^="bottom"]{
  margin-top: 5px; // 调整所有 el-dropdown-menu 的样式
}
</style>
  • 未写 scoped 的 style 可以作用于整个项目中,要注意此处的类名设置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值