如何仅使用CSS设置<option>的样式?


102

注意:此问题与创建自定义下拉列表无关。它仅涉及<option>CSS中select元素内样式元素的可能性

如何<option><select>具有跨浏览器兼容性的元素设置样式?我知道许多JavaScript方法可以自定义下拉列表以将<li>其转换为,这并不是我所问的。

<select class="select">
    <option selected>Select</option>
    <option>Blue</option>
    <option >Red</option>
    <option>Green</option>
    <option>Yellow</option>
    <option>Brown</option>
</select>

我想问的是,仅CSS可以实现,并且与IE9 +,Firefox和Chrome兼容。

在此处输入图片说明

我想要这样或尽可能地接近样式。

在此处输入图片说明

我在这里尝试了http://jsfiddle.net/jitendravyas/juwz3/3/,但是Chrome除了字体颜色没有显示任何样式,而Firefox显示了更多颜色。如何在Chrome中也可以使用边框和填充?


@ManseUK-这<option>不是整个下拉列表
Jitendra Vyas

2
@ManseUK:我不确定是否相同。该问题询问您是否可以<select>设置页面上元素外观的样式。此问题询问您是否可以设置<option>元素列表的样式。
Andy E

13
看在上帝的份上,这不是两个链接的问题中的任何一个的重复(顺便说一句,它们彼此不同)。一种是关于样式选择而不是选项的样式,而另一种是关于样式样式的询问,另一种则没有only-css / no-js的要求。
matteo 2015年

12
我讨厌看到被错误地标记为重复的问题或被错误地关闭的问题,尽管被证明是错误的,但仍然存在了很多年。
matteo 2015年

Answers:


70

编辑2015年5月

免责声明:我摘录了以下链接的摘录:

重要更新!

除了WebKit之外,从Firefox 35开始,我们将能够使用该appearance属性:

现在使用组合框上-moz-appearancenone值删除下拉按钮

因此,现在为了隐藏默认样式,就像在我们的select元素上添加以下规则一样简单:

select {
   -webkit-appearance: none;
   -moz-appearance: none;
   appearance: none;
}

对于IE 11支持,可以使用[ ::-ms-expand] [15]。

select::-ms-expand { /* for IE 11 */
    display: none;
}

旧答案

不幸的是,使用纯CSS无法实现您的要求。但是,您可以选择以下类似方法来解决。查看下面的实时代码。

div { 
  margin: 10px;
  padding: 10px; 
  border: 2px solid purple; 
  width: 200px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}
div > ul { display: none; }
div:hover > ul {display: block; background: #f9f9f9; border-top: 1px solid purple;}
div:hover > ul > li { padding: 5px; border-bottom: 1px solid #4f4f4f;}
div:hover > ul > li:hover { background: white;}
div:hover > ul > li:hover > a { color: red; }
<div>
  Select
  <ul>
    <li><a href="#">Item 1</a></li>
    <li><a href="#">Item 2</a></li>
    <li><a href="#">Item 3</a></li>
  </ul>
</div>

编辑

这是您前段时间提出的问题。 如何仅在没有JavaScript的情况下使用CSS设置<select>下拉列表的样式? 正如它所表明的那样,只有在Chrome中以及在某种程度上在Firefox中,您才能实现所需的功能。否则,不幸的是,没有用于选择样式的跨浏览器纯CSS解决方案。


3
+1感谢它的好代码。但就我而言,我想与<select>。在<div>语义上使用不正确。
Jitendra Vyas

2
@JitendraVyas,我知道,但是正如我回答的那样,这是不可能的。您在第一张图中获得的成就是您所能做的。参见编辑。顺便说一句,我也回答了您之前的问题,请参见。
萨瓦斯·韦多瓦

“重要更新”部分表明您可以option使用css设置标签样式,但不能,您只能设置select标签样式。在此答案中显示
svnm

这是上述示例的JavaScript版本,其中添加了回调和其他一些有用的功能:dynamicdrive.com/dynamicindex1/ergodropdown.htm
可可

4

没有跨浏览器来样式化选项元素的方式,当然还不能达到第二个屏幕截图的程度。您也许可以将它们设为粗体,并设置字体大小,但仅此而已...


2

在没有覆盖JavaScript的功能之前,我一直在选择项目,因此我认为在Chrome中是不可能的。无论您使用插件还是编写自己的代码,对于Chrome / Safari来说,仅CSS都是不可行的,正如您所说的,Firefox更好地处理了它。


请删除最后一段-无法在线访问该URL。
kumarharsh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.