从Firefox中的范围输入元素中删除虚线轮廓


73

从版本23开始,Firefox本身就支持该<input type="range">元素,但是我不知道如何删除虚线轮廓。以下CSS无效:

input[type='range'], 
input[type='range']:focus, 
input[type='range']:active, 
input[type='range']::-moz-focus-inner, 
input[type='range']:-moz-focusring {
    border: 0;
    outline: none;
}

有谁知道如何在Firefox中解决此问题?

示例:http//jsfiddle.net/pF37g/


4
你能摆弄小提琴吗?在这里看不到任何轮廓:jsfiddle.net/tGUAR
Yuriy Galanter


3
@ 42并不意味着您不应该自己删除它们或重新设置它们的样式。
Nijikokun 2014年

2
如果删除了所有最初发布的样式(即,使输入保持未样式化),则Firefox for Mac中根本没有大纲。
ralph.m 2014年

4
@alexandrrr Firefox 27.0(Windows),您的示例中没有轮廓。
伊泰·加尔

Answers:


108

不幸的是,你不能!(更新;您现在可以)

这是Firefox中的错误,除了修复源库本身(参见下文)之外,没有解决方法。

另请参阅乔纳森·瓦特(Jonathan Watt)的博客(正在为此工作):

已知的问题:

  • 默认的CSS样式外观仍需要工作,并且原生主题(使滑块具有操作系统主题的外观)仍将出现...

在对博客中有关同一问题的评论中,他指出:

现在你不能-对不起。我已提交错误932410,以实现这一目标。

在撰写本文时,似乎尚无进展,尚不清楚何时可提供正式修复。

更新资料

自从发布此答案以来,该错误已得到修复。您现在可以使用(如其他答案所述,但出于完整性考虑,在此包括在内):

input[type=range]::-moz-focus-outer {
    border: 0;
    }

谢谢; 你是完全正确的。(我已经评论了关于它,但。)

27

可以与Firefox的最新版本来完成。如前所述这里,这个错误是固定的。因此可以隐藏外部虚线边框。为此,将::-moz-focus-outer的border设置为0,如下所示:

input[type=range]::-moz-focus-outer {
    border: 0;
}

这是工作示例:http : //jsfiddle.net/n2dsc/1/

在webkit浏览器中,如果-webkit-appearance: none;设置了外线,则会出现。要删除它,只需将:focus的大纲设置为none,就像这样:

input[type=range]:focus {
    outline: none;
}

这是工作示例:http : //jsfiddle.net/8b5Mm/1/


1
我可以::-moz-focus-outer按预期确认作品。这应该是公认的答案。
Bogdan 2014年

18

正如Ken已经指出的那样,无法删除轮廓。但是,如果您知道父元素的背景颜色,则有一种变通方法可以“隐藏”轮廓。假设背景为白色,则以下CSS将隐藏虚线轮廓:

input[type=range] {
    border: 1px solid white;
    outline: 2px solid white;
    outline-offset: -1px;
}

您更新的示例:http : //jsfiddle.net/9fVdd/15/


是的,它有效。那是第一个可行的解决方法。恭喜你!
TLindig

但是由于增加了边框,您获得了跳跃元素。没有该边框,滑块将被裁剪。看到这里:jsfiddle.net/pF37g/100
TLindig

3
样式必须应用于所有状态(input[type=range]),不仅适用于:focus,正如我在JsFiddle中所见
2014年

您应该使用border:1px纯透明;为避免将来的设计问题
Facundo Colombier 2014年

2
@FacundoColombier边框用于为轮廓添加1px空间。轮廓线覆盖边框,因此边框颜色无关紧要。
2014年

7

如果您可以使用包装元素(很可能已经包装了LIP),则可以使用仅FireFox的CSS将输入置于视图之外,并在视图中重新定位音轨/拇指。

  • 注意1-请勿尝试使用translateX-我认为FireFox会使用它来实际滑动拇指-因此请坚持使用translateY
  • 注意2-确保使用键盘导航进行测试。您仅应将输入移动最小,以使虚线不可见。如果将其放置在很远的地方(translateY(-1000em))-则将破坏键盘导航的可用性。

你去:

的HTML

<span class="range-wrap"><input type="range" /></span>

的CSS

.range-wrap {
    overflow: hidden;
}
input[type='range'] {
    -moz-transform: translateY(-3em);
}
input[type='range']::-moz-range-track {
    -moz-transform: translateY(3em)
}
input[type='range']::-moz-range-thumb {
    -moz-transform: translateY(3em);
}

http://jsfiddle.net/pF37g/98/


2
如果在页面上切换,并且范围输入获得焦点,则视口将滚动到外部定位的元素。参见jsfiddle.net/pF37g/102
2014年

1
@ausi-很好。我的建议是将其移到视线之外小提琴)。我认为100em有点过大,但这是非常好的一点,特别是对于像我这样习惯于键入诸如此类的人text-indent: -1000emnote translateX破坏了拇指的可用性(很可能b / c FF正在使用translateX定位拇指),因此请不要尝试translateX。
Ryan Wheale 2014年

3

虚线轮廓不是问题,它是浏览器显示输入元素已选中的方式。您可以将设置tabIndex设为-1,这将防止您的input元素将焦点放在tab上,从而导致轮廓不正确:

<input class="size" type="range" tabIndex="-1" name="size" min="1" max="6" value="6"></input>

但是这样做之后,您将失去一些键盘可访问性。最好可以使用input元素键盘。

这是小提琴:http : //jsfiddle.net/pF37g/14/


2
不幸的是,我仍然可以看到虚线轮廓(Mac,Firefox 23)。
alexandrrr

我仍然可以看到大纲,Linux,FF 74
Choylton B. Higginbottom,

3

如果将任何自定义样式应用于input[type='range']Firefox ,则Firefox将使用其他模型(测试版)来呈现范围输入。

您可以在此处看到2种不同的模型:

http://jsfiddle.net/pF37g/75/

目前,我不认为outline: 0;Firefox 27.0以后的Firefox中可以使用自定义CSS样式的输入范围框


事实并非如此,该规则从一开始就没有意义。::-moz-focus-inner:-moz-focusring会导致所有基于WebKit的浏览器忽略整个内容,并且-webkit-*Firefox显然不支持属性。您可能正在使用的浏览器/操作系统/其他环境不会在滑块元素上显示聚焦环(如果该小提琴适合您)。

@Charmander选择器是对原始问题的正确选择。
弗朗西斯·金

啊,谢谢你指出这一点。因此,您添加了许多WebKit属性,以解决一个问题,询问如何删除Firefox聚焦环。Firefox不是基于WebKit的浏览器。它的渲染引擎是Gecko,如上所述,这里的两组前缀的组合将使两者均无效。

我将JSFiddle
弗朗西斯·金

1
谢谢,我看到了。很抱歉,如果我的前两个单词不够清楚,但是它不起作用,也没有理由应该起作用。如果它适合您,请验证这是由于您的CSS规则而不是其他环境的影响。这尤其是如果你正在浏览一个基于WebKit的浏览器,因为,正如我再上面提到的,这个问题有做的Firefox


0

你不能。它似乎是Firefox中的错误。

它为范围元素制作了两个轮廓。一个可以通过css设置影响,第二个可以抵抗任何操纵。

我将轮廓设置为可见以显示问题: input[type='range']:focus { outline: 5px solid green; }

在这里您可以看到它:

http://jsfiddle.net/pF37g/97/


-1

我在mozilla的config部分几乎没有研究,也将其添加

 :-moz-any-link:focus {
    outline: none;
 }
 a, a:active, a:visited, a:hover {
    outline: 0;
}

然后

:focus {
   outline: none;
}

然后

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

也许您应该(不正确)回答之前尝试尝试提出的解决方案。

-3

解决方案来了

:focus {
    outline:none;
}

::-moz-focus-inner {
    border:0;
}
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.