从FF的选择框中删除轮廓


97

是否可以删除选择元素中所选项目周围的虚线?

替代文字

我试图outline在CSS中添加该属性,但是它不起作用,至少在FF中不起作用。

<style>
   select { outline:none; }
</style>

更新
在继续删除大纲之前,请阅读此内容。
http://www.outlinenone.com/


三个月前,我用单选按钮搜索了相同的内容。我发现了五六个以上不同的解决方案,但没有任何效果。所以我怀疑你不能那样做。我希望我错了。
阿森尼·穆尔琴科

恐怕也是事实,但仍然希望被证明是错误的:D
Martin

实际上在mozilla中工作的人认为愚蠢的虚线看起来不错吗?为什么这甚至是我们必须删除的东西?
Billynoah 2015年

Answers:


74

我找到了一个解决方案,但这是所有黑客之母,希望它可以作为其他更强大解决方案的起点。缺点(我认为太大)是,任何不支持text-shadow但支持rgba(IE 9)的浏览器都不会渲染文本,除非您使用诸如Modernizr之类的库(未经测试,只是一个理论)。

Firefox使用文本颜色来确定虚线边框的颜色。所以说如果你...

select {
  color: rgba(0,0,0,0);
}

Firefox将使虚线边框透明。但是当然您的文本也将是透明的!因此,我们必须以某种方式显示文本。text-shadow来救援:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

我们放置一个没有偏移且没有模糊的文本阴影,以便替换文本。当然,较旧的浏览器对此一无所知,因此我们必须提供颜色的备用:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

这就是IE9发挥作用的时候:它支持rgba但不支持文本阴影,因此您将获得一个显然为空的选择框。通过text-shadow检测获取您的Modernizr版本并执行...

.no-textshadow select {
  color: #000;
}

请享用。


谢谢队友,我会尽快尝试的:)
马丁(Martin)

唯一有效的解决方案(使用FF 20)。恭喜你!
2013年

4
这应该照顾所有FF,也只照顾FF:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
TimoKähkönen16年

会影响Chrome和其他浏览器中的CSS吗?
Dadhich Sourav

165

好吧,Duopixel的答案很完美。如果我们走得更远,我们可以使其防弹。

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

到此为止,仅对Firefox有效,并且所选选项周围的点点难看的轮廓消失了。


1
有趣的是,这种解决方案并不是Duopixel的答案。如果您在选择框上使用了过渡效果(即-moz-transition),则虚线框将在过渡期间出现,然后消失。因此,即如果您指定“ -moz-transition:全部0.5s缓解;”,则使用此解决方案将看到组合框半秒钟,而使用Duopixel的答案则根本看不到它。您可以通过将整个select元素设置为具有透明的color属性来解决此问题,但是当该框没有焦点时,您将根本看不到任何文本。
2014年

1
编辑:上面应该说,“ ...您将在此解决方案看到虚线框半秒钟...”。我无法再编辑评论。无论如何,“颜色:rgba(0,0,0,0);” 属性是固定过渡的要素,它必须位于select元素中;'-moz-focusring'不会。同样有趣的是,由于某种原因,在Duopixel解决方案的IE9和Chrome中,我都没有任何问题,因此最后他与Modernizr谈论的东西对我来说完全没有必要。
2014年

当然,如果您指定转换,它将显示。all在过渡中使用就像在空中用加特林机枪射击。
Fleshgrinder 2014年

1
这个或Duopixel的解决方案在Mac Mavericks的FF 33.0.3中不起作用。而不是虚线轮廓,而是一个蓝色的模糊轮廓。
TimoKähkönen2014年

1
这会破坏浏览器上禁用选项的样式-焦点突出的选择将变为黑色,而不是应为灰色的文本。
Billynoah

19

这是解决方案协作的解决方案,用于解决Firefox选择框的样式问题。使用此CSS选择器作为常规CSS重置的一部分。

类会根据问题删除大纲,但也会删除任何背景图片(因为我通常使用自定义下拉箭头,而Firefoxes系统下拉箭头目前无法删除)。如果将背景图像用于下拉图像以外的其他任何东西,只需删除行background-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}

无论如何,仍然可以使用此方法定义选项文本颜色吗?
user1063287

其实你可以删除在选择背景时,通过设置供应商特定的属性Firefox的箭头-moz-appearancenone
Emanuele Del Grande'Apr

其他答案缺少重要的select::-moz-focus-inner选择器,从而降低了它们的效力。这就是为什么这个得到我的⬆。
戴夫·兰德

select:-moz-focusring随着color: transparenttext-shadow: 0 0 0 #000删除在Firefox V63焦点烦人的边界
杰森·穆尔

注意:url-prefix()。fxsitecompat.dev/en-CA/docs/2018/…阅读这些链接,我不清楚它们是否要逐步淘汰。但请注意。
user3342816

9

这将针对所有Firefox版本

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

如果您计划在网站上使用同一样式表的其他页面上显示大纲,则可能要删除!important。


1
这应该是选定的答案
brandonscript

9

通常,窗体控件无法以这种准确性进行样式设置。据我所知,没有一个浏览器在所有控件中都支持合理的属性范围。这就是为什么有大量的JavaScript库会使用图像和其他HTML元素“伪造”表单控件,并使用代码来模仿其原始功能:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...


Thx,我想我必须“创建自己的”选择列表才能完成此任务。不幸的是,表单控件在浏览器之间的统一性并不强。
马丁2010年

1
@马丁:这是没有什么比作一个文件上传控件,它不能被称呼的不灵活性可言在大多数浏览器。;)
Arseni Mourzenko 2010年

3

<select onchange="this.blur();">

如果使用此选项,边框会一直保留,直到您从列表中选择一个项目为止。


2
不幸的是,该解决方案不遵守可访问性和可用性准则。除了面向盲人用户的TTS界面外,它还不允许键盘导航。重点关注的元素应该看起来与其他元素不同,当前问题是Firefox无法让您决定如何使用。
Emanuele Del Grande'Apr

1

尝试以下方法之一:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

参考


6
感谢您的努力,但不幸的是,它没有用。也许它适用于a元素,但不适用于select元素。
马丁

1

解决方案来了

:focus {outline:none;}
::-moz-focus-inner {border:0;}

1
经过测试。不起作用 Firefox可以识别此属性,但似乎没有任何作用。试图将其设置为10px solid red,我找不到它显示在哪里。
mpen

当其他所有获得较高投票的答案都没有时,这实际上对我有用。
Tashows



-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

工作100%


-4

这将从select元素和轮廓中移出焦点:

$("select").click(function(){
    $(this).blur();
});

尽管这在其他浏览器上并非没有缺点。您需要检查用户使用的浏览器:

if (FIREFOX) {
    //implement the code
}

除了提供代码段外,请解释您的代码段的作用。
sayan '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.