【问题标题】:How to change the select drop down arrow color without using an image?如何在不使用图像的情况下更改选择下拉箭头颜色?
【发布时间】:2018-08-15 01:17:48
【问题描述】:

所以我试图让选择标签中的箭头成为自定义颜色。 示例:

<input type="checkbox" class="checkbox1" checked="checked" />
<input type="text" spellcheck="false" size="20" />
<select class="dropdown">
    <option value=">">&gt;</option>
    <option value="<">&lt;</option>
    <option value=">=">&ge;</option>
    <option value="<=">&le;</option>
    <option value="==">&#61;</option>
    <option value="!=">&ne;</option>
</select>

我已经看到很多建议使用图片来代替,但我不能这样做。也许使用&amp;#9660;▼ 可能是解决方案的一部分?

【问题讨论】:

  • 问题是 CSS 不能替换 select 列表中的箭头,因为它是由浏览器呈现的。此外,您不能在select 列表中使用:before:after 伪选择器,这就是为什么我相信您也无法使用 的原因。最好的办法是使用 background-image 方法。
  • @takkun 你检查我的更新了吗?

标签: html css


【解决方案1】:

最新更新:(jsFiddle:http://jsfiddle.net/ztayse92/) 使上一个解决方案的箭头位于下拉列表下方并使用透明背景。这是最完美的,它解决了覆盖/悬停不可点击区域的问题。

更新:不使用图像破解答案:(jsFiddle:http://jsfiddle.net/swpha0s0/4/

我制作了一个具有相对定位的容器,并将下拉选择和覆盖符号(箭头)放置在绝对定位上。在 CSS 中,我还完全删除了箭头样式。唯一的缺点是,由于箭头符号是一个叠加层,它不可点击,或者换句话说,当鼠标点击箭头时,下拉菜单不会打开。我使箭头尽可能少地占用空间。我还想过在箭头上放置一个单击处理程序并使用 JavaScript 打开下拉列表,但根据此(Is it possible to use JS to open an HTML select to show its option list?)这是不可能的。当您将鼠标悬停在箭头上时,我将光标设置为默认值,这样用户就不会收到错误的反馈,即这也是可点击的。所以这是您想要的最接近的解决方案 - 我很好奇为什么不允许使用图像以及它的用例是什么??

HTML:

<div class="parent">
<select class="dropdown">
    <option value="&gt;">&gt;</option>
    <option value="&lt;">&lt;</option>
    <option value="&gt;=">&ge;</option>
    <option value="&lt;=">&le;</option>
    <option value="==">&#61;</option>
    <option value="!=">&ne;</option>
</select><div class="overlay-arrow">&#9660;</div>
</div>

CSS:

select.dropdown {
     -webkit-appearance: none;       
     -moz-appearance: none;    
     appearance: none;    
     background-position: 22px 3px;                
     background-size: 13px 13px; 
     width: 40px;
    height: 20px;
    margin-left: 4px;
    position: absolute;
    cursor: pointer;

}

.overlay-arrow {
    font-size: 9px;
    color: red;
    position: absolute;
    right: 0px;
    top : 10px;
    cursor: default;
    line-height: 1px;

}

.parent {
    position: relative;
    width: 40px;
    height: 20px;
    float: left;
    margin: 0px;
    padding: 0px;
}

带图片的原始答案:(jsFiddle:http://jsfiddle.net/swpha0s0/2/):

我建议你使用这样的 CSS

select.dropdown {
     -webkit-appearance: none;       
     -moz-appearance: none;    
     appearance: none;
     background: url('http://www.durhamcollege.ca/wp-content/themes/dc/images/green_download_arrow.png')  no-repeat;         
     background-position: 22px 3px;                
     background-size: 13px 13px; 
     width: 40px;
     height: 20px;
     margin-left: 4px;
}

.dropdown-container {
     float :left;
     margin: 0px;
}

input {
    margin-top:4px;
    float: left;
    display: block;
}
input[type=checkbox]{
    margin-top:8px;   
}

您必须静态更改背景位置并以您喜欢的方式将其居中,但如果您只需要更改箭头外观或放置自己的图像,那就很好了。如果没有图像/css 或 javascript(如果您想完全更改小部件),则无法做到这一点。您可以在单击某个类以更改背景时切换它,这样您也可以有另一个向上的箭头。

【讨论】:

  • 您的建议的问题是您使用的是图像,正如我在原帖中所说,我不能使用图像来解决问题。我只是希望能够将黑色默认箭头更改为不同的颜色。
  • 据我所知和阅读,如果没有图像+css 或 javascript+css,这是不可能的。当你说你不能时,我以为你不是说我不被允许。但我只是想到了一个 hack,不过我会发布它;)敬请期待!
  • @takkun 请检查我更新的答案 - 这是可以做到的最好的。请让我知道您的想法,如果您正在寻找它,请接受它,并请解释用例,因为我很好奇为什么下拉菜单中不允许使用图像?我编辑了你的标题,所以它也更明确:)
  • 顺便说一句,我刚刚找到了另一个类似的答案,但有同样的问题(箭头不可点击)-stackoverflow.com/a/25926156/986160。它甚至更骇人听闻,因为它通过边框颜色设置箭头颜色..所以边框也与箭头颜色相同..
  • 当...我很笨。是的,你就是那个时候。我想我只需要以我自己的愚蠢方式来解决它。对这一切感到抱歉。 :/ 不过,在这一切中,你一直都很棒。谢谢。
猜你喜欢
  • 2022-08-19
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多