如何删除输入文本元素上的边框突出显示


610

当一个HTML元素被“聚焦”(当前被选中/插入)时,许多浏览器(至少是Safari和Chrome)会在其周围放置一个蓝色边框。

对于我正在处理的布局,这会分散注意力,看起来不正确。

<input type="text" name="user" class="middle" id="user" tabindex="1" />

Firefox似乎没有这样做,或者至少可以让我通过以下方式控制它:

border: x;

如果有人可以告诉我IE的性能,我会很好奇。

让Safari消除这点闪光会很好。

Answers:


1096

对于您的情况,请尝试:

input.middle:focus {
    outline-width: 0;
}

或一般而言,影响所有基本表单元素:

input:focus,
select:focus,
textarea:focus,
button:focus {
    outline: none;
}

在评论中,诺亚·惠特莫尔Noah Whitmore)建议更进一步,以支持将contenteditable属性设置为的元素true(有效地使它们成为输入元素的一种)。以下内容也应该针对这些对象(在支持CSS3的浏览器中):

[contenteditable="true"]:focus {
    outline: none;
}

尽管我不建议这样做,但出于完整性考虑,您始终可以使用以下命令禁用所有内容的焦点轮廓:

*:focus {
    outline: none;
}

请记住,焦点轮廓是可访问性和可用性功能;它会提示用户当前所关注的元素。


10
谢谢Cory,很好的提示。您还需要将CSS分配给textarea以覆盖所有输入字段。input:focus, textarea:focus {outline: none;}
BaronGrivet

7
别忘了选择select:focus {outline:none;}
Geek Num 88

2
另外还有<button>jQuery UI和Twitter Bootstrap使用的标记,因此button: focus为了完整性起见,我将其添加到列表中。
克里斯·帕顿

1
以我的经验,这可能会在没有重点的情况下发生,在这种情况下,我不得不将其应用于button, button:focus { outline:none; }
Mike Lyons

1
@Cᴏʀʏ您介意将有关A11y和可用性的注释移到您的问题的最顶端吗?IMO会大大改善您的答案,因为删除所有功能都是不好的做法。
约瑟夫·恩格尔弗罗斯特

64

从所有输入中删除

input {
 outline:none;
}

31

这是一个旧线程,但是作为参考,必须注意,不建议禁用输入元素的轮廓,因为这会妨碍可访问性。

outline属性的存在是有原因的-为用户提供键盘焦点的清晰指示。有关此主题的更多信息和其他资源,请访问http://outlinenone.com/


1
Boaz,仅供参考,input.middle {outline:none}仍将允许您遍历元素(包括input.middle)。按下Tab键也将聚焦在输入标签上。唯一的事情是您将看不到它的焦点(轮廓焦点)。因此,使用它并不是那么有害。.:)
Anish Nair 2013年

11
@AnishNair- Only thing is that you won't be able to see the focus(outline focus) on it正是我的意思。删除轮廓将禁用焦点事件而不是实际事件的视觉指示。删除视觉指示意味着您要为依赖该指示的残障人士加倍努力。
波阿斯-恢复莫妮卡

2
有时我们需要做出让步才能实现目标
:)

6
@AnishNair是的。但是比起经常阅读该主题的人们,他们更喜欢在outline:none;不考虑其含义的情况下使用简单的方法(即)。仅仅因为事情容易并且节省时间,并不意味着它是最佳实践:)
Boaz-恢复莫妮卡

5
我来不及讨论,但是您仍然可以设置输入的聚焦状态的样式(例如更改边框的颜色或宽度)。只要在执行此操作时牢记可访问性(良好的对比度等),它与默认轮廓一样容易访问。
梅格2014年

18

这是一个普遍关注的问题。

浏览器呈现的默认轮廓很难看。

例如:


最推荐的最常见的“修复”是outline:none-如果使用不正确,则是可访问性的灾难。


那么...轮廓到底有什么用?

我发现一个非常干切的网站可以很好地解释所有内容。

当使用TAB键(或等效键)浏览Web文档时,它为具有“焦点”的链接提供视觉反馈。这对于不能使用鼠标或有视觉障碍的人们特别有用。如果删除大纲,那么这些人将无法访问您的网站。

好的,让我们尝试与上述相同的示例,现在使用TAB键进行导航。

请注意,即使不单击输入也如何知道焦点在哪里?

现在,让我们试着outline:none对我们的信赖<input>

因此,再次TAB单击该键,可在单击文本后浏览并查看会发生什么。

弄清楚如何确定重点在哪里?唯一的信号是光标闪烁。我上面的示例过于简单。在实际情况下,页面上不会只有一个元素。与此类似的东西。

现在,如果我们保留大纲,则将其与相同的模板进行比较:

所以我们建立了以下

  1. 轮廓很丑
  2. 删除它们会使生活更加困难。

那么答案是什么呢?

删除丑陋的轮廓,并添加自己的视觉提示以指示焦点。

这是我的意思的一个非常简单的例子。

我删除轮廓并在:focus:active上添加底部边框。我还通过将:focus:active(个人喜好)设置为透明来删除顶部,左侧和右侧的默认边框。

因此,我们使用前面的“真实世界”示例尝试上述方法:

可以通过使用外部库来进一步扩展该库,该库基于修改“概述”的想法,而不是像Materialize一样完全删除它

您可以得到一件并不丑陋且工作很少的东西


18

这使我困惑了一段时间,直到我发现这条线既不是边界也不是轮廓,而是阴影。因此,要删除它,我必须使用以下代码:

input:focus, input.form-control:focus {

    outline:none !important;
    outline-width: 0 !important;
    box-shadow: none;
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
}

6

您可以使用CSS禁用它!这是我用于禁用蓝色边框的代码:

*:focus {
outline: none;
}

这将删除蓝色边框!

这是一个工作示例:JSfiddle.net

希望能帮助到你!


4

删除所有焦点样式通常对辅助功能和键盘用户不利。但是轮廓很难看,为每个交互式元素提供自定义的聚焦样式可能是一个真正的痛苦。

因此,我发现的最佳折衷方案是仅在我们检测到用户正在使用键盘进行导航时才显示轮廓样式。基本上,如果用户按下TAB键,我们将显示轮廓,如果他使用鼠标,我们将其隐藏。

它不会阻止您为某些元素编写自定义焦点样式,但至少它提供了很好的默认设置。

这是我的方法:

// detect keyboard users

const keyboardUserCssClass = "keyboardUser";

function setIsKeyboardUser(isKeyboard) {
  const { body } = document;
  if (isKeyboard) {
   body.classList.contains(keyboardUserCssClass) || body.classList.add(keyboardUserCssClass);
  } else {
   body.classList.remove(keyboardUserCssClass);
  }
}

// This is a quick hack to activate focus styles only when the user is
// navigating with TAB key. This is the best compromise we've found to
// keep nice design without sacrifying accessibility.
document.addEventListener("keydown", e => {
  if (e.key === "Tab") {
   setIsKeyboardUser(true);
  }
});
document.addEventListener("click", e => {
  // Pressing ENTER on buttons triggers a click event with coordinates to 0
  setIsKeyboardUser(!e.screenX && !e.screenY);
});

document.addEventListener("mousedown", e => {
  setIsKeyboardUser(false);
});
body:not(.keyboardUser) *:focus {
  outline: none;
}
<p>By default, you'll see no outline. But press TAB key and you'll see focussed element</p>
<button>This is a button</button>
<a href="#">This is anchor link</a>
<input type="checkbox" />
<textarea>textarea</textarea>
<select/>


这是一种彻底的方法。该click侦听器是一个很好的接触。
Keith DC

4

我尝试了所有的答案,但直到找到为止,我仍然无法让我在Mobile上工作-webkit-tap-highlight-color

所以,对我有用的是...

* { -webkit-tap-highlight-color: transparent; }

1
那就是我正在寻找的解决方案。当您使用li等元素进行触摸屏体验时,此功能特别有用
Anand G


3

与我合作的唯一解决方案

input[type="text"]:focus{
     box-shadow: 0 0 0 rgb(255, 255, 255);
}

 input[type="checkbox"]:focus{
      box-shadow: 0 0 0 rgb(255, 255, 255);
 }

2

在Firefox中,所有解决方案都不适合我。

以下解决方案更改了Firefox焦点的边框样式,并将其他浏览器的轮廓设置为无。

我已经有效地使焦点边框从3px蓝色发光变为与文本区域边框匹配的边框样式。这是一些边框样式:

虚线边框(边框2px,红色虚线): 虚线边框。 边框2px虚线红色

无边界!(边界0像素):
无边界。 边框:0px

Textarea边框(边框1px纯灰色): Textarea边框。 边框1px纯灰色

这是代码:

input:focus, textarea:focus {
    outline: none; /** For Safari, etc **/
    border:1px solid gray; /** For Firefox **/
}

#textarea  {
  position:absolute;
  top:10px;
  left:10px;
  right:10px;
  width:calc(100% - 20px);
  height:160px;
  display:inline-block;
  margin-top:-0.2em;
}
<textarea id="textarea">yo</textarea>


1

您也可以尝试

input[type="text"] {
outline-style: none;
}

要么

.classname input{
outline-style: none;
}

1

您可以使用以下命令删除文本/输入框周围的橙色或蓝色边框(轮廓)

input {
    background-color: transparent;
    border: 0px solid;
    height: 20px;
    width: 160px;
    color: #CCC;
    outline:none !important;
}

0

当焦点位于元素上时,使用以下CSS属性删除轮廓:

input:focus {
    outline: 0;
}

此CSS属性删除焦点上所有输入字段的轮廓,或使用伪类通过下面的CSS属性删除元素的轮廓。

.className input:focus {
    outline: 0;
} 

此属性将删除所选元素的轮廓。


0

尝试这个

*:focus {
    outline: 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.