无论如何要防止快速单击时Chrome中元素的蓝色突出显示?

Posted

技术标签:

【中文标题】无论如何要防止快速单击时Chrome中元素的蓝色突出显示?【英文标题】:Anyway to prevent the Blue highlighting of elements in Chrome when clicking quickly? 【发布时间】:2014-01-27 00:27:16 【问题描述】:

大多数时候我并不担心,但我有一个图像轮播,如果我快速单击下一个和上一个 div,它们将在 Chrome 中突出显示。

我尝试使用大纲:无但没有效果。有什么解决办法吗?

【问题讨论】:

我在当前的 Chrome 版本上看不到这个效果 我知道你的用例是不同的,但对于其他可能想从所有链接中删除它的人,我不建议这样做。我曾尝试在 PWA 上将其删除,但如果没有视觉反馈,用户会认为应用程序速度较慢。 【参考方案1】:

您可以使用纯 CSS 来完成此操作。这是多浏览器支持的概要,第一行和最后一个 :focus 位覆盖了 chrome。详情如下。

.noSelect 
    -webkit-tap-highlight-color: transparent;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;

.noSelect:focus 
    outline: none !important;

只需将class="noSelect" 属性添加到您希望应用此类的元素。我强烈建议试试这个 CSS 解决方案。有人建议使用 javascript,但我相信这是最干净的解决方案。

适用于 Android/Safari 手机/Edge

-webkit-tap-highlight-color: transparent; 是您可能正在寻找的附加规则。影响 Chrome 桌面(尤其是触摸屏)和移动设备。 Here's a warning about using this non-standard property,以及some accessibility concerns with suggestions。最佳做法是用您自己的样式替换突出显示。

更新:Chrome 的更高版本...

对此答案的评论者指出,较新版本的 Chrome 需要 :focus outline: none !important;。答案也适用于包括这个!啊,不断变化的标准。

【讨论】:

仅对于 Chrome,您可能只需要 user-selectwebkit-user-select 这是我要采用的解决方案,因为我在 Chrome 中只有突出显示的问题,而且效果很好。感谢所有参与的人! 无法在 android 上使用 Chrome。我不得不使用-webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-tap-highlight-color: transparent; 是 Chrome 的关键部分 对于 chrome 在 android -webkit-tap-highlight-color: 透明; - 为我工作,谢谢!【参考方案2】:

我和<input type="range" /> 有类似的问题,我解决了

-webkit-tap-highlight-color: 透明;

input[type="range"]
  -webkit-tap-highlight-color: transparent;
 <input type="range" id="volume" name="demo"
         min="0" max="11">
  <label for="volume">Demo</label>

【讨论】:

【参考方案3】:

要移除手机上的蓝色叠加层,您可以使用以下方法之一:

-webkit-tap-highlight-color: transparent; /* transparent with keyword */
-webkit-tap-highlight-color: rgba(0,0,0,0); /* transparent with rgba */
-webkit-tap-highlight-color: hsla(0,0,0,0); /* transparent with hsla */
-webkit-tap-highlight-color: #00000000; /* transparent with hex with alpha */
-webkit-tap-highlight-color: #0000; /* transparent with short hex with alpha */

但是,unlike other properties,你不能用

-webkit-tap-highlight-color: none; /* none keyword */

在 DevTools 中,这将显示为“无效的属性值”或其他内容。


要在聚焦时移除蓝色/黑色/橙色轮廓,请使用以下命令:

:focus 
    outline: none; /* no outline - for most browsers */
    box-shadow: none; /* no box shadow - for some browsers or if you are using Bootstrap */

我删除 box-shadow 的原因是因为 Bootsrap(和一些浏览器)有时会将其添加到焦点元素中,因此您可以使用它来删除它。

但是如果有人用键盘导航,他们确实会很困惑,因为他们依靠这个大纲来导航。所以你可以替换它

:focus 
    outline: 100px dotted #f0f; /* 100px dotted pink outline */


您可以使用 :hover:active target taps on mobile,因此您可以使用它们来提供帮助。否则可能会令人困惑。


完整代码:

element 
    -webkit-tap-highlight-color: transparent; /* remove tap highlight */

element:focus 
    outline: none; /* remove outline */
    box-shadow: none; /* remove box shadow */


其他信息:

如果您想自定义 -webkit-tap-highlight-color,则应将其设置为半透明颜色,以便在点击时不会隐藏下方的元素 请从焦点元素don't remove the outline,或为它们添加更多样式。 -webkit-tap-highlight-color 没有得到很好的浏览器支持并且不是标准的。您仍然可以使用它,但要小心!

【讨论】:

【参考方案4】:

对于 Android 上的 Chrome,您可以使用 -webkit-tap-highlight-color CSS property:

-webkit-tap-highlight-color 是一个非标准的 CSS 属性,用于设置 出现在链接上的突出显示的颜色 轻拍。突出显示向用户表明他们的点击正在 成功识别,并指示他们正在点击哪个元素 开。

要完全去除高亮,可以将值设置为transparent

-webkit-tap-highlight-color: transparent;

请注意,这可能会对可访问性产生影响:请参阅 outlinenone.com

【讨论】:

我发现,例如,当您在触摸屏上运行时,Chrome 的行为与在 Android 上的行为非常相似。我有一个 ,只要你点击它里面的某个地方,它就会闪烁蓝色。只有当我使用这个答案时它才停止。谢谢! 其他 css attys 都不会这样做。如此重要,因为点击突出显示会扭曲所点击内容的外观,从而模糊您的视觉语言。 -webkit-tap-highlight-color: transparent; 似乎也可以。 我喜欢这个,对于触摸事件,这是必须的!此信息具有“超出图表”的用处! 非常有用。我尝试了很多不同的方法,但效果很好。【参考方案5】:

这对我来说效果最好:

.noSelect:hover 
  background-color: white;

【讨论】:

这很糟糕,是通往未来地狱的道路。没有冒犯。 网站背景不是白色怎么办? 这是不可维护的。请不要这样做。【参考方案6】:

我运行的是 Chrome 60 版,以前的 CSS 答案都不起作用。

我发现 Chrome 正在通过 outline 样式添加蓝色突出显示。添加以下 CSS 为我修复了它:

:focus 
    outline: none !important;

【讨论】:

您,先生,是救生员。 这是适用于 Android 上的 Chrome(版本 61)的工作 适用于最新版本的 Chrome。谢谢! 超级,想知道为什么我信任的user-select:none 无处可去 我尝试了所有方法,但这就像魅力一样。谢谢你救了我的头发!【参考方案7】:

但是,有时,即使 user-selecttouch-callout 关闭,cursor: pointer; 也可能会导致此效果,因此,只需设置 cursor: default; 即可。

【讨论】:

这是一个正确答案,cursor: pointer; 确实引起了亮点。但是-webkit-tap-highlight-color: transparent; 是更通用的解决方案。 @yanot:在将其标记为相对通用解决方案之前,请阅读有关-webkit-tap-highlight-color的警告:developer.mozilla.org/en-US/docs/Web/CSS/… @HassanBaig 我想很明显我不是指通用跨浏览器,而是在这种情况下,即跨不同版本的chrome 谢谢 - 没有其他解决方案适合我。必须删除光标指针才能使蓝色突出显示消失 cursor: default 在没有其他方法的情况下为我解决了问题。【参考方案8】:

尝试为这些元素上的选择事件创建一个处理程序,并在处理程序中清除选择。

看看这个:

Clear Text Selection with JavaScript

这是一个清除选择的例子。您只需将其修改为仅适用于您需要的特定元素。

【讨论】:

所以不能用 CSS 来修复吧?我可以清除点击处理程序中的选定文本吗?编辑-感谢您的示例。这很糟糕,它必须通过javascript处理。我希望这只是一个 CSS 问题。 另外,这会对可访问性产生影响吗? 您可以清除点击处理程序中的文本,但请使用纯 CSS 查看@smts 答案。 这就是我要找的。谢谢!

以上是关于无论如何要防止快速单击时Chrome中元素的蓝色突出显示?的主要内容,如果未能解决你的问题,请参考以下文章

当父元素可拖动时如何允许文本框插入符号位置(在鼠标单击时)

禁用右键单击时如何检查chrome中的元素?

如何防止表单元素在 Chrome 中预填充

iPad Safari:点击链接时如何禁用快速闪烁效果

iPad Safari:点击链接时如何禁用快速闪烁效果

如何防止 UITapGestureRecognizer 快速连续识别单击?