【问题标题】:Hide vertical scrollbar in <select> element在 <select> 元素中隐藏垂直滚动条
【发布时间】:2010-12-25 18:55:08
【问题描述】:

您好,我有多个选择框,我需要隐藏垂直滚动条,可以吗?

<select name="sCat" multiple="true">
<!-- My Option Here -->
</select>

好吧,但是我怎样才能实现从具有 ID 的列表中选择项目然后使用 jQuery 来管理这个 id.click 函数的效果呢?那我应该使用什么元素呢?

【问题讨论】:

  • 我不知道。您需要自己制作一个“控件”(即使用 div 和带有点击事件的按钮或其他东西来模拟效果 [更不用说键盘快捷键])。
  • "好吧,但是我怎样才能实现从列表中选择具有 ID 的项目,然后使用 jQuery 来管理这个 id.click 函数的效果?那我应该使用什么元素呢?"选项标签也没有 ID。我认为您的意思是存储ID的属性。如果是这样,您可以使用任何支持属性的标签将值放入:单选、复选框、按钮。理论上甚至是文本框。

标签: html css


【解决方案1】:

我知道这个帖子有点老了,但是这里有很多非常老套的答案,所以我想提供一些更简单、更干净的东西:

select {
    overflow-y: auto;
}

正如您在this fiddle 中看到的那样,如果您不知道您将拥有的选择选项的确切数量,此解决方案可为您提供灵活性。它在您不需要滚动条的情况下隐藏滚动条,而在另一种情况下隐藏可能的额外选项元素。不要做所有这些 hacky 重叠 div 的东西。它只会造成不可读的标记。

【讨论】:

  • 没问题,当你有答案时,总是应该回答。这就是人的全部意义所在。
  • 为什么这个答案没有被选为最佳答案?
  • @JuanLanus 好吧,我想我对 auto 的含义有误解。显然, auto 只是让浏览器决定如何处理滚动条,而 Firefox 处理它的方式与其他人不同,这非常糟糕。请参阅此链接中的语法部分:developer.mozilla.org/en-US/docs/Web/CSS/overflow
  • 这很好,但 Mozilla 确实需要使用该程序。
  • 这和最流行的答案一样有效,而且更干净。
【解决方案2】:

这就是我们欣赏 CSS3 的所有力量的地方:

.bloc {
  display: inline-block;
  vertical-align: top;
  overflow: hidden;
  border: solid grey 1px;
}

.bloc select {
  padding: 10px;
  margin: -5px -20px -5px -5px;
}
<div class="bloc">
  <select name="year" size="5">
    <option value="2010">2010</option>
    <option value="2011">2011</option>
    <option value="2012" SELECTED>2012</option>
    <option value="2013">2013</option>
    <option value="2014">2014</option>
  </select>
</div>

Fiddle

【讨论】:

  • 使用剪辑比使用边距更好。
  • 很好,但有一点改进是使用 span 而不是 div,以防万一浏览器不支持 inline-block(是的,我一定是在谈论微软没有天赋的婴儿)。
  • This is where we appreciate all the power of CSS3。谁能告诉我 CSS3 在哪里?
  • 它不是真正的 css3,你可以在 CSS2 中做同样的事情,或者(通过调整)甚至 1。事实上,它更像是一种 hack,而不是真正的 select 样式,它仍然无法设置样式。
  • 那么如果你有超过 5 个元素会发生什么?他们只是被隐藏了?
【解决方案3】:

不,您无法如此详细地控制选择框的外观。

选择框通常显示为下拉列表,但没有任何内容表明它必须始终以这种方式显示。它的显示方式取决于系统,例如在某些手机上,您根本看不到下拉菜单,而是覆盖大部分或全部屏幕的选择器。

如果您想控制表单元素的外观如此详细,您必须使用常规 HTML 元素制作自己的表单控件(或找到其他已经这样做的人)。

【讨论】:

  • Okey,但是我如何才能实现从具有 ID 的列表中选择项目然后使用 jQuery 管理此 id.click 函数的效果?那我应该使用什么元素?
  • 为什么投反对票?如果你不解释你认为错的地方是什么,它就无法改进答案。
【解决方案4】:

如果其他人遇到此问题,以供将来参考。 我找到了一个适用于所有现代浏览器的解决方案:

select{
    scrollbar-width: none; /*For Firefox*/;
    -ms-overflow-style: none;  /*For Internet Explorer 10+*/;
}

select:-webkit-scrollbar { /*For WebKit Browsers*/
    width: 0;
    height: 0;
}

基本上这样滚动条被设置为宽度为0,因此不显示。

【讨论】:

    【解决方案5】:

    如果您真的希望滚动条消失,您可以使用&lt;div&gt; 覆盖滚动条。
    虽然它不能在 IE6 上运行,但现代浏览器确实允许您在其上放置 &lt;div&gt;

    【讨论】:

      【解决方案6】:

      仅限 Chrome(可能还有其他 webkit 浏览器):

      /* you probably want to specify the size if you're going to disable the scrollbar */
      select[size]::-webkit-scrollbar {
      	display: none;
      }
      <select size=4>
        <option>Mango</option>
        <option>Peach</option>
        <option>Orange</option>
        <option>Banana</option>
      </select>

      【讨论】:

        【解决方案7】:

        我的跨浏览器 .no-scroll sn-p:

        .no-scroll::-webkit-scrollbar {display:none;}
        .no-scroll::-moz-scrollbar {display:none;}
        .no-scroll::-o-scrollbar {display:none;}
        .no-scroll::-google-ms-scrollbar {display:none;}
        .no-scroll::-khtml-scrollbar {display:none;}
        <select class="no-scroll" multiple="true">
        	<option value="2010" >2010</option>
        	<option value="2011" >2011</option>
        	<option value="2012" SELECTED>2012</option>
        	<option value="2013" >2013</option>
        	<option value="2014" >2014</option>
        </select>

        【讨论】:

        • 2014 没有显示为选项。您必须向下拖动才能看到它,这只是偶然发生的,或者鼠标中键滚动,您不会这样做,因为它显然不可滚动。
        • @1j01 将 size="5" 添加到选择标签以查看所有选项
        【解决方案8】:

        就像 Guffa 所说,您无法可靠地控制原生控件。最好的方法可能是在每个项目旁边制作一个带有单选按钮的元素框,然后使用标签和 JavaScript 使“行”具有交互性,因此单击单选按钮或标签将为选定的行着色。

        【讨论】:

          【解决方案9】:

          更改 padding-bottom ,即可能是最简单的方法。

          【讨论】:

            【解决方案10】:

            我制定了 Arraxas 解决方案:

            • 扩展框以包含所有元素

            • 悬停时更改背景和颜色

            • 点击时获取和提醒值

            • 点击后不要一直高亮选择

            let selElem=document.getElementById('myselect').children[0];
            selElem.size=selElem.length;
            selElem.value=-1;
            
            selElem.addEventListener('change', e => {
              alert(e.target.value);
              e.target.value=-1;
            });
            #myselect {
              display:inline-block; overflow:hidden; border:solid black 1px;
            }
            
            #myselect > select {
              padding:10px; margin:-5px -20px -5px -5px;";
            }
            
            #myselect > select > option:hover {
              box-shadow: 0 0 10px 100px #4A8CF7 inset; color: white;
            }
            <div id="myselect">
              <select>
                <option value="2010">2010</option>
                <option value="2011">2011</option>
                <option value="2012">2012</option>
                <option value="2013">2013</option>
                <option value="2014">2014</option>
                <option value="2015">2015</option>
                <option value="2016">2016</option>
               </select>
            </div>

            【讨论】:

              【解决方案11】:

              我认为你不能。 SELECT 元素呈现在 CSS 和 HTML 范围之外的位置。 是不是变灰了?

              但您可以尝试添加“大小”属性。

              【讨论】:

              • Okey,但是我如何才能实现从具有 ID 的列表中选择项目然后使用 jQuery 管理此 id.click 函数的效果?那我应该使用什么元素?
              • 添加“大小”属性仍然显示垂直鬼滚动条
              猜你喜欢
              • 2013-10-26
              • 2011-03-11
              • 2017-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-02-12
              • 2020-01-13
              • 1970-01-01
              相关资源
              最近更新 更多