Vue中解决 el-select 选中颜色不生效的方法

在这里插入图片描述

查看本专栏目录


关于作者

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信,一起交流。

热门推荐内容链接
1openlayers 从基础到精通,300+代码示例
2leaflet 热门分解学习教程,150+图文示例
3cesium 从0到1学习指南,200+代码示例
4 mapboxGL 从入门到实战,150+图文示例
5canvas 示例应用100+,揭密底层细节
6javascript从基础到高级,示例展示200+
7vue2 实战指南,100+个细节深度剖析

在这里插入图片描述

在项目开发中,我们目标是修改 el-select 下拉列表中的默认选中颜色,如果仅仅是修改css,是不能改变颜色的,需要做出一定的改变。

修改后的效果

在这里插入图片描述

示例源代码(共52行)

/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: 2909222303@qq.com
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2022-06-10
*/

<template>
	<div class="container">
		<h3>vue+elementUI:el-select 修改选中项的颜色 </h3>
		<div class="author">大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
		<el-select v-model="value" placeholder="请选择" :popper-append-to-body="false">
			<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
			</el-option>
		</el-select>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				options: [{
					value: '选项1',
					label: '大剑师兰特'
				}, {
					value: '选项2',
					label: '还是大剑师兰特'
				}, {
					value: '选项3',
					label: 'gis-dajianshi'
				}],
				value: ''
			}
		}
	}
</script>
<style scoped>
	/deep/ .el-select-dropdown__item.selected {
		color: #ff0000;
	}
	
	.container {
		width: 840px;
		height: 500px;
		margin: 50px auto;
		border: 1px solid orange;
	}
	.author{ line-height: 30px; border-bottom:1px solid #ddd; margin-bottom: 20px;}
</style>

修改步骤:

(1)修改 .el-select-dropdown__item.selected样式

/deep/ .el-select-dropdown__item.selected{
color: #149f97 ;
}

(2)修改后不生效,给el-select添加属性 popper-append-to-body=“false”。

(popper-append-to-body:是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 false)

专栏目标
在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。

提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,updated, beforeDestroy,destroyed,activated,deactivated,errorCaptured,components,)、 $root , $parent , $children , $slots , $refs , props, $emit , eventbus ,provide / inject, Vue.observable, $listeners, $attrs, $nextTick , v-for, v-if, v-else,v-else-if,v-on,v-pre,v-cloak,v-once,v-model, v-html, v-text, keep-alive,slot-scope, filters, v-bind,.stop, .native, directives,mixin,render,国际化,Vue Router等

<think>好的,我现在需要帮助用户解决Vueel-select-dropdown组件自动关闭的问题。首先,我得回忆一下用户提供的引用内容,看看有没有相关的线索。 根据引用[1],隐藏el-select-dropdown的方法是设置display: none,但用户的问题是关于自动关闭,可能和下拉框的位置或事件处理有关。引用[2]和[3]提到了使用:popper-append-to-body="false"来阻止下拉框插入到body,这可能影响到下拉框的挂载位置,从而影响其行为。引用[4]指出当el-select-dropdown不在#app内部,样式可能不生效,这也可能影响到组件的稳定性,比如事件冒泡导致关闭。 自动关闭的常见原因可能有几点:点击外部触发了关闭事件、下拉框位置不正确导致误判关闭、或者组件本身的bug。用户可能是在点击下拉选项,下拉框提前关闭,或者在弹窗中使用出现错位导致关闭。 首先,检查是否因为下拉框被插入到body外层,导致事件监听出现问题。比如,如果下拉框在某个弹窗内部,而弹窗关闭导致下拉框也被关闭。这候,设置:popper-append-to-body="false"可以让下拉框挂载在el-select的父元素中,避免被父级元素的关闭事件影响。 其次,检查是否有样式问题导致下拉框被遮挡或位置错位,用户误触其他区域导致关闭。引用[2]中的transform和position调整可能有助于定位,避免下拉框出现在不可见区域,从而减少误关闭的可能性。 另外,可能需要手动控制下拉框的显示状态。比如使用@visible-change事件来监控状态,或者通过自定义指令阻止事件冒泡,确保点击下拉框内部不会触发外部的关闭事件。 最后,如果上述方法无效,可能需要检查Element UI的版本,是否存在已知的bug,或者考虑使用其他组件库作为替代方案。</think>### Vueel-select-dropdown自动关闭问题的解决方法Vue中使用Element UI的`el-select`组件,`el-select-dropdown`自动关闭的问题通常与**组件挂载位置、事件冒泡或样式冲突**相关。以下是具体原因及解决方案: --- #### 1. 下拉框挂载位置错误 **问题原因** 默认情况下,`el-select-dropdown`会插入到`body`元素外层[^1][^3]。若父级容器存在样式限制(如`overflow:hidden`)或事件监听(如弹窗关闭事件),会导致下拉框被错误关闭。 **解决方法** 添加属性`:popper-append-to-body="false"`,强制下拉框挂载在`el-select`同级位置: ```vue <el-select :popper-append-to-body="false"> <!-- 选项 --> </el-select> ``` 同调整CSS确保定位正确: ```css .el-select .el-select-dropdown { position: absolute !important; left: 0; transform: translateX(-5px) !important; } ``` 引用自[^2] --- #### 2. 事件冒泡触发关闭 **问题原因** 点击下拉框内部元素,事件冒泡可能触发父级容器的关闭逻辑(如弹窗关闭)。 **解决方法** 通过`@click.native.stop`阻止事件冒泡: ```vue <el-select @click.native.stop> <!-- 选项 --> </el-select> ``` --- #### 3. 样式冲突导致布局异常 **问题原因** 自定义样式可能导致下拉框被遮挡或错位,触发组件自动关闭机制。 **解决方法** 使用深度选择器覆盖默认样式,并确保下拉框可见区域: ```css ::v-deep .el-select-dropdown { z-index: 9999 !important; /* 提高层级 */ max-height: 200px !important; /* 限制高度避免溢出 */ } ``` --- #### 4. 组件版本问题 **问题原因** 旧版本Element UI可能存在下拉框自动关闭的已知bug。 **解决方法** 升级Element UI至最新版本: ```bash npm update element-ui ``` --- ### 总结流程图 1. **检查挂载位置** → 使用`:popper-append-to-body="false"` 2. **阻止事件冒泡** → 添加`@click.native.stop` 3. **调整样式** → 修改层级、定位、高度 4. **升级组件库** → 确保使用最新版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还是大剑师兰特

打赏一杯可口可乐

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

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

打赏作者

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

抵扣说明:

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

余额充值