我一直使用这个“技巧”:
select {
-moz-appearance: none;
text-indent: 0.01px;
text-overflow: '';
}
我希望在Firefox上创建自定义选择框,但自从30版本发布以来,这个功能完全无法使用。我尝试查找是否已将其弃用,但找不到任何信息。有没有解决方法或替代方法?
我一直使用这个“技巧”:
select {
-moz-appearance: none;
text-indent: 0.01px;
text-overflow: '';
}
我希望在Firefox上创建自定义选择框,但自从30版本发布以来,这个功能完全无法使用。我尝试查找是否已将其弃用,但找不到任何信息。有没有解决方法或替代方法?
截至2015年1月,随着Firefox 35的发布,此功能现在可以正常使用。有关历史参考,请参见下面的答案。
使用的黑客技术是这样的:
select {
-moz-appearance: none;
text-indent: 0.01px;
text-overflow: '';
}
在我的测试中,使用FF 29,-moz-appearance:none;
没有任何影响。导致箭头框不出现的原因是后面两行代码。这些代码将任何溢出内容替换为空字符串,然后使用text-indent使 select
溢出。由于箭头框被渲染为单个元素,类似于单个字母,这导致它被空字符串替换。
Mozilla的某位员工注意到,如果下拉菜单的 select
元素上有padding,箭头大小不会改变。根据错误报告,此问题现已得到解决:
我们也可以关注 Firefox Bugzilla 上的请求,希望他们能够创建一种非常规方法来解决这个问题。 请注意:不要去那里并开始发布想要它的评论。部分原因是人们引起了骚动而导致延迟。 为该问题投票 可能会有所帮助。
现在Firefox正在积极开发中。2个修补程序已经提交并等待审核已有一周时间。最有可能的情况是它将会被纳入FF35 Aurora,我们还有几周时间来进行审核和批准 (Firefox按照6周发布一次的计划运作)。它也可能会被推迟,甚至在当前的Aurora和Beta版本中被"提升",以便更早地发布。
这个问题现在已经正式解决了!有点。一个允许用户隐藏下拉箭头元素的补丁已经提交,并将随Firefox 35一起在2015年1月发布。
这只允许用户隐藏箭头。对其进行样式设置是另一个问题,已经拆分为另一个错误票,将在未来考虑。
现在已经修复了!Firefox 35于1月13日发布,您现在可以使用-moz-appearance:none
来删除箭头。
非常好!谢谢。
.customSelect {
font-size: inherit;
margin: 0;
padding: 0.5em;
background-color: transparent;
color: #393939;
opacity:1;
-moz-appearance: none;
border: 0 none;
border-radius: 0px;
border:1px solid #B1B2B3;
padding-right: 2.5em;
}
.SelectBox select {
background: transparent;
width: 182px;
padding-right: 29px;
font-size: 100%;
text-indent: 0.01px;
text-overflow: "";
border: none;
height: 17.5px;
-webkit-appearance: none;
-moz-appearance: none;
}
.SelectBox {
width: 154px;
height: 15.8px;
overflow: hidden;
background: url("Images/Arrow.png") no-repeat 141px center #ffffff;
border-radius:2px;
border: 1px solid #B90F22;
}
<div class="SelectBox">
<select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</div>
一种选择是将 select
元素包装在带有 overflow: hidden
的容器元素中。增加 select
元素的宽度,将向下箭头推到右侧并超出图片。然后为容器元素添加与 select
元素相匹配的边框。
.select-container {
overflow: hidden;
display: inline-block;
height: 33px;
border-right: 1px solid #B3B6BD;
}
.select-container select {
width: 113%;
}
focus
或验证错误上的样式,这就是为什么我最终采用了totas建议的方法,使用伪元素来覆盖箭头。虽然这是一个相当不好的解决方法,但您可以通过在选择器包装器(在我的情况下为.form-control-select)的CSS中添加另一个覆盖元素来修复此问题:
/* The arrow */
.form-control-select:after {
content: "\f078";
z-index: 3;
pointer-events: none;
position: absolute;
right: 10px;
top: 9px;
padding: 6px 7px;
font-size: 10px;
}
/* the white overlay to hide Firefox' arrow */
.form-control-select:before {
position: absolute;
right: 1px;
top: 2px;
bottom: 1px;
width: 20px;
background: #fff;
content: "";
z-index: 2;
border: 1px solid transparent;
border-bottom-right-radius: 3px;
border-top-right-radius: 1px;
pointer-events: none;
}
我的HTML:
<div class="form-control-select">
<select class="form-control">
<option value="1">one</option>
<option value="2">two</option>
</select>
</div>
我通过分别为div和select添加一些样式来解决了这个问题。
任何人都可以根据需要更改宽度和其他样式属性。 :)
这里是js fiddle的链接。 JSFIDDLE 在所有浏览器上进行测试。
选择::-ms-expand适用于IE,而-webkit-user-select:none适用于chrome。
<div class="common-dropdown-small-div" style="width: 220px">
<select id="select" class="common-dropdown-project-select">
<option>
apple
</option>
<option>
blackberry
</option>
<option>
pumpkin
</option>
</select>
</div>
.common-dropdown-small-div{
border: 1px solid rgb(208, 208, 208);
border-radius: 5px !important;
overflow: hidden;
}
.common-dropdown-project-select{
width: 100% !important;
background-image: url("http://upload.wikimedia.org/wikipedia/en/f/f1/Down_Arrow_Icon.png");
background-position: 97% 60%, 0 0 ! important;
background-repeat: no-repeat;
background-size: 25px 16px;
border: none ! important;
outline : medium none !important;
display: inline-flex !important;
height: 33px !important;
vertical-align: top;
-webkit-appearance: none;
}
select::-ms-expand {
display: none;
}