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

Remove blue border from css custom-styled button in Chrome

提问人:eshellborn 提问时间:12/3/2013 最后编辑:Waleed Iqbaleshellborn 更新时间:5/25/2023 访问量:1095827

问:

我正在处理一个网页,我想要自定义样式的标签。所以对于CSS,我说:.现在它在 safari 中完美运行,但在 chrome 中,当我单击其中一个按钮时,它会在它周围放置一个烦人的蓝色边框。我想过或会起作用,但都没有。 有什么想法吗?<button>border: nonebutton:active { outline: none }button:focus { outline:none }

这是它被点击前的样子(以及我希望它在被点击后仍然看起来的样子):

这就是我说的边界:

enter image description here

这是我的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;
}
CSS 谷歌浏览器

评论

29赞 Chris B 8/27/2014
你不应该完全删除轮廓 - 那些残障人士 - 以及像我这样经常使用键盘的人,因为它速度很快 - 需要它来导航。最好将大纲重新设计成您喜欢的内容。
0赞 R1CHY_RICH 7/11/2017
保持按钮:焦点边框样式或键盘用户将不知道按钮已被选中。
0赞 Offirmo 8/13/2018
我找到了这篇优秀的文章,它总结了 hackernoon.com/ 的一切......
0赞 alexrogers 10/28/2018
不幸的是,Chrome 中存在一个问题,即蓝色轮廓在单击时显示并保持可见。默认情况下,其他浏览器只是在键盘选项卡上显示它。这个答案有一个修复,所以你只有在使用键盘时才能看到它: stackoverflow.com/a/50570972/3564402 不要听任何人说要关闭它。他们正在伤害不能使用鼠标的用户(squeeek)
3赞 Flimm 5/29/2019
请不要这样设置,除非您准备好弥补可访问性的损失。请参阅此网站: outlinenone.comoutline: none

答:

1748赞 Ronen Cypis 2/13/2014 #1

不建议这样做,因为它会降低您网站的可访问性;有关详细信息,请参阅此帖子

也就是说,如果你坚持,这个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>

评论

54赞 henrywright 8/8/2014
这实际上不应该或不重要吗?outline: none;
2赞 Diosney 7/14/2015
@henrywright 好吧,OP 试过了,但对他不起作用。
63赞 phazei 4/29/2016
请不要这样做。您的小不满与这成为的大规模可访问性问题无关
27赞 cloudworks 5/11/2016
你绝对应该重新设置它的样式,而不是完全隐藏它。在这种情况下,请尝试类似...与其隐藏指示器,不如将其更改为适合样式的深橙色。button:focus{ outline-color: #A75000 }
7赞 alexrogers 11/10/2018
@SeanO'Brien 授予 OP 的给定情况可能是针对一个拥有 5 个用户的网站,这些用户都是身体健全的。但是,在1123投赞成票的人中,可能大多数人都认为这是针对他们特定情况做事的正确方式,但实际上并非如此,因为它是歧视性的。
47赞 Scabbia 5/29/2014 #2

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

button:focus {outline:0 !important;}

无论具有 !important 属性的规则出现在 CSS 文档中的哪个位置,都将始终应用该规则。

评论

15赞 Popnoodles 5/29/2014
“为了更好的结果”?你能解释一下!important是做什么的吗?
6赞 Popnoodles 5/31/2014
但是你能解释一下它的作用吗?“因为它存在的原因”并没有向那些不知道它的原因的人解释它的原因是什么。
54赞 Popnoodles 6/4/2014
!important 应该很少使用,并且只是为了确保某些内容不会被后续规则覆盖。在覆盖以前的规则时,应使用正确的选择器来定位元素。
27赞 Ronen Cypis 7/1/2014
使用 !important 很少是合理的。你应该始终以一种更有意义的方式确定你的 css 选择器的范围,而不是仅仅因为它给你一个“更好的结果”而使用 !important。
7赞 cloudworks 5/11/2016
请不要这样做。虽然从技术上讲,这回答了 OP 的问题,但对焦点位置的每一个指示都进行核弹是糟糕的用户体验和糟糕的开发实践。如果你正在这样做,请确保你正在做其他事情来指示焦点位置(比如改变元素的背景颜色)。outline:0 !important
321赞 Nathan 8/14/2014 #3

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

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

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

在下面的示例中,Chrome 的蓝色轮廓首先通过使用button:focus { outline:0 !important; }

以下是正常显示的基本 Bootstrap 按钮:Bootstrap Buttons in Normal State

以下是它们获得焦点时的按钮:Bootstrap Buttons in Focused State

按下按钮时,按钮如下:enter image description here

如您所见,按钮在获得焦点时会变暗一些。就个人而言,我建议将对焦按钮调得更暗,以便按钮的对焦状态和正常状态之间存在非常明显的差异。

它不仅适用于残障用户

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

评论

46赞 RunLoop 3/2/2015
问题在于在 Chrome 中,它甚至发生在单击时,而不仅仅是 Tabing(在大多数浏览器中发现的逻辑实现)。因此,实际上Google正在减少可访问性,因为大多数开发人员只会将其关闭(在Chrome中) 更多的时间浪费在研究/修复与Google/Chrome相关的问题上(密码保存,电子邮件css支持,这个)
3赞 mems 10/23/2015
你说得对!为了在删除大纲时考虑可访问性,您需要一些 JavaScript:paciellogroup.com/blog/2012/04/...
0赞 A-Dubb 6/7/2016
您甚至不能以可以回答的方式设置评论的样式/格式。仅通过评论很难提供如此详细的反馈。
0赞 Nick 4/8/2018
@RunLoop 点击后如何删除或更改蓝色边框?可以通过 CSS 完成还是需要 Javascript?
0赞 yukashima huksay 2/26/2019
有这些问题的人可以简单地使用 Vimium-FF
9赞 chuk 11/12/2014 #4

使用以下任一方法:

:active {
    outline:none;
}

或者,如果这不起作用:

:active {
   outline:none !important;
}

这对我有用(至少是 FF 和 Chrome)。与其定位状态,不如定位状态,这将在用户单击链接时消除浏览器中美学上突兀的突出显示。但是,当残障用户在页面中按制表符或按住 Shift 制表符时,它仍将保留焦点状态。双方都很高兴。:):focus:active

评论

4赞 chuk 11/21/2014
如果您只打算用相同的代码替换我的缩小版本但扩展,为什么要编辑我的答案?这并没有为用户更好地澄清它。你有这个或其他东西的答案学分吗?哈哈......
4赞 bignose 10/13/2018
像这样的 StackExchange 网站的目的是提供答案,帮助任何阅读它们的人理解它们。为此,使用简洁、缩小代码的答案不如可读格式的代码有用。通过提高答案的可读性来改进答案是为每个人改进网站的正常方法。
13赞 Joe 7/22/2015 #5

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

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

评论

4赞 Behnam 2/25/2017
谢谢。工作,但 MDN 说:这个功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且将来可能会更改行为。
65赞 Mike 1/6/2016 #6

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

*:focus {outline:none}

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

*:focus {outline:none !important}

评论

9赞 joepio 8/9/2017
请不要这样做。使用键盘浏览页面的用户将无法看到当前聚焦的元素。如果单击事件源自鼠标,则不要隐藏轮廓,而是模糊元素。
0赞 Tiago Rangel 7/22/2021
不建议那样做
0赞 Noah 4/20/2023
不建议这样做,因为减少到键盘的用户无法使用鼠标,并且需要通过按 Tab 或其他方式查看当前聚焦的元素......
76赞 antonkronaj 6/9/2016 #7

在我这个问题的实例中,我必须指定box-shadow: none

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

评论

6赞 Nightking 5/18/2017
谢谢你的帖子!“box-shadow”属性是我案例的重点。
2赞 Spencer Hill 5/20/2018
这对我来说也是同样的问题。并不是说它相关,但我在 Ubuntu 17.10 上的 Chrome 中使用了 Roots 的 Sage 主题。
3赞 webman 1/12/2019
我必须添加 !important 才能让它工作,可能 bootstrap 在某处对此有一个特定的定义
0赞 mercury 11/19/2021
是的,例如,它是 bootstrap 中的 box-shadow
3赞 Santosh Khalse 12/16/2016 #8

对于所有有蓝色边框问题的元素,请尝试此代码

*{
outline: none;
}

*{
outline-style: none;
}
4赞 Rob Myrick 2/10/2017 #9

这就是对我有用的东西:

button:focus {
    box-shadow:none;
}
12赞 Behnam 2/25/2017 #10

对于此问题:

enter image description here

使用这个:

   *{
         -webkit-tap-highlight-color: rgba(0,0,0,0);
         -webkit-tap-highlight-color: transparent; /* For some Androids */
    }

结果:

enter image description here

评论

0赞 Supertecnoboff 4/15/2023
谢谢,这对我的网站很有效。
7赞 Forever Nomad 8/25/2017 #11

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

element:active:focus {
    outline: 0;
}

希望能为某人节省一些时间来弄清楚这个问题,我有点想不明白为什么这么简单的事情不起作用。

2赞 aaayumi 9/13/2017 #12

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

input:focus {outline:0;}
42赞 Aaron Noel De Leon 5/29/2018 #13

删除对于可访问性来说是可怕的!理想情况下,只有当用户打算使用键盘时,才会显示对焦环。outline

用。所有主流浏览器(caniuse)都支持它。:focus-visible

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

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

评论

1赞 Már Örlygsson 10/28/2018
请注意,AFAIK 不需要这样,只要通过其他一些方式(如 、 等)使 :focus 状态清晰可见即可。outlineborder,background-colorbox-shadow
2赞 Félix Paradis 1/25/2019
最佳答案!你的帖子值得一读(我现在正在看你博客😅的其余部分)焦点可见的 npm 包现在是它所在的地方。
1赞 pesta 4/1/2019
这绝对是最好的解决方案。我只用了几行代码就摆脱了点击时烦人的蓝色边框,同时保持键盘使用。谢谢!
1赞 Kevin Suttle 6/4/2019
这个数据正确吗?Chrome 似乎支持此选择器,而不是 Firefox。developer.mozilla.org/en-US/docs/Web/CSS/......
1赞 ariebear 7/1/2021
不应该是 :not(:focus-visible)吗? .focus-visible 表示一个类而不是一个伪类。
3赞 pavelkarev 6/1/2018 #14

在所有现代浏览器都开始支持 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

2赞 Sandeep Sharma 7/10/2018 #15

只需写.无需使用伪元素outline:none;focus

1赞 alexrogers 11/11/2018 #16

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

引发了一个 bug 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;}

但是,如果您拥有大量用户,那么您就会对那些无法使用鼠标或只想使用键盘来提高速度的人不利。

7赞 corsaro 1/30/2019 #17

我在引导程序上遇到了同样的问题。我用轮廓和框阴影解决了这个问题

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
4赞 Tobija Fischer 2/13/2019 #18

解决此处尚未提及的可访问性问题的另一种方法是通过一点 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);

评论

1赞 VDWWD 2/15/2022
简单而有效...爱上它。
4赞 apurv thakur 2/18/2019 #19

我遇到了同样的问题,所以我使用了简单的CSS-

.custom-button {
    outline: none
}
13赞 chronomer 6/7/2019 #20

Chrome 和其他浏览器的修复程序

button:focus { outline: none !important; box-shadow: none !important; }
8赞 ATL_DEV 7/17/2019 #21

如果您使用的是 Bootstrap 4.1 和可能的其他版本,大多数解决方案将不起作用。经过一番周折,我发现您需要应用 shadow-none 类:

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>
2赞 Pauloco 6/12/2020 #22

好吧,即使冒着永远不会让任何人看到这个的风险,因为已经有这么多答案,我想在 2020 年提供更多的 js 解决方案,有很多:

大纲.js或者大纲.js这两个库都解决了我们在这里遇到的问题:删除鼠标的轮廓,但保留键盘功能或可访问性。

因此,与其决定哪个更重要的风格或可访问性,不如两者兼而有之!

2赞 Faisal Russel 3/16/2022 #23

将以下代码用于 Chakra UI,

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

*[data-focus] {
  box-shadow: none !important;
}`
0赞 kostikovmu 7/14/2022 #24

要去除水龙头上的蓝色背景,我使用

button {
  -webkit-tap-highlight-color: rgba(0,0,0,0);
}
-1赞 Bhargavi 5/7/2023 #25
button{
outline: 0 !important;
box-shadow: none !important;
}
button:focus{
outline: 0 !important;
box-shadow: none !important;
}