【问题标题】:Control position of select options in Chrome OSXChrome OSX 中选择选项的控制位置
【发布时间】:2021-09-21 11:51:26
【问题描述】:

我在span 中有一个自定义样式的选择。我对它的外观很满意。

span.select {
  border: 1px solid #000000;
  display: inline-block;
  position: relative;
  height: 40px;
}
span.select select {
  appearance: none;
  border: none;
  display: block;
  background: transparent;
  height: 100%;
  padding: 0 55px 0 15px;
  background: orange;
}
span.select:after {
  content: "";
  width: 40px;
  position: absolute;
  border-left: 1px solid #000000;
  height: 100%;
  right: 0;
  top: 0;
  background: blue;
  pointer-events: none;
}
<div style="padding: 30px">
  <span class="select">
    <select name="" id="">
      <option value="">An option within a select</option>
    </select>
  </span>
  
</div>

<div style="padding: 30px">
  <span class="select">
    <select name="" id="">
      <option value="">An option within a select</option>
    </select>
  </span>
  
</div>

我遇到的问题是,当它被点击时,选项出现在左侧几个像素处,可能比我想要的低 1 个像素。这些选项应该确实出现在跨度的边界内。

我知道可点击选项本身是一个 UI 元素并且不可设置样式,但是我可以应用重置或 hack 以使它们出现在中心,而不会破坏其他浏览器的体验?

【问题讨论】:

    标签: html css macos google-chrome


    【解决方案1】:

    我不确定您是否需要它仅适用于 OSX 或其他操作系统,但在 Windows 上它看起来与您的屏幕截图完全不同。如果您使用内置选择元素来可视化选项,您将无法很好地控制它们。原因是下拉列表位于 HTML 和 CSS 控件之外(它是浏览器顶部的操作系统覆盖)。我会建议您自定义下拉菜单的每个可见部分,这样您就可以完全控制它。您仍然可以将“选择”标签用于所有内置事件和易用性,只需将其完全隐藏即可。

    如果您只需要在 OSX 上使用这种方法,在您的位置,我会尝试将选择的感知位置向左和向下移动一点。我说感知而不是实际,因为如果你真的移动它,选项也会移动。因此,将一些 div 或类似的东西放在选择的后面,并使它看起来像选择从左下方开始。 希望这个 hack 有效。

    span{
        background-color: orange;
    }
    .dropdownSelectedOption{
        margin-top: 10px;
        padding-right: 10px;
        display: inline-block;
    }
    span.select {
        border: 1px solid #000000;
        display: inline-block;
        position: relative;
        height: 40px;
        padding-right: 40px;
    }
    span.select select {
        position: absolute;
        top: -10px;
        left: 10px;
        opacity: 0;
        border: none;
        display: block;
        background: transparent;
        height: 100%;
        width: 100%;
        z-index: 1;
        background: transparent;
    }
    span.select:after {
        content: "";
        width: 40px;
        position: absolute;
        border-left: 1px solid #000000;
        height: 100%;
        right: 0;
        top: 0;
        background: blue;
        pointer-events: none;
    }
    <span class="select">
        <div class="dropdownSelectedOption">An option within a select</div>
        <select name="" id="" onchange="updateUI(event)">
            <option value="An option within a select">An option within a select</option>
            <option value="option 2 within a select">option 2 within a select</option>
        </select>
    </span>
    
    <script>
        function updateUI(event){
            event.target.parentElement.querySelector('.dropdownSelectedOption').innerText = event.target.value;
        }
    </script>

    通过更改选择的顶部和左侧位置,您将移动选项将出现的位置。 (我已经为每个示例放置了 10px)

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多