当一个 HTML 元素被“聚焦”(当前被选中/进入)时,许多浏览器(至少 Safari 和 Chrome)会在它周围放置一个蓝色边框。
对于我正在处理的布局,这会分散注意力并且看起来不正确。
<input type="text" name="user" class="middle" id="user" tabindex="1" />
Firefox 似乎没有这样做,或者至少会让我通过以下方式控制它:
border: x;
如果有人能告诉我 IE 的表现如何,我会很好奇。
让 Safari 移除这一点点耀斑会很好。
在您的情况下,请尝试:
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;
}
请记住,焦点大纲是一种可访问性和可用性功能;它提示用户当前关注的元素。
从所有输入中删除它
input {
outline:none;
}
这让我困惑了一段时间,直到我发现这条线既不是边框也不是轮廓,而是阴影。所以要删除它,我必须使用它:
input:focus, input.form-control:focus {
outline:none !important;
outline-width: 0 !important;
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
}
这是一个旧线程,但作为参考,重要的是要注意不建议禁用输入元素的轮廓,因为它会妨碍可访问性。
大纲属性的存在是有原因的——为用户提供键盘焦点的清晰指示。有关此主题的进一步阅读和其他资源,请参阅 http://outlinenone.com/
Only thing is that you won't be able to see the focus(outline focus) on it
- 这正是我的观点。移除轮廓会禁用焦点事件的视觉指示,而不是实际事件。删除视觉指示意味着您让依赖该指示的残疾人更加困难。
outline:none;
)而不考虑其含义。仅仅因为某些事情很容易并且可以节省时间,并不意味着它是最佳实践:)
这是一个普遍的担忧。
浏览器呈现的默认 outline 很难看。
例如看这个:
表格,标签{边距:1em自动; } 标签 { 显示:块; }
大多数人推荐的最常见的“修复”是 outline:none
- 如果使用不正确 - 对可访问性来说是灾难。
那么......无论如何,大纲有什么用?
我发现有一个very dry-cut website很好地解释了一切。
在使用 TAB 键(或等效键)导航 Web 文档时,它为具有“焦点”的链接提供视觉反馈。这对于不能使用鼠标或有视力障碍的人特别有用。如果您删除大纲,您将使这些人无法访问您的网站。
好的,让我们尝试与上面相同的示例,现在使用 TAB
键进行导航。
表格,标签{边距:1em自动; } 标签 { 显示:块; }
请注意,即使不单击输入,您也可以知道焦点在哪里?
现在,让我们在我们可信赖的 <input>
上尝试 outline:none
因此,再次单击文本后使用 TAB
键进行导航,看看会发生什么。
表格,标签{边距:1em自动; } 标签 { 显示:块; }输入{大纲:无; }
看看如何更难弄清楚焦点在哪里?唯一的标志是光标闪烁。我上面的例子过于简单化了。在实际情况下,页面上不会只有一个元素。更多类似的东西。
.wrapper { 宽度:500px;最大宽度:100%;边距:0 自动; } 表格,标签 { 边距:1em 自动; } 标签 { 显示:块; }输入{大纲:无; }
如果我们保留大纲,现在将其与相同的模板进行比较:
.wrapper { 宽度:500px;最大宽度:100%;边距:0 自动; } 表格,标签 { 边距:1em 自动; } 标签 { 显示:块; }
所以我们建立了以下
轮廓很难看 删除它们会使生活更加困难。
那么答案是什么?
删除丑陋的轮廓并添加您自己的视觉提示来指示焦点。
这是我的意思的一个非常简单的例子。
我删除了轮廓并在 :focus 和 :active 上添加了底部边框。我还通过在 :focus 和 :active 上将它们设置为透明来移除顶部、左侧和右侧的默认边框(个人喜好)
表格,标签{边距:1em自动; } 标签 { 显示:块; } 输入 { 大纲:无 } 输入:焦点,输入:活动 { 边框颜色:透明; border-bottom: 2px solid red }
因此,我们使用前面的“真实世界”示例尝试上述方法:
.wrapper { 宽度:500px;最大宽度:100%;边距:0 自动; } 表格,标签 { 边距:1em 自动; } 标签 { 显示:块; } 输入 { 大纲:无 } 输入:焦点,输入:活动 { 边框颜色:透明; border-bottom: 2px solid red }
这可以通过使用基于修改“大纲”而不是像 Materialize 那样完全删除它的想法的外部库来进一步扩展
你最终可以得到一些不难看的东西,而且只需很少的努力
正文 { 背景:#444 } .wrapper { 填充:2em;宽度:400px;最大宽度:100%;文本对齐:居中;保证金:2em自动;边框:1px 实心 #555 } 按钮,.wrapper { 边框半径:3px; } 按钮 { 填充:.25em 1em; } 输入,标签 { 颜色:白色!重要; }
唯一对我有用的解决方案
边界实际上是一个影子。所以要隐藏它,我必须这样做:
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);
}
2021 年编辑:您现在可以使用:https://github.com/WICG/focus-visible
删除所有焦点样式通常对可访问性和键盘用户不利。但是轮廓很丑陋,并且为每个交互元素提供自定义的焦点样式可能会很痛苦。
因此,我发现的最佳折衷方案是仅在我们检测到用户正在使用键盘导航时才显示大纲样式。基本上,如果用户按下 TAB,我们会显示轮廓,如果他使用鼠标,我们会隐藏它们。
它不会阻止您为某些元素编写自定义焦点样式,但至少它提供了一个很好的默认值。
我就是这样做的:
// 检测键盘用户 const keyboardUserCssClass = "keyboardUser";函数 setIsKeyboardUser(isKeyboard) { const { body } = 文档; if (isKeyboard) { body.classList.contains(keyboardUserCssClass) || body.classList.add(keyboardUserCssClass); } else { body.classList.remove(keyboardUserCssClass); } } // 这是一种仅在用户使用 TAB 键导航时激活焦点样式的快速技巧。这是我们找到的最佳折衷方案 // 在不牺牲可访问性的情况下保持良好的设计。 document.addEventListener("keydown", e => { if (e.key === "Tab") { setIsKeyboardUser(true); } }); document.addEventListener("click", e => { // 在按钮上按 ENTER 会触发坐标为 0 的点击事件 setIsKeyboardUser(!e.screenX && !e.screenY); }); document.addEventListener("mousedown", e => { setIsKeyboardUser(false); });正文:不(.keyboardUser)*:焦点{大纲:无; }
默认情况下,您不会看到轮廓。但是按 TAB 键,你会看到焦点元素
这是锚链接
click
侦听器很不错。
我尝试了所有答案,但我仍然无法在 Mobile 上使用,直到找到 -webkit-tap-highlight-color
。
所以,对我有用的是......
* { -webkit-tap-highlight-color: transparent; }
:focus-visible
可访问性的好消息 - Chrome & Firefox 添加了对 :focus-visible
的支持。
由于可访问性要求(键盘导航)会降低您的网站的可访问性,隐藏焦点样式是一种不好的做法。
使用 :focus-visible
伪类并让浏览器确定何时应用焦点。
:focus-visible /* Chrome */
请注意,Firefox 通过一个较旧的带前缀的伪类支持类似的功能:
:-moz-focusring /* Firefox */
按钮{颜色:#000;背景颜色:#fff;填充:10px 16px;边距:10px 0;边框半径:4px; } 按钮:焦点 { 框阴影:0 0 0 2px #E59700;大纲:0; } 按钮:悬停 { 背景颜色:#eee; } button.with-focus-visible:focus:not(:focus-visible) { box-shadow: none;大纲:0; } button.with-focus-visible:focus-visible, button.with-focus-visible:moz-focusring { box-shadow: 0 0 0 2px #E59700;大纲:0; }
用鼠标点击按钮。然后尝试切换到按钮。
文档:https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible
w3 规范:https://www.w3.org/TR/selectors-4/#the-focus-visible-pseudo
使用此代码:
input:focus {
outline: 0;
}
在 Bootstrap 4 中删除边框轮廓可以使用 shadow-none
,它将删除焦点轮廓。
<div class="form-group">
<label for="exampleInputEmail1">Name</label>
<input type="text" class="form-control form-control shadow-none"
id="exampleInputEmail1"aria-describedby="emailHelp">
</div>
焦点上的 textarea 可能有 box-shadow .. 它可以像这样删除:
textarea:focus{
outline: none!important;
box-shadow: none!important;
}
你也可以试试这个
input[type="text"] {
outline-style: none;
}
或者
.classname input{
outline-style: none;
}
在 Firefox 中,没有一个解决方案对我有用。
以下解决方案更改了 Firefox 的焦点边框样式,并将其他浏览器的轮廓设置为无。
我已经有效地将焦点边框从 3px 蓝色发光变为与文本区域边框匹配的边框样式。以下是一些边框样式:
https://i.stack.imgur.com/iRNKm.png
https://i.stack.imgur.com/mwsII.png
https://i.stack.imgur.com/yGVOv.png
这是代码:
输入:焦点,文本区域:焦点{大纲:无; /** 用于 Safari 等 **/ border:1px solid gray; /** 对于 Firefox **/ } #textarea { position:absolute;顶部:10px;左:10px;右:10px;宽度:计算(100% - 20px);高度:160px;显示:内联块;边距顶部:-0.2em; }
您可以使用以下方法删除文本/输入框周围的橙色或蓝色边框(轮廓):outline:none
input {
background-color: transparent;
border: 0px solid;
height: 20px;
width: 160px;
color: #CCC;
outline:none !important;
}
试试这个css,它对我有用
textarea:focus, input:focus{ border: none; }
当焦点在元素上时删除轮廓,使用下面的 CSS 属性:
input:focus {
outline: 0;
}
此 CSS 属性删除焦点上所有输入字段的轮廓,或使用伪类使用下面的 CSS 属性删除元素的轮廓。
.className input:focus {
outline: 0;
}
此属性删除选定元素的轮廓。
尝试这个:
*:focus {
outline: none;
}
这将影响您的所有页面。
如果上述解决方案不起作用,您可能正在使用引导程序,因此 .form-control
类默认将 box-shadow
css 属性应用于您的输入字段。
解决方案将是:
.form-control {
box-shadow: none;
}
不定期副业成功案例分享
input:focus, textarea:focus {outline: none;}
select:focus {outline:none;}
<button>
标记,它被 jQuery UI 和 Twitter Bootstrap 等使用,所以为了完整起见,我会将button: focus
添加到列表中。div:focus {outline:none}
、p:focus {outline:none}
或几乎任何元素也可以在这里应用。