在css中有没有一种方法可以选择一个打开的选择框?

fhity93d  于 2023-03-14  发布在  其他
关注(0)|答案(4)|浏览(167)

我在webkit-appearance属性设置为none后,在选择框中设置了一个背景图片(向下箭头)。当选项列表打开时,我想显示另一个背景图片(向上箭头)。是否有一个伪类或其他东西?我在搜索过程中找不到任何东西...

l3zydbqr

l3zydbqr1#

你可以使用:focus伪类。
但是这将指示“打开”状态,当通过tab选择<select>或刚刚选择一个项目时也是如此。为了避免这种情况,您可以使用类似select:hover:focus的东西,但这是相当丑陋的,不是一个可靠的解决方案。

select:focus {
  background-color: blue;
  color: white;
}
<select>
  <option>Click me</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>
camsedfj

camsedfj2#

无法检测HTML select元素是否是使用CSS或JavaScript打开的。
如果你想定制一个下拉菜单的箭头符号,你最好的选择是使用一个Map到隐藏的select元素的下拉菜单组件。

9o685dep

9o685dep3#

这个职位是旧的,但今天;::before::after伪类仍然不能处理select元素。
这里是使用:focus-within伪类的好机会,我制作了这个简单的codepen来演示它的使用。
codepen
代码片段:

@charset "UTF-8";
.wrapper {
  position: relative;
  display: inline-block;
}
.wrapper::after {
  content: "";
  font-family: "Font Awesome 5 Free";
  font-weight: 900;
  position: absolute;
  right: 16px;
  top: 22px;
  font-size: 18px;
  pointer-events: none;
  transition: 0.2s ease;
}
.wrapper:focus-within::after {
  transform: rotateX(0.5turn) translateY(-2px);
}
.wrapper select {
  background: linear-gradient(180deg, #F8F9FB 0%, #F1F2F4 100%);
  border: 1px solid var(--grayscale-400);
  box-sizing: border-box;
  border-radius: 3px;
  width: 200px;
  left: 2px;
  cursor: pointer;
  padding: 24px 12px;
  font-size: 16px;
  appearance: none;
}
.wrapper select:focus {
  outline: unset;
}
.wrapper select > option:first-child {
  display: none;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet"/>
<div class="wrapper">
  <select>
    <option>Choice Label First</option>
    <option value="Choice 1">Choice 1</option>
    <option value="Choice 2">Choice 2</option>
    <option value="Choice 3">Choice 3</option>
    <option value="Choice 4">Choice 4</option>
  </select>
</div>
kse8i1jr

kse8i1jr4#

你可以用途:聚焦和不聚焦它的变化

select:focus {
  background-color: blue;
  color: white;
}
<select onchange="this.blur()">
  <option>Click me</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

相关问题