You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CSS修改下拉框<option>鼠标悬停的默认蓝色背景?

问题

我想修改下拉选项<option>鼠标悬停时的默认蓝色背景,试过论坛里的多种方案都无效(这些方案在旧版Chrome里曾生效),用option:hover选择器也没效果。有没有办法通过CSS实现非蓝色的悬停背景?

附上相关代码:

HTML代码

<div class="starComponent">
        <div class="product">
            <select name="product" id="phone">
                <option value="">Product</option>
                <option value="iPhoneXR">iPhone XR</option>
                <option value="iPhone12">iPhone 12</option>
                <option value="iPhone13">iPhone 13</option>
            </select>
            <input type="number" placeholder="Rating" size="8" min="0" max="5" id="rating">
            <button class="btn btn-dark" type="submit" onclick="save()">Save</button>
        </div>
        <div class="stars1">iphone XR
            <i class="fa-regular fa-star xr_star"></i>
            <i class="fa-regular fa-star xr_star"></i>
            <i class="fa-regular fa-star xr_star"></i>
            <i class="fa-regular fa-star xr_star"></i>
            <i class="fa-regular fa-star xr_star"></i>
        </div>
        <div class="stars2">iphone 12
            <i class="fa-regular fa-star 12_star"></i>
            <i class="fa-regular fa-star 12_star"></i>
            <i class="fa-regular fa-star 12_star"></i>
            <i class="fa-regular fa-star 12_star"></i>
            <i class="fa-regular fa-star 12_star"></i>
        </div>
        <div class="stars3">iphone 13
            <i class="fa-regular fa-star 13_star"></i>
            <i class="fa-regular fa-star 13_star"></i>
            <i class="fa-regular fa-star 13_star"></i>
            <i class="fa-regular fa-star 13_star"></i>
            <i class="fa-regular fa-star 13_star"></i>
        </div>

    </div>

CSS代码

option:hover{
    background-color: rgb(152, 173, 173);
    color: rgb(189, 85, 85);
}

解决方案

1. 针对Firefox的CSS hack(局限性大)

现代浏览器(尤其是新版Chrome)对原生<select>和<option>的样式限制极严,option:hover选择器基本无法生效。仅能针对Firefox通过特定属性实现:

/* 仅Firefox下生效 */
option:not(:checked):hover {
  background-color: rgb(152, 173, 173) !important;
  color: rgb(189, 85, 85) !important;
}

但该方法无法覆盖Chrome、Edge等其他浏览器的默认样式。

2. 自定义模拟下拉组件(推荐跨浏览器方案)

要实现全浏览器兼容的自定义悬停样式,最可靠的方式是用HTML+CSS+JS模拟原生下拉框,完全摆脱原生<select>的样式限制:

示例代码:

<div class="starComponent">
    <div class="product">
        <!-- 自定义下拉框 -->
        <div class="custom-select">
            <div class="select-trigger" id="custom-trigger">Product</div>
            <div class="select-options" id="custom-options">
                <div class="option" data-value="">Product</div>
                <div class="option" data-value="iPhoneXR">iPhone XR</div>
                <div class="option" data-value="iPhone12">iPhone 12</div>
                <div class="option" data-value="iPhone13">iPhone 13</div>
            </div>
        </div>
        <!-- 保留原有输入框和按钮 -->
        <input type="number" placeholder="Rating" size="8" min="0" max="5" id="rating">
        <button class="btn btn-dark" type="submit" onclick="save()">Save</button>
        <!-- 隐藏input用于表单提交 -->
        <input type="hidden" name="product" id="hidden-product-value">
    </div>
    <!-- 保留原有星星评分部分 -->
    <div class="stars1">iphone XR
        <i class="fa-regular fa-star xr_star"></i>
        <i class="fa-regular fa-star xr_star"></i>
        <i class="fa-regular fa-star xr_star"></i>
        <i class="fa-regular fa-star xr_star"></i>
        <i class="fa-regular fa-star xr_star"></i>
    </div>
    <div class="stars2">iphone 12
        <i class="fa-regular fa-star 12_star"></i>
        <i class="fa-regular fa-star 12_star"></i>
        <i class="fa-regular fa-star 12_star"></i>
        <i class="fa-regular fa-star 12_star"></i>
        <i class="fa-regular fa-star 12_star"></i>
    </div>
    <div class="stars3">iphone 13
        <i class="fa-regular fa-star 13_star"></i>
        <i class="fa-regular fa-star 13_star"></i>
        <i class="fa-regular fa-star 13_star"></i>
        <i class="fa-regular fa-star 13_star"></i>
        <i class="fa-regular fa-star 13_star"></i>
    </div>
</div>
.custom-select {
    position: relative;
    display: inline-block;
    margin-right: 10px;
}

.select-trigger {
    padding: 6px 12px;
    border: 1px solid #ced4da;
    border-radius: 4px;
    background-color: #fff;
    cursor: pointer;
    min-width: 150px;
}

.select-options {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    border: 1px solid #ced4da;
    border-top: none;
    border-radius: 0 0 4px 4px;
    background-color: #fff;
    display: none;
    z-index: 100;
}

.select-options.show {
    display: block;
}

.option {
    padding: 6px 12px;
    cursor: pointer;
}

.option:hover {
    background-color: rgb(152, 173, 173);
    color: rgb(189, 85, 85);
}
// 下拉框交互逻辑
const trigger = document.getElementById('custom-trigger');
const options = document.getElementById('custom-options');
const optionItems = options.querySelectorAll('.option');
const hiddenInput = document.getElementById('hidden-product-value');

// 点击触发器展开/收起选项
trigger.addEventListener('click', () => {
    options.classList.toggle('show');
});

// 点击选项更新触发器文本并设置隐藏input值
optionItems.forEach(item => {
    item.addEventListener('click', () => {
        trigger.textContent = item.textContent;
        hiddenInput.value = item.dataset.value;
        options.classList.remove('show');
    });
});

// 点击页面其他区域收起下拉框
document.addEventListener('click', (e) => {
    if (!e.target.closest('.custom-select')) {
        options.classList.remove('show');
    }
});

这种方案完全由自定义元素构成,可自由控制所有样式(包括悬停效果),且跨浏览器兼容性良好。


内容的提问来源于stack exchange,提问作者Ashish Pradhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:45:14