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

esh*_*orn 716 css google-chrome

我正在开发一个网页,我想要自定义样式的<button>标签.所以用CSS,我说:border: none.现在它在safari中完美运行,但在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;
}
Run Code Online (Sandbox Code Playgroud)

Ron*_*pis 1399

只需将此添加到您的CSS:

button:focus {outline:0;}
Run Code Online (Sandbox Code Playgroud)

看看它或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;}
Run Code Online (Sandbox Code Playgroud)
<button class="launch">Launch with these ads</button> 
<button class="change">Change</button>
Run Code Online (Sandbox Code Playgroud)

  • 请永远不要这样做.您的轻微不满与这种大规模的可访问性问题无关 (51认同)
  • 这不应该是`outline:none;`或者没关系? (46认同)
  • @phazei这应该是对问题的评论......不是答案...... (28认同)
  • 你绝对应该重新设计它而不是完全隐藏它.在这种情况下,尝试类似"按钮:焦点{outline-color:#A75000}"...而不是隐藏指示器,将其更改为适合样式的深橙色. (14认同)
  • @henrywright好吧,OP尝试了这个并没有为他工作. (2认同)
  • @diosney OP尝试`outline:none;`使用`button:active`但是没有用.重要的是把它放在`button:focus`中.`outline:none;`和`outline:0;`两者似乎都有效. (2认同)
  • 不幸的是,Chrome 中存在一个问题,即蓝色轮廓显示并在点击时保持可见。其他浏览器默认情况下仅将其显示在键盘选项卡上。这个答案有一个修复,所以你只能在使用键盘时看到它:stackoverflow.com/a/50570972/3564402 这个答案正在伤害不能使用鼠标的用户 (2认同)
  • @ SeanO'Brien授予OP的给定情况可能是针对拥有5个用户的网站,所有用户均身体健全。但是,可能对此表示反对的1123人中的大多数人认为,这是针对给定情况做事的正确方法,但实际上并非如此,因为它具有歧视性。 (2认同)

Nat*_*han 280

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

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

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

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

以下是您正常显示的基本Bootstrap按钮: 正常状态下的Bootstrap按钮

以下是获得焦点时的按钮: 聚焦状态的引导按钮

按下按钮时按下按钮: 在此输入图像描述

如您所见,按钮在获得焦点时会稍微变暗.就个人而言,我建议使聚焦按钮更暗,以便聚焦状态和按钮的正常状态之间存在非常显着的差异.

它不仅适用于残疾用户

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

  • 问题出在Chrome中,即使是点击也不仅仅是标签(大多数浏览器中都有逻辑实现).所以谷歌实际上正在减少可访问性,因为大多数开发人员只会关闭它(在Chrome中)更多的时间浪费在研究/修复与谷歌/ Chrome相关的问题上(密码保存,电子邮件css支持,这个) (36认同)
  • 你说对了!要在删除大纲时考虑帐户中的辅助功能,您需要一些JavaScript:https://www.paciellogroup.com/blog/2012/04/how-to-remove-css-outlines-in-an-accessible-manner/ (3认同)

Mik*_*ike 56

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

*:focus {outline:none}
Run Code Online (Sandbox Code Playgroud)

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

*:focus {outline:none !important}
Run Code Online (Sandbox Code Playgroud)

  • 请不要这样做.使用键盘导航页面的用户将无法看到当前关注的元素.如果click事件源自鼠标,则不要隐藏轮廓,而是模糊元素. (6认同)

Sca*_*bia 47

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

button:focus {outline:0 !important;}
Run Code Online (Sandbox Code Playgroud)

无论CSS规则中出现哪个规则,都将始终应用具有!important属性的规则.

  • !important应该很少使用,只是为了确保后续规则不会覆盖某些内容.在覆盖以前的规则时,您应该使用正确的选择器来定位元素. (42认同)
  • !important的用法很少被证明是合理的.你应该总是以更有意义的方式调整你的css选择器的范围,而不是使用!important只是因为它给你一个"更好的结果". (24认同)
  • "为了更好的结果"?你能解释一下吗!重要的是什么? (14认同)
  • 但你能解释它的作用吗?"因为它存在的原因"并没有向那些不知道其原因的人解释其原因. (5认同)
  • 请不要这样做.虽然从技术上来说这解决了OP的问题,但是用"outline:0!important"来表示焦点位置的每个指示都是糟糕的用户体验和糟糕的开发练习.如果您这样做,请确保您正在做其他事情以指示焦点位置(如更改元素的背景颜色). (5认同)
  • 在什么世界中添加一个!important会给你一个更好的结果...你唯一一次使用!重要的是覆盖一个内联声明,否则你无法改变 (3认同)
  • 因为`!important`存在...如果你想删除所有轮廓,你应该使用它 (2认同)

ant*_*naj 42

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

button:focus {
  outline:none;
  box-shadow: none;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的帖子!"box-shadow"属性就是我的观点. (4认同)
  • 这对我来说是同样的问题。并不是说它相关,但我在 Ubuntu 17.10 上的 Chrome 中使用了 Roots 的 Sage 主题。 (2认同)
  • 我必须添加 !important 才能让它工作,可能引导程序在某处有一个特定的定义 (2认同)
  • 这对我有用!感谢您发布解决方案。干杯 (2认同)

小智 22

删除outline对于可访问性来说非常糟糕!理想情况下,只有当用户打算使用键盘时才会显示聚焦环.

使用:焦点可见.它目前是一个W3C提议,用于使用CSS设置仅键盘焦点的样式.在主流浏览器支持之前,您可以使用这种强大的polyfill.

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

/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Roo*_*Roo 12

在CSS文件中添加它.

*{
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
}
Run Code Online (Sandbox Code Playgroud)

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

chu*_*huk 9

使用这个:

:active {
    outline:none;
}
Run Code Online (Sandbox Code Playgroud)

或者如果这不起作用:

:active {
   outline:none !important;
}
Run Code Online (Sandbox Code Playgroud)

这对我有用(至少FF和Chrome).只需定位:focus状态,而不是定位状态,:active当用户点击链接时,这将删除浏览器中美学上突兀的突出显示.但是当有残障的用户选项卡或通过页面切换标签时,它仍将保留焦点状态.双方都很开心.:)

  • 为什么要编辑我的答案,如果你只是用相同的代码替换我的缩小版本但扩展?这并没有为用户更好地澄清它.你有没有得到答案积分?大声笑... (4认同)
  • 这样的StackExchange网站的重点是提供可以帮助任何阅读它们的人理解的答案。为此,简短的精简代码答案不如可读格式的代码有用。通过使答案更具可读性来改善答案是为所有人改善网站的一种正常方法。 (2认同)

小智 9

Chrome 和其他浏览器的修复

button:focus { outline: none !important; box-shadow: none !important; }
Run Code Online (Sandbox Code Playgroud)


For*_*mad 8

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

element:active:focus {
    outline: 0;
}
Run Code Online (Sandbox Code Playgroud)

希望有人能节省一些时间来解决这个问题,让我有点疑惑,想知道为什么这么简单的事情无法正常工作.


cor*_*aro 8

我在引导程序时遇到了同样的问题。我用轮廓和盒子阴影解决了

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
Run Code Online (Sandbox Code Playgroud)


ATL*_*DEV 8

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

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>
Run Code Online (Sandbox Code Playgroud)


Rob*_*ick 5

这对我有用:

button:focus {
    box-shadow:none;
}
Run Code Online (Sandbox Code Playgroud)


Beh*_*adi 5

对于这个问题:

在此处输入图片说明

用这个:

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

结果:

在此处输入图片说明