修改elementUI el-select 下拉框修改样式不生效问题

文章讲述了在遇到修改组件背景色无效的情况下,通过移除scoped属性和使用/deep/选择器尝试解决问题,但未成功。最终解决方案是移除scoped并直接编写全局CSS样式,从而实现对.el-select-dropdown__list等组件样式的修改。

问题描述

想修改这个背景色不生效,代码如下

<style scoped>
/deep/ .el-select-dropdown__list {
  background-color: #1f2f6d !important;
}
/deep/ .el-select-dropdown {
  border: 1px solid #409eff;
}
/deep/ .el-select-dropdown__item {
  color: white;
}
/deep/ .el-select-dropdown__item.hover {
  background-color: #3f4f98;
}
</style>

在这里插入图片描述

解决方法

新加下面代码 ( 去除scoped 和/deep/. )

<style >
 .el-select-dropdown__list {
  background-color: #1f2f6d !important;
}
.el-select-dropdown {
  border: 1px solid #409eff;
}
 .el-select-dropdown__item {
  color: white;
}
 .el-select-dropdown__item.hover {
  background-color: #3f4f98;
}
</style>

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/4b6ec9e471db4f53aa9cdfa0a8083249.png
在这里插入图片描述

### 自定义 Element UI `el-select` 下拉框 Option 样式的解决方案 在实际开发过程中,如果需要自定义 `el-select` 组件中的 `option` 样式,可以通过覆盖默认样式来实现。由于 `el-select` 的下拉菜单部分是由独立的 DOM 节点渲染出来的,默认情况下其样式无法通过简单的 CSS 类名直接修改[^2]。 以下是具体的实现方式: #### 方法一:使用 `/deep/` 或 `>>>` 深度作用选择器 Element UI 使用了 Scoped CSS 来隔离组件样式,因此普通的全局样式可能不会生效。可以借助 Vue 提供的深度作用选择器 `/deep/` 或者 `>>>` 来穿透 scoped 样式限制。 ```html <style> /* 如果使用的是 Vue CLI */ /deep/ .el-select-dropdown__item { color: red; font-size: 14px; } /* 如果使用的是 Webpack 配置 */ .el-select >>> .el-select-dropdown__item { color: blue; background-color: #f0f8ff; } </style> ``` 上述代码会改变 `el-select` 中每一个 `option` 的字体颜色和背景色。 --- #### 方法二:禁用 `popper-append-to-body` 当 `popper-append-to-body` 属性设置为 `true`(默认值),下拉列表会被挂载到 body 上,这可能导致某些样式继承失效。将其设为 `false` 后,下拉列表将作为 `el-select` 的子节点存在,从而更容易被父级样式的调整所影响[^4]。 ```vue <template> <el-select :popper-append-to-body="false" v-model="selectedValue"> <el-option v-for="(item, index) in options" :key="index" :label="item.label" :value="item.value"></el-option> </el-select> </template> <script> export default { data() { return { selectedValue: '', options: [ { label: 'Option 1', value: '1' }, { label: 'Option 2', value: '2' } ] }; } }; </script> <style> /* 当 popper-append-to-body 设置为 false 时可以直接修改样式 */ .el-select-dropdown__item { padding-left: 30px; /* 增加左侧间距 */ line-height: 30px; /* 改变行高 */ } </style> ``` --- #### 方法三:动态绑定类名并配合 JavaScript 实现复杂样式 对于更加复杂的场景,比如根据条件动态更改某个特定 `option` 的样式,可以在模板中给 `el-option` 动态绑定类名,并结合 JavaScript 控制逻辑。 ```vue <template> <el-select v-model="selectedValue"> <el-option v-for="(item, index) in options" :key="index" :class="{ customClass: item.customStyle }" :label="item.label" :value="item.value"> </el-option> </el-select> </template> <script> export default { data() { return { selectedValue: '', options: [ { label: 'Normal Option', value: 'normal', customStyle: false }, { label: 'Custom Styled Option', value: 'custom', customStyle: true } ] }; } }; </script> <style> .customClass { background-color: yellowgreen; color: white; } </style> ``` 此方法适用于需要针对不同数据源应用差异化样式的场合[^1]。 --- ### 总结 以上三种方法可以根据具体需求灵活选用: - **简单样式调整**:优先尝试 `/deep/` 或 `>>>` 深度作用选择器; - **布局相关问题**:考虑关闭 `popper-append-to-body` 并直接操作本地样式- **高级定制化**:利用动态绑定类名的方式完成更精细的设计。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知知洋洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值