You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义CSS下select元素滚动按钮不显示,如何实现显示?

问题解答

原生<select>的下拉菜单是浏览器自带的原生控件,不属于常规DOM元素范畴,WebKit的滚动条伪元素对它的样式控制能力非常有限,没法强制显示滚动按钮。

要实现带滚动按钮的下拉菜单,只能用自定义组件替代原生<select>,把下拉选项放在普通的可滚动<div>里,这样就能完全应用你的滚动条样式。

实现代码示例

HTML 结构

<!-- 自定义下拉容器 -->
<div class="custom-select">
  <button class="select-trigger">选择选项</button>
  <div class="dropdown-menu">
    <div class="options-list">
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
      <div class="option">Why no scroll buttons?</div>
    </div>
  </div>
</div>

CSS 样式

/* 隐藏原生select(如果仍保留的话) */
select {
  display: none;
}

/* 自定义下拉基础样式 */
.custom-select {
  position: relative;
  width: 220px;
}

.select-trigger {
  width: 100%;
  padding: 8px 12px;
  border: 1px solid #ddd;
  border-radius: 4px;
  background: #fff;
  cursor: pointer;
  text-align: left;
}

.dropdown-menu {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  right: 0;
  border: 1px solid #ddd;
  border-radius: 0 0 4px 4px;
  background: #fff;
  display: none;
  z-index: 1000;
}

.options-list {
  max-height: 200px;
  overflow-y: auto;
}

.option {
  padding: 8px 12px;
  cursor: pointer;
}

.option:hover {
  background-color: #f5f5f5;
}

/* 你的滚动条样式 */
::-webkit-scrollbar{
    width: 9px;
    height: 9px;
}

::-webkit-scrollbar-thumb {
    background-color:rgba(155, 155, 155, 0.5);
}

::-webkit-scrollbar-button:single-button {
  background-color: rgba(155, 155, 155, 0.5);
  display: block;
  background-size: 10px;
  background-repeat: no-repeat;
}

::-webkit-scrollbar-button:single-button:vertical:increment{
 border-radius:0px 0px 10px 10px;
}

::-webkit-scrollbar-button:single-button:vertical:decrement{
 border-radius:10px 10px 0px 0px;
}

::-webkit-scrollbar-button:single-button:horizontal:increment{
 border-radius:0px 10px 10px 0px;
}

::-webkit-scrollbar-button:single-button:horizontal:decrement{
 border-radius:10px 0px 0px 10px;
}

JavaScript 交互逻辑

const trigger = document.querySelector('.select-trigger');
const dropdown = document.querySelector('.dropdown-menu');
const options = document.querySelectorAll('.option');

// 切换下拉菜单显示/隐藏
trigger.addEventListener('click', () => {
  dropdown.style.display = dropdown.style.display === 'block' ? 'none' : 'block';
});

// 点击选项更新按钮文本并关闭下拉
options.forEach(option => {
  option.addEventListener('click', () => {
    trigger.textContent = option.textContent;
    dropdown.style.display = 'none';
  });
});

// 点击页面其他区域关闭下拉菜单
document.addEventListener('click', (e) => {
  if (!e.target.closest('.custom-select')) {
    dropdown.style.display = 'none';
  }
});

这样自定义的下拉菜单滚动区域会完全应用你设置的滚动条样式,包括顶部和底部的滚动按钮,效果和普通可滚动div一致。

内容的提问来源于stack exchange,提问作者Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:55:30