在悬停时更改选择列表选项背景颜色

Gop*_*esh 50 html css drop-down-menu

是否可以在悬停时更改选择列表选项的默认背景颜色?

HTML:

<select id="select">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我试过了 option:hover { background-color: red; },但没用.有人知道怎么做这个吗?

小智 34

这可以通过实现插入框阴影来完成.例如:

select.decorated option:hover {
    box-shadow: 0 0 10px 100px #1882A8 inset;
}
Run Code Online (Sandbox Code Playgroud)

.decorated是分配给选择框的类.

希望你明白这一点.

  • +1好主意!但是`选项:checked`比`option:hover`效果更好.但两者似乎只适用于Firefox. (11认同)
  • 我的方法只是制作一个完全不同的元素,表现得像'select'元素.基本上是里面有一个列表的div. (3认同)
  • 是否有任何适用于铬的东西? (2认同)
  • 2岁以上,但2017年底在Chrome上无法使用.选项:已检查可以使用,但选项:悬停不会.最好的解决方法是创建自己的复选框列表实现,因此基本操作系统不会干扰样式. (2认同)

小智 14

这样我们就可以用最少的更改来做到这一点:)

<html>

<head>
  <style>
    option:hover {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <select onfocus='this.size=10;' onblur='this.size=0;' onchange='this.size=1; this.blur();'>
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="opel">Opel</option>
    <option value="audi">Audi</option>
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="opel">Opel</option>
    <option value="audi">Audi</option>
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="opel">Opel</option>
    <option value="audi">Audi</option>
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="opel">Opel</option>
    <option value="audi">Audi</option>
  </select>

</body>

</html>
Run Code Online (Sandbox Code Playgroud)

  • 这是个好主意。就像,我发现其他人很好奇这是如何运作的。嗯,想法是这样的。请参阅当控件转到系统时,无法设置单个选择标签的样式。这里所做的是单击时,选择将更改为使用大小的多个选择。对多重选择没有限制,因此该样式有效。杰出的。 (7认同)
  • 这对我来说根本不起作用。我不知道为什么它在上面的代码片段中起作用。 (6认同)
  • 这是可行的,但您能否添加对其工作原理的解释,并删除重复的选项组,这会妨碍理解。我删除了onfocus、onchange和onblur,它仍然有效。唯一有效的行是“option:hover{background-color:yellow;}” (2认同)
  • @user151496 @ewomack 他写的内联js是重要的部分:`onfocus='this.size=10;' onblur='this.size=0;' onchange='this.size=1; this.blur();'`。如果没有这个,该片段也无法工作。 (2认同)

小智 11

选择/选项元素由操作系统呈现,而不是HTML.您无法更改这些元素的样式.

  • 这个答案证明你错了:/sf/answers/4205156371/ (7认同)

Joh*_*ohn 9

问题是即使 JavaScript 也看不到option悬停的元素。这只是为了强调仅使用 CSS 无法解决这个问题(至少在短期内):

window.onmouseover = function(event)
{
 console.log(event.target.nodeName);
}
Run Code Online (Sandbox Code Playgroud)

解决此问题的唯一方法(除了等待浏览器供应商修复错误数千年之外,更不用说影响您正在尝试做的事情的错误)是使用 JavaScript 将下拉菜单替换为您自己的 HTML/XML。这可能涉及使用select元素替换元素以及每个元素ul使用一个元素。radio inputli


Egl*_*yte 5

在火狐浏览器上实现嵌入框阴影CSS的工作原理:

select option:checked,
select option:hover {
    box-shadow: 0 0 10px 100px #000 inset;
}
Run Code Online (Sandbox Code Playgroud)

选中的选项在Chrome中有效:

select:focus > option:checked { 
    background: #000 !important;
}
Run Code Online (Sandbox Code Playgroud)

https://codepen.io/egle/pen/zzOKLe上有测试

对我来说,这适用于Google Chrome版本76.0.3809.100(正式版本)(64位)

我发现的最新文章是Chris Coyier(2019年10月28日)https://css-tricks.com/the-current-state-of-styling-selects-in-2019/

  • 在 FF (63.0.1) 中不起作用。检查在 Chrome 中工作 (4认同)