【问题标题】:Select option padding not working in chrome选择选项填充在 chrome 中不起作用
【发布时间】:2014-05-06 01:03:47
【问题描述】:

选择选项填充在 chrome 中不起作用

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

【问题讨论】:

标签: html css


【解决方案1】:

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

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/

【讨论】:

  • 另一种适用于所有浏览器的解决方案,将&amp;nbsp; 添加到选择列表检查thisthis 中的第一个选项,希望有所帮助。
  • @stom 这可能适用于左右填充,但我认为它不适用于顶部和底部填充。
  • 这不再工作了,至少在我的机器上! :)
  • 您也可以使用像select2chosen 这样的插件,将您的&lt;select&gt;&lt;option/&gt;&lt;/select&gt; 元素转换为完全可定制的&lt;ul&gt;&lt;li/&gt;&lt;/ul&gt; 元素。通过这种方式,您可以设置与其他输入字段或一般 UI 匹配的所有下拉列表的样式。
  • 箭迷路了 :(
【解决方案2】:

这个简单的技巧将缩进文本。效果很好。

select {
  text-indent: 5px;
}

【讨论】:

  • 这会将填充添加到选择本身,但不会添加到选项中。并且在 Chrome 64 中对选项应用文本缩进也不起作用。
  • Chrome 71 将此称为“未知属性”。
【解决方案3】:

好像

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

你可以在这里找到类似的问题

  1. How to style a select tag's option element?
  2. Styling option value in select drop down html not work on Chrome & Safari

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

希望对你有帮助!

【讨论】:

  • 感谢您的回答。令我惊讶的是,在网站、HTML 和 CSS 出现这么多年之后,仍然缺乏能够设置诸如选择选项填充之类的样式的能力。样式和定位元素可能非常令人沮丧,但在 Android 开发中,它要容易得多。我不明白为什么带有 HTML 和 CSS 的网络环境看起来如此“未完成”,与桌面和原生移动环境相比,这是一个“正在进行中的工作”。
  • 也许在不久的将来 web 会更漂亮,开发人员将得到 shadow dom 的帮助 - robdodson.me/shadow-dom-styles :) 希望开发人员能够控制表单元素的内层。 RIP IE。
  • @Bryan Web 是一项古老的技术,因此它有一些尚未改进的旧思想。由于对浏览器的支持,新功能对任何人的影响总是很慢,并且由于缺乏不敏感(有现有的变通方法,人们会这样做,最终用户不会注意到这些浏览器缺少),没有任何变化。
【解决方案4】:

我用这个修复了它

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);
  • 朱利叶斯我检查了所有主要浏览器的最大高度都运行良好。但是使用 height 属性也是一个很好的机会。
【解决方案5】:

非常非常简单的想法,但您可以相应地修改它。这不是为了看起来不错,只是为了提供想法。希望对您有所帮助。

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");
    });
});

DEMO

【讨论】:

  • @PiyushMarvaniya 我明白,但是我记得不可能使用选择选项修改单个元素。这就是我提供替代方案的原因。
  • 此示例不提供键盘导航(箭头或 mac 快捷方式)、网络辅助工具。
  • 再次,问题不是创建自定义下拉菜单,而是添加填充。我已经根据他们的要求为 OP 提供了一个单一的基础,但是我不会为他们创建自定义控件。 =)
  • 如果您打算使用 UL/LI 下拉菜单,我建议您只使用 Bootstrap 的下拉小部件。版本 2 和 3 支持 role="menu" 和 role="navigation" 以启用箭头键。使用经过 IMO 审查的东西是有意义的。
  • @mbokil +1,绝对是一个不错的选择,而不是重新发明轮子,使用现有的东西。
【解决方案6】:

这不适用于optionentry,因为它是“系统”生成的下拉菜单,但您可以设置选择的padding

只需在 CSS 中将 box-sizing 属性重置为 content-box

select 的默认值为border-box

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

【讨论】:

  • 您可以设置选择的填充 - 在 Chrome 75 中完美运行
【解决方案7】:

我有一个小技巧可以解决你的问题。但为此,您必须使用 javascript。如果您检测到浏览器是 Chrome,则在每个选项之间插入“dummy”选项。为这些“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'));
}

【讨论】:

    【解决方案8】:

    不是填充,但如果您的目标只是让它变大,您可以增加font-size。并且将它与font-size-adjust 一起使用会在选择而不是选项上将字体大小减小到正常,因此最终会使option 更大。

    不确定它是否适用于所有浏览器,还是会继续在当前版本中运行。

    在 Chrome 85 和 Firefox 81 上测试。

    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>

    【讨论】:

      【解决方案9】:

      任意选项的任意缩进

      如果您只想缩进随机、任意的&lt;option /&gt; 元素,您可以使用&amp;nbsp;,它在此处发布的解决方案中具有最大的跨浏览器兼容性...

      .optionGroup {
        font-weight: bold;
        font-style: italic;
      }
      <select>
          <option class="optionGroup" selected disabled>Choose one</option>
          <option value="sydney" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Sydney</option>
          <option value="melbourne" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Melbourne</option>
          <option value="cromwell" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Cromwell</option>
          <option value="queenstown" class="optionChild">&nbsp;&nbsp;&nbsp;&nbsp;Queenstown</option>
      </select>

      选项的有序缩进

      但如果您的数据有一些排序、有序的结构,那么建议您使用&lt;optgroup/&gt; 语法....

      HTML 元素在一个元素中创建一组选项。 (来源:MDN Web Docs: &lt;optgroup&gt;

      <select>
          <optgroup label="Australia" default selected>
              <option value="sydney">Sydney</option>
              <option value="melbourne">Melbourne</option>
          </optgroup>
          <optgroup label="United Kingdom">
              <option value="london">London</option>
              <option value="glasgow">Glasgow</option>
          </optgroup>
      </select>

      不幸的是,目前浏览器只允许并支持一个&lt;optgroup /&gt; 级别。 (来源:w3.org。)就我个人而言,我认为规范的那部分已损坏,但您始终可以使用上面的 &amp;nbsp; 技巧扩展到第三、第四等缩进级别。

      【讨论】:

        【解决方案10】:

        没有 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

        【讨论】:

          【解决方案11】:

          嘿家伙,让选项文本填充的简单方法让我们使用就像下面的检查

          <option value="<?= $subc->gc_id ?>">&nbsp;&nbsp;&nbsp;<?php echo $subc->gc_title; ?> 
          </option>
          

          希望大家喜欢这个

          【讨论】:

            【解决方案12】:

            如果需要,您可以使用font-size 属性作为选项。

            【讨论】:

            • 这似乎在 chrome 中有效,但在 Firefox(最新版本)中无效 Firefox 仍然只针对下拉菜单前未选中框的样式。
            【解决方案13】:

            您应该为您的 CSS 定位选择而不是选择选项。

            select { 
            padding: 10px;
            margin: 0;
            -webkit-border-radius:4px;
            -moz-border-radius:4px;
            border-radius:4px;
            }
            

            查看这篇文章Styling Select Box with CSS3 了解更多样式选项。

            【讨论】:

              猜你喜欢
              • 2013-02-18
              • 2015-11-22
              • 2014-05-01
              • 2015-06-08
              • 1970-01-01
              • 1970-01-01
              • 2018-01-08
              • 2019-11-24
              • 1970-01-01
              相关资源
              最近更新 更多