如何从Firefox中的select元素中删除箭头

Rus*_*sti 172 html css firefox css3

我正在尝试select使用CSS3 设置元素样式.我在WebKit(Chrome/Safari)中获得了我想要的结果,但Firefox并没有很好地发挥(我甚至不打扰IE).我正在使用CSS3 appearance属性,但出于某种原因,我无法摆脱Firefox中的下拉图标.

这是我正在做的一个例子:http://jsbin.com/aniyu4/2/edit

#dropdown {
 -moz-appearance: none;
 -webkit-appearance: none;
 appearance: none;
 background: transparent url('example.png') no-repeat right center;
 padding: 2px 30px 2px 2px;
 border: none;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我并没有尝试任何花哨的东西.我只想删除默认样式并添加我自己的下拉箭头.就像我说的,伟大的WebKit,在Firefox中不是很好.显然,-moz-appearance: none没有摆脱下拉项目.

有任何想法吗?不,JavaScript不是一个选项

Joã*_*nha 165

更新:这是在Firefox v35中修复的.有关详细信息,请参阅完整要点.


刚想出如何从Firefox中删除选择箭头.诀窍是使用的混合-prefix-appearance,text-indenttext-overflow.它是纯CSS,不需要额外的标记.

select {
    -moz-appearance: none;
    text-indent: 0.01px;
    text-overflow: '';
}
Run Code Online (Sandbox Code Playgroud)

在Windows 8,Ubuntu和Mac上测试,最新版本的Firefox.

实例:http://jsfiddle.net/joaocunha/RUEbp/1/

有关该主题的更多信息:https://gist.github.com/joaocunha/6273016

  • 停止在新的Firefox v.30中工作:( (9认同)
  • 对我来说最好的解决方案,因为`-moz-appearence:window`不适用于透明背景(绘制丑陋的bg,至少在firefox linux上) (2认同)

小智 78

好吧,我知道这个问题已经过时了,但距离赛道还有2年,而且mozilla什么都没做.

我想出了一个简单的解决方法.

这实际上剥离了firefox中选择框的所有格式,并使用自定义样式在选择框周围包装span元素,但是应该只应用于firefox.

说这是你的选择菜单:

<select class='css-select'>
  <option value='1'> First option </option>
  <option value='2'> Second option </option>
</select>
Run Code Online (Sandbox Code Playgroud)

我们假设css类'css-select'是:

.css-select {
   background-image: url('images/select_arrow.gif');
   background-repeat: no-repeat;
   background-position: right center;
   padding-right: 20px;
}
Run Code Online (Sandbox Code Playgroud)

在firefox中,这将显示选择菜单,然后是丑陋的firefox选择箭头,然后是你看起来很漂亮的自定义箭头.不理想.

现在要在firefox中进行此操作,使用类'css-select-moz'添加span元素:

   <span class='css-select-moz'>
     <select class='css-select'>
       <option value='1'> First option </option>
       <option value='2'> Second option </option>
     </select>
   </span>
Run Code Online (Sandbox Code Playgroud)

然后修复CSS以使用-moz-appearance:window隐藏mozilla的脏箭头并将自定义箭头抛出到span的类'css-select-moz'中,但只能让它显示在mozilla上,如下所示:

.css-select {
   -moz-appearance:window;
   background-image: url('images/select_arrow.gif');
   background-repeat: no-repeat;
   background-position: right center;
   padding-right: 20px;
}

@-moz-document url-prefix() {
.css-select-moz{
     background-image: url('images/select_arrow.gif');
     background-repeat: no-repeat;
     background-position: right center;
     padding-right: 20px;
  }
} 
Run Code Online (Sandbox Code Playgroud)

非常酷,只是在3小时前遇到这个错误(我是网页设计的新手,完全是自学成才).然而,这个社区间接地为我提供了很多帮助,我认为这是关于我回馈的时间.

我只在firefox(mac)版本18,然后22(在我更新后)测试了它.

欢迎所有反馈.

  • 在Windows的FF 23-24上没有为我工作(我在评论中尝试了jsbin).结束了使用TIS解决方法http://stackoverflow.com/questions/6787667/what-is-the-correct-moz-appearance-value-to-hide-dropdown-arrow-of-a-select#answer-18327666 (5认同)
  • 它不再适用于FF 30.请继续在Mozilla的网站上提交一张票:https://bugzilla.mozilla.org/show_bug.cgi?id = 649849.人们抱怨的越多,我们就越有可能修复它. (4认同)
  • 2年后,这是为了达到我想要的结果而发布的最佳答案.我在这里放了一个JSBin代码:http://jsbin.com/aniyu4/2440/edit供其他人查看,并且只做了一次小的CSS更新.由于右侧填充,跨度比FF中的选择范围更宽 - 这意味着单击箭头不会激活下拉列表.为了对此进行调整,我在选择元素上放置了一个负右边距以将跨度的宽度拉回,以重叠选择的宽度. (2认同)

ope*_*rid 59

对我有用的技巧是使选择宽度超过100%并应用overflow:hidden

select {
    overflow:hidden;
    width: 120%;
}
Run Code Online (Sandbox Code Playgroud)

这是现在隐藏FF中下拉箭头的唯一方法.

BTW.如果你想要美丽的下拉菜单,请使用http://harvesthq.github.com/chosen/

  • 这对我没有影响.FF 6.0.2 (6认同)
  • 它是一个黑客,但工作...有时黑客拯救你的生活 (5认同)

Dan*_*eld 26

重要更新:

从Firefox V35开始,外观属性现在可以使用!!

firefox关于V35的官方发行说明:

使用组合框上-moz-appearancenone值现在删除下拉按钮(错误649849).

所以现在为了隐藏默认箭头 - 就像在select元素上添加以下规则一样简单:

select {
   -webkit-appearance: none;
   -moz-appearance: none;
   appearance: none;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

select {
  margin: 50px;
  border: 1px solid #111;
  background: transparent;
  width: 150px;
  padding: 5px;
  font-size: 16px;
  border: 1px solid #ccc;
  height: 34px;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
Run Code Online (Sandbox Code Playgroud)
<select>
  <option>Apples</option>
  <option selected>Pineapples</option>
  <option>Chocklate</option>
  <option>Pancakes</option>
</select>
Run Code Online (Sandbox Code Playgroud)


Sha*_*aun 20

我们找到了一种简单而体面的方法.它是跨浏览器,可降级的,并且不会破坏表单帖子.首先将选择框设置opacity0.

.select { 
    opacity : 0;
    width: 200px;
    height: 15px;
}

<select class='select'>
    <option value='foo'>bar</option>    
</select>
Run Code Online (Sandbox Code Playgroud)

这样你仍然可以点击它

然后使用与选择框相同的尺寸制作div.div应位于选择框下作为背景.使用{ position: absolute }z-index实现这一目标.

.div {
    width: 200px;
    height: 15px;
    position: absolute;
    z-index: 0;
}

<div class='.div'>{the text of the the current selection updated by javascript}</div>
<select class='select'>
    <option value='foo'>bar</option>    
</select>
Run Code Online (Sandbox Code Playgroud)

用javascript更新div的innerHTML.使用jQuery易于使用:

$('.select').click(function(event)) { 
    $('.div').html($('.select option:selected').val());
}
Run Code Online (Sandbox Code Playgroud)

而已!只需设置div而不是选择框.我没有测试上面的代码,所以你可能需要调整它.但希望你能得到主旨.

我认为这个解决方案胜出{-webkit-appearance: none;}.浏览器最应该做的是指定与表单元素的交互,但绝对不是它们最初在页面上显示的方式,因为它打破了网站设计.

  • 这不是一个糟糕的解决方案,并且类似于我在样式化文件上传输入元素时看到的模式,但有几个缺点.首先,它依赖于JS,这并不理想.其次,如果表单有一个重置按钮,那么你也必须编写该功能的脚本(现在,JS只监听select元素的click,但不响应form.reset事件).用div替换select元素会起作用,但理想情况下,我们可以设置表单元素的外观样式.还存在与JS和默认表单行为相关的可访问性问题. (6认同)

nin*_*orp 14

试试这种方式:

-webkit-appearance: button;
-moz-appearance: button;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用不同的图像作为背景并放置它:

background-image: url(images/select-arrow.png);
background-position: center right;
background-repeat: no-repeat;
Run Code Online (Sandbox Code Playgroud)

moz浏览器还有另一种方法:

text-indent:10px;
Run Code Online (Sandbox Code Playgroud)

如果您选择了已定义的宽度,则此属性将按下选择区域下的默认保管箱按钮.

这个对我有用!;)


Stu*_*ton 6

虽然不是一个完整的解决方案,但我发现......

-moz-appearance: window;
Run Code Online (Sandbox Code Playgroud)

......在某种程度上起作用.您无法更改背景(-color或-image),但可以使用color:transparent呈现元素不可见.不完美但它是一个开始,你不需要用js替换系统级元素.