从Chrome中的CSS自定义样式按钮中删除蓝色边框


806

我正在制作网页,并且需要自定义样式的<button>标签。因此,对于CSS,我说:border: none。现在,它可以完美地用于野生动物园,但是在Chrome浏览器中,当我单击其中一个按钮时,它周围会出现一个令人讨厌的蓝色边框。我以为button:active { outline: none }button:focus { outline:none }会起作用,但都没有。有任何想法吗?

这是被单击之前的样子(以及我希望它在被单击之后仍保持外观):

这就是我正在谈论的边界:

在此处输入图片说明

这是我的CSS:

button.launch {
    background-color: #F9A300;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.launch:hover {
    cursor: pointer;
    background-color: #FABD44;
}

button.change {
    background-color: #F88F00;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.change:hover {
    cursor: pointer;
    background-color: #F89900;
}

button:active {
    outline: none;
    border: none;
}

1
我看起来还好吗?jsbin.com/oSAdovun/1/edit
davidpauljunior

我不确定为什么它可以在您的演示中正常工作。它在这里执行:jsfiddle.net/NgL8H @davidpauljunior
eshellborn 2013年

5
我将焦点规则添加到您说不起作用的底部,但它似乎确实起作用: jsfiddle.net/NgL8H/1
davidpauljunior 2013年

21
您不应该完全删除轮廓-残障人士-以及像我这样经常因为键盘快速而经常使用键盘的人-需要它来导航。最好将轮廓重新设置为您喜欢的样式。
克里斯·B

3
outline: none除非您准备好弥补可访问性方面的损失,否则请不要这样设置。看到这个网站:outlinenone.com
Flimm

Answers:


1531

不建议这样做,因为它会使网站的可访问性降低;有关更多信息,请参阅这篇文章

也就是说,如果您坚持要求,那么此CSS应该可以工作:

button:focus {outline:0;}

签出或JSFiddle:http : //jsfiddle.net/u4pXu/

或在此代码段中:

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.change {
background-color: #F88F00;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.change:hover {
cursor: pointer;
background-color: #F89900;
}

button:active {
outline: none;
border: none;
}

button:focus {outline:0;}
<button class="launch">Launch with these ads</button> 
<button class="change">Change</button>


49
outline: none;不应该是真的吗?
henrywright 2014年

2
@henrywright好吧,OP尝试了一下,但没有为他工作。
diosney 2015年

58
请永远不要这样做。您的不满与这引起的大规模可访问性问题无关
-phazei

20
您绝对应该重新设置样式,而不是完全隐藏它。在这种情况下,请尝试类似button:focus{ outline-color: #A75000 }…的方法,而不是隐藏指示器,而是将其更改为适合该样式的深橙色。
cloudworks '16

3
@ SeanO'Brien授予OP的给定情况可能是针对拥有5个用户的网站,所有用户均身体健全。但是,可能对此表示支持的1123人中的大多数人认为,这是针对给定情况做事的正确方法,但实际上并非如此,因为它具有歧视性。
alexrogers

296

等待!有这么丑陋的轮廓是有原因的!

在删除该丑陋的蓝色轮廓之前,您可能需要考虑可访问性。默认情况下,该蓝色轮廓放置在可聚焦的元素上。这样一来,具有可访问性问题的用户就可以通过按动该按钮来使其聚焦。一些用户不具备使用鼠标的运动技能,而只能使用键盘(或其他输入设备)进行计算机交互。删除蓝色轮廓时,将不再有视觉指示器指示要聚焦的元素。如果要删除蓝色轮廓,则应将其替换为按钮已聚焦的另一种视觉指示。

可能的解决方案:聚焦时使按钮变暗

对于以下示例,首先使用删除了Chrome的蓝色轮廓 button:focus { outline:0 !important; }

这是正常显示的基本Bootstrap按钮: 正常状态下的自举按钮

当它们获得焦点时,以下是按钮: 聚焦状态下的自举按钮

按下按钮时的按钮如下: 在此处输入图片说明

如您所见,按钮在获得焦点时会变暗。就个人而言,我建议使聚焦按钮更加暗,以使按钮的聚焦状态和正常状态之间有非常明显的区别。

不只是针对残疾用户

使您的网站更易于访问通常被忽略,但是可以帮助您在网站中创造更高的体验。有许多普通用户使用键盘命令来浏览网站,以使手在键盘上。


40
问题出在Chrome中,它甚至在单击时也会发生,而不仅仅是制表符(大多数浏览器中都有这种逻辑实现)。因此,实际上Google会减少可访问性,因为大多数开发人员会简单地将其关闭(在Chrome中),这会浪费更多时间在研究/修复与Google / Chrome相关的问题(密码节省,电子邮件CSS支持,此)
RunLoop 2015年

3
没错!要在删除轮廓时考虑到可访问性,您需要使用一些JavaScript:paciellogroup.com/blog/2012/04/…–
mems

您甚至无法以答案的方式设置注释的样式/格式。很难仅通过评论来提供如此详细的反馈。
A-Dubb '16

@RunLoop单击后如何删除或更改蓝色边框?可以通过CSS完成,还是需要Javascript?
尼克

有这些问题的人可以简单地使用vimium-ff
yukashima huksay

60

我只是通过选择全部并对所有内容应用outline:none来从页面中所有标签中删除大纲:)

*:focus {outline:none}

如bagofcole所述,您可能还需要添加!important,因此样式将如下所示:

*:focus {outline:none !important}

6
请不要这样做。使用键盘浏览页面的用户将无法看到当前焦点所在的元素。如果单击事件源自鼠标,则不要隐藏轮廓,而应模糊元素。
joepio

基本上可以肯定还有其他焦点样式...
Arziel

46

在这个问题上,我必须指定 box-shadow: none

button:focus {
  outline:none;
  box-shadow: none;
}

4
谢谢你的帖子!在我的案例中,“盒子阴影”属性就是重点。
Nightking

1
对我来说,这是同样的问题。没关系,但是我在Ubuntu 17.10的Chrome中使用Roots的Sage主题。
斯宾塞·希尔

1
只有在box-shadow
sura2k

1
我必须添加!important才能使它正常工作,可能bootstrap在某个地方对此有特定定义
webMan

1
队友,这对我有用!,感谢您发布解决方案。欢呼声
theITvideos

44

不要忘记!important声明,以获得更好的结果

button:focus {outline:0 !important;}

具有!important属性的规则将始终应用,无论该规则在CSS文档中的位置如何。


14
“为了更好的结果”?您能解释一下!重要吗?
Popnoodles 2014年

5
但是您能解释一下它的作用吗?“因为它存在的原因”并没有向不知道其原因的人解释。
Popnoodles 2014年

48
!important应该很少使用,仅是为了确保以后的规则不会覆盖某些内容。覆盖以前的规则时,应使用正确的选择器定位元素。
Popnoodles

24
重要的用法很少。您应该始终以一种更有意义的方式来确定css选择器的范围,而不要仅仅因为它给您“更好的结果”而使用!important。
罗尼·西皮斯

5
请不要这样做。从技术上讲,这可以回答OP的问题,但outline:0 !important不良的UX和不良的开发实践会破坏焦点位置的所有指示。如果执行此操作,请确保您正在执行其他操作以指示焦点位置(例如更改元素的背景颜色)。
cloudworks '16

26

拆卸outline很容易造成伤害!理想情况下,仅当用户打算使用键盘时才会显示聚焦环。

使用:focus-visible。当前,这是W3C建议,用于使用CSS设置仅键盘焦点的样式,并且在Firefox(caniuse)中受支持。在其他主流浏览器支持之前,您可以使用此强大的polyfill

/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
  outline: none;
}

/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}

我还写了一篇更详细的文章,以防万一您需要更多信息。


1
你要知道,据我所知它并不需要是outline这样,只要:聚焦状态通过一些其他手段,像清晰可见border, background-colorbox-shadow等等
三月Örlygsson

2
最佳答案!您的文章值得一读(我现在正在看您博客的其余部分😅)焦点可见的npm软件包确实是目前的样子。
FelDev

1
这绝对是最好的解决方案。仅用几行代码,我就消除了单击时令人讨厌的蓝色边框,同时又将其保留在键盘上。谢谢!
pesta'1

1
这个数据正确吗?Chrome,Firefox不支持此选择器。developer.mozilla.org/en-US/docs/Web/CSS/...
凯文·萨特尔

似乎在Firefox中,选择器称为:-moz-focusring,但与文档所说的相反,它没有区分单击和标签焦点。从现在起,您需要在Chrome中启用特定的标志才能使其正常工作
phil294

12

将此添加到您的CSS文件中。

*{
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
}

3
谢谢。工作正常,但MDN表示:此功能是非标准的,不在标准范围内。请勿在面向Web的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为将来可能会改变。
Behnam Mohammadi

8

使用以下任一方法:

:active {
    outline:none;
}

或如果这不起作用:

:active {
   outline:none !important;
}

这对我有效(至少是FF和Chrome)。无需定位:focus状态,而只需定位状态,:active当用户单击链接时,这将删除浏览器中美观的突出显示。但是,当具有残障功能的用户在页面上移动或移动时,它仍将保留焦点状态。双方都很高兴。:)


4
如果您只想用相同的代码替换我的缩小版本,然后扩展,为什么还要编辑我的答案?这并没有为用户弄清楚它有什么好处。您是否为此获得了学分?大声笑...
2014年

3
这样的StackExchange网站的重点是提供可以帮助任何阅读它们的人理解的答案。为此,使用简洁的精简代码的答案不如可读格式的代码有用。通过使答案更具可读性来改善答案是为所有人改善网站的一种正常方法。
bignose


7

对于使用Bootstrap并遇到此问题的任何人,他们都使用:active:focus以及:active和:focus,因此您需要:

element:active:focus {
    outline: 0;
}

希望能节省一些时间弄清楚那个人,撞了一下我的头,想知道为什么这么简单的事情不起作用。


5

如果您使用的是Bootstrap 4.1和其他版本,则大多数解决方案将无法使用。反复敲打头后,我发现您需要应用Shadow-none类:

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>


4

Chrome和其他浏览器的修复

button:focus { outline: none !important; box-shadow: none !important; }

3

尝试对所有具有蓝色边框问题的元素使用此代码

*{
outline: none;
}

要么

*{
outline-style: none;
}

3

解决此问题的另一种方法是通过一点点Javascript来解决。鸣谢来自hackernoon的这篇有见地的博客文章:https ://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2

这里的方法非常简单却有效:当人们开始使用Tab键浏览页面时添加一个类(并可以选择在再次切换到鼠标时将其删除。然后您可以使用该类显示焦点轮廓或不显示焦点轮廓。

function handleFirstTab(e) {
    if (e.keyCode === 9) { // the "I am a keyboard user" key
        document.body.classList.add('user-is-tabbing');
        window.removeEventListener('keydown', handleFirstTab);
    }
}

window.addEventListener('keydown', handleFirstTab);


2

如果要删除输入中的相同效果,则可以添加以下代码以及按钮。

input:focus {outline:0;}

2

在所有现代浏览器都开始支持css-selector :focus-visible之前保存可访问性
的最简单且可能是最好的方法是只为鼠标用户删除此棘手的焦点为键盘用户保存它:

1.使用这个很小的polyfill(大约10kb):https : //github.com/WICG/focus-visible 2.
在CSS中添加下一个代码:

.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

CSS4-selector的浏览器支持:focus-visible现在非常薄弱:https://caniuse.com/#search=focus-visible



1

这是Chrome家族中的一个问题,并且一直存在。

提出了一个错误https://bugs.chromium.org/p/chromium/issues/detail?id=904208

可以在此处显示:https : //codepen.io/anon/pen/Jedvwj,只要在类似按钮的任何事物上添加边框(例如,将role =“ button”添加到标签中),Chrome就会混乱并在您单击鼠标时设置焦点状态。

我强烈建议使用此修复程序:https : //github.com/wicg/focus-visible

只需执行以下操作

npm install --save focus-visible

将脚本添加到您的html中:

<script src="/node_modules/focus-visible/dist/focus-visible.min.js"></script>

或使用webpack或类似方法导入到主条目文件中:

import 'focus-visible/dist/focus-visible.min';

然后把它放在你的css文件中:

// hide the focus indicator if element receives focus via mouse, but show on keyboard focus (on tab).
.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

// Define a strong focus indicator for keyboard focus.
// If you skip this then the browser's default focus indicator will display instead
// ideally use outline property for those users using windows high contrast mode
.js-focus-visible .focus-visible {
  outline: magenta auto 5px;
}

可以设置:

button:focus {outline:0;}

但是如果用户数量众多,那么您将无法使用鼠标或只想使用键盘来提高速度。


1

我在使用Bootstrap时遇到了同样的问题。我用轮廓和阴影框解决了

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
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.