选择选项填充不适用于Chrome


83

选择选项填充不适用于Chrome

<style>
select option { padding:5px 0px; }
</style>    
<select>
<option>1</option>
<option>2</option>
<option>3</option> 
</select>

2
您想达到什么目的?每个选项要填充5px吗?还是只是主箱?
DeeKayy90 2014年

是的...我需要填充期权价格
Piyush Marvaniya 2014年

1
即使不是严格填充,对于左侧填充也可以使用&nbsp; 虽然此问题得到解决:jsfiddle.net/chech/u5rcheqf/1
chech 2014年

Answers:


136

我刚刚找到了一种将填充应用于chrome中的select输入的方法

select{
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    padding: 5px;
}

似乎可以在当前的Chrome 39.0.2171.71(64位)和Safari中使用(我仅在Mac上进行了测试)。

这似乎删除了添加到选择输入中的默认样式(它也删除了下拉箭头),但是允许您随后使用自己的样式而不用chrome覆盖它。

我在从此处使用代码时偶然发现了此修复程序:http : //fettblog.eu/style-select-elements/


1
这在所有浏览器的工作原理另一种解决方案,是增加&nbsp;在选择列表中第一个选项检查这个这个,希望有所帮助。
shaijut

2
@stom这可能适用于左和右填充,但是我认为它不适用于顶部和底部填充。
rmmoul

至少在我的机器上,它不再起作用了!:)
努诺·克鲁兹

1
你也可以使用像插件选择2选择其将你的<select><option/></select>元素融入到完全可定制<ul><li/></ul>元素。这样,您可以为所有下拉菜单设置与其他输入字段或常规UI匹配的样式。
塔德·沃拉普

3
箭迷失了这个:(
Raul H


9

看起来

不幸的是,Webkit浏览器尚不支持选项标签的样式。

您可能会在这里找到类似的问题

  1. 如何设置选择标签的选项元素的样式?
  2. 选择下拉HTML中的样式选项值不适用于Chrome和Safari

使用最广泛的跨浏览器解决方案是使用ul li

希望能帮助到你!


9
谢谢你的回答。让我感到惊讶的是,自从网站,HTML和CSS问世以来已有很多年了,仍然缺少能够设置选择选项填充等样式的功能。样式和定位元素可能令人沮丧,但是在Android开发中,它是如此容易。我不明白为什么与台式机和本机移动环境相比,带有HTML和CSS的Web环境似乎“未完成”,“正在进行中”。
布赖恩(Bryan)

2
也许在不久的将来,Web会变得更加美丽,并且开发人员将获得影子dom的帮助-robdodson.me/shadow-dom-styles :)希望开发人员可以控制表单元素的内层。RIP IE虽然。
Pravin Waychal

2
@Bryan Web是一项旧技术,因此它有一些旧思想尚未得到改进。由于浏览器的支持,新功能一直很难被任何人使用,并且由于缺乏灵敏性(人们已经做到了现有的解决方法,而人们却没有注意到这些浏览器,因此没有任何变化)。
csga5000

6

我用这个修好了

select {
    max-height: calc(1.2em + 24px);
    height: calc(1.2em + 24px);
}


max-height: calc(your line height + (top + bottom padding));
height: calc(your line height + (top + bottom padding));

到目前为止,这是我迄今为止看到的最好的解决方案。但它只是为我工作时,它height: calc(1.2em + 24px);不是max-height: calc(1.2em + 24px);
朱利叶斯

Julius我检查了所有主要浏览器的max-height是否正常运行。但是使用height属性也是一个很好的机会。
阿里·苏菲扬

3

非常非常简单的想法,但是您可以对其进行相应的修改。这个设置看起来并不好,只是为了提供想法。希望能帮助到你。

CSS:

ul {
    width: 50px;
    height: 20px;
    border: 1px solid black;
    display: block;

}

li {
    padding: 5px 0px;
    width: 50px;
    display: none;

}

HTML:

<ul id="customComboBox">
&nbsp
    <li>Test</li>
    <li>Test 2</li>
    <li>Test 3</li>
</ul>

脚本:

$(document).ready(function(){
    $("#customComboBox").click(function(){
        $("li").toggle("slow");
    });
});

演示


1
我了解@PiyushMarvaniya,但是据我所知,无法使用select选项修改单个元素。这就是为什么我提供了替代方案。
DeeKayy90 2014年

1
本示例不提供键盘导航(箭头或Mac快捷方式),Web无障碍工具。
PiotrŁużecki15年

同样,问题不是要创建自定义下拉菜单,而是要添加填充。我为OP根据他们的要求奠定了坚实的基础,但是我不会为他们创建自定义控件。=)
DeeKayy90'9

1
如果您打算使用UL / LI下拉菜单,我建议您仅使用Bootstrap的下拉窗口小部件。版本2和3支持role =“ menu”和role =“ navigation”以启用箭头键。使用经过IMO严格审查的东西很有意义。
mbokil 2016年

@mbokil +1,绝对是一个不错的选择,而不是重新发明轮子,而是使用那里的东西。
DeeKayy90 '01

2

这在option输入时不起作用,因为它是一个“系统”生成的下拉菜单,但是您可以设置padding一个select。

只需将box-sizing属性重置为content-boxCSS即可。

默认值selectborder-box

select {
 box-sizing: content-box;
 padding: 5px 0;
}

您可以设置选择的填充内容-在Chrome 75中完美运行
danday74 '19

1

对于您的问题,我有一些技巧。但是为此,您必须使用javascript。如果您检测到浏览器是Chrome浏览器,请在每个选项之间插入“ dummy ”选项。为这些“虚拟”选项提供一个新类,并将其禁用。您可以使用font-size属性定义的“ dummy ”选项的高度。

CSS:

option.dummy-option-for-chrome {
  font-size:2px;
  color:transparent;
}

脚本:

function prepareHtml5Selects() {

  var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
  if(!is_chrome) return;

  $('select > option').each(function() {
    $('<option class="dummy-option-for-chrome" disabled></option>')
     .insertBefore($(this));
  });
  $('<option class="dummy-option-for-chrome" disabled></option>')
    .insertAfter($('select > option:last-child'));
}

1

不填充,但是如果您的目标是简单地增大它,则可以增加font-size。并将其与一起使用时,font-size-adjust会在选择而不是在选项上将字体大小恢复为正常大小,因此最终会使字体option变大。

不知道它是否适用于所有浏览器,或者是否会保持最新状态。

已在Chrome 85和Firefox 81上测试。

屏幕截图(在Firefox上)

select {
    font-size: 2em;
    font-size-adjust: 0.3;
}
<label>
  Select: <select>
            <option>Option 1</option>
            <option>Option 2</option>
            <option>Option 3</option>
          </select>
</label>


0

没有Jquery-没有第三方js文件

function clickComboBox(){
  comboOpt = document.getElementsByClassName("opt");
  for (i = 0; i < comboOpt.length; i++) {
      if (comboOpt[i].style.display === "block") {
        comboOpt[i].style.display = "none";
      } else {
        comboOpt[i].style.display = "block";
      }
  }    
}
function clickOpt(value1,text1){
  document.getElementById("selectedValue").value=value1;
  document.getElementById("customComboBox").innerHTML=text1;
  clickComboBox();
}
#customComboBox{
width: 150px;
height: 20px;
border: 1px solid #CCCCCC;
display: block;
padding: 2px 5px;
}
.opt{
padding: 5px 0px;background-color:#CCCCCC;
width: 160px;
display: none;
}
<div id="customComboBox"  onClick="clickComboBox()">
-Select Value-
</div>
<input type="hidden" id="selectedValue">
  <div class="opt">
  <div onClick="clickOpt('01','Test1')"><img  src="https://pasteboard.co/J6940Vs.png" height="20">Test1</div>
  <div style="padding-left:10px;" onClick="clickOpt('02','Test2')">Test2</div>
  <div onClick="clickOpt('03','Test3')">Test3</div>
  </div>

智能代码-使用jquery


-2

您可以font-size根据需要使用属性作为选项。


这似乎在chrome中有效,但在Firefox(最新版本)中无效。Firefox仍仅将下拉列表前未选中框的样式作为目标。

-8

只需设置选择标签的高度

select{
    height: 30px;
    max-height: 30px;
}

这只是重复alreay所说的其他答案,您能为此提供些新的东西吗?
Tiw

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.