我正在尝试用我自己的照片替换选择的箭头。我包括选择在一个div与相同的大小,我设置的背景选择为透明,我包括一个图片(与箭头大小相同)在div的右上角作为背景。

它只适用于Chrome浏览器。

我如何让它在Firefox和IE9中工作,我得到了这个:

.styled-select { width: 100px; height: 17px; overflow: hidden; overflow: -moz-hidden-unscrollable; background: url(images/downarrow_blue.png) no-repeat right white; border: 2px double red; display: inline-block; position: relative; } .styled-select select { background: transparent; -webkit-appearance: none; width: 100px; font-size: 11px; border: 0; height: 17px; position: absolute; left: 0; top: 0; } body { background-color: #333333; color: #FFFFFF; } .block label { color: white; } <HTML> <HEAD> </HEAD> <BODY> <p/> <form action="/prepareUpdateCategoryList.do?forwardto=search"> <fieldset class="block" id="searchBlock"> <p> <label style="width:80px">Class</label> <div class="styled-select"> <select property="voucherCategoryClass"> <option value="0">Select </option> <option value="7382">steam </option> </select> </div> </p> </fieldset> </form> </BODY> </HTML>


当前回答

样式标签与CSS和使用指针事件:

<label>
<select>
   <option value="0">Zero</option>
   <option value="1">One</option>
</select>
</label>

相对CSS为

label:after {
    content:'\25BC';
    display:inline-block;
    color:#000;
    background-color:#fff;
    margin-left:-17px;   /* remove the damn :after space */
    pointer-events:none; /* let the click pass trough */
}

我只是在这里使用了一个向下箭头,但是你可以设置一个带有背景图像的块。这是一个丑陋的小提琴样本:https://jsfiddle.net/1rofzz89/

其他回答

你有没有试过这样的方法:

.styled-select select {
    -moz-appearance:none; /* Firefox */
    -webkit-appearance:none; /* Safari and Chrome */
    appearance:none;
}

还没有测试,但应该工作。

编辑:Firefox似乎在35版之前都不支持这个功能(点击这里阅读更多)

这里有一个解决办法,看看那篇文章上的jsfiddle。

这里有几个例子

它是基于这个答案,但我添加了一个列表,以使设计更加简洁

select.moreMinimal {

    background-color: inherit;
    display: inline-block;
    font: inherit;
    padding: 0 2.2em 0 1em;    
    margin: 0;      
    cursor: pointer;

    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    -webkit-appearance: none;
    -moz-appearance: none;
  }

select.moreMinimal {
    background-image:
      linear-gradient(45deg, transparent 50%, gray 50%),
      linear-gradient(135deg, gray 50%, transparent 50%);
    background-position:
      calc(100% - 20px), 
      calc(100% - 15px);
    background-size:
      5px 5px,
      5px 5px;
    background-repeat: no-repeat;
}
  
//TODO: Probably shouldn't be focus, cause when you click it again it's still green
select.moreMinimal:focus {
    background-image:
        linear-gradient(45deg, green 50%, transparent 50%),
        linear-gradient(135deg, transparent 50%, green 50%);
    background-position:
        calc(100% - 15px),
        calc(100% - 20px);
    background-size:
        5px 5px,
        5px 5px;
    background-repeat: no-repeat;
    border-color: green;
    outline: 0;
}

看看这个 这很俗气,很简单:

将-prefix-appearance设置为none以删除样式 使用文本缩进将内容向右“推”一点 最后,将text-overflow设置为空字符串。任何超出它宽度的东西都会变成…没有什么!包括箭头。

现在你可以自由地设置你想要的样式:)

.selectParent { width: 80px; overflow: hidden; } .selectParent select { text-indent: 1px; text-overflow: ''; width: 100px; -webkit-appearance: none; -moz-appearance: none; appearance: none; padding: 2px 2px 2px 2px; border: none; background: transparent url("http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png") no-repeat 60px center; } <div class="selectParent"> <select> <option value="1">Option 1</option> <option value="2">Option 2</option> </select> </div>

查看JSFiddle

下面是一个优雅的修复,它使用span来显示值。

布局是这样的:

<div class="selectDiv">
   <span class="selectDefault"></span>
   <select name="txtCountry" class="selectBox">
      <option class="defualt-text">-- Select Country --</option>
      <option value="1">Abkhazia</option>
      <option value="2">Afghanistan</option>
   </select>
</div>

小提琴

我已经提到了这篇文章,它像魅力一样工作,除了它没有隐藏在IE浏览器中的箭头。

但是添加以下会隐藏IE中的箭头:

&: -ms-expand { 显示:没有; }

完整解决方案(sass)

$select-border-color: #ccc; $select-focus-color: green; select { cursor: pointer; /* styling */ background-color: white; border: 1px solid $select-border-color; border-radius: 4px; display: inline-block; font: inherit; line-height: 1.5em; padding: 0.5em 3.5em 0.5em 1em; /* reset */ margin: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-appearance: none; -moz-appearance: none; background-image: linear-gradient(45deg, transparent 50%, $select-border-color 50%), linear-gradient(135deg, $select-border-color 50%, transparent 50%), linear-gradient(to right, $select-border-color, $select-border-color); background-position: calc(100% - 20px) calc(1em + 2px), calc(100% - 15px) calc(1em + 2px), calc(100% - 2.5em) 0.5em; background-size: 5px 5px, 5px 5px, 1px 1.5em; background-repeat: no-repeat; /* Very imp: hide arrow in IE */ &::-ms-expand { display: none; } &:-moz-focusring { color: transparent; text-shadow: none; } &:focus { background-image: linear-gradient(45deg, $select-focus-color 50%, transparent 50%), linear-gradient(135deg, transparent 50%, $select-focus-color 50%), linear-gradient(to right, $select-focus-color, $select-focus-color); background-position: calc(100% - 15px) 1em, calc(100% - 20px) 1em, calc(100% - 2.5em) 0.5em; background-size: 5px 5px, 5px 5px, 1px 1.5em; background-repeat: no-repeat; border-color: $select-focus-color; outline: 0; } }