为什么焦点内可聚焦元素上的黑色轮廓内部 css 样式不适用于单击+按住?
Why does the internal css style of black outline on in-focus focusable elements, not apply on click+hold?
如果你运行下面的演示,并在第三个link上点击+按住(松开点击前按住1秒),你会看到它们得到相同的样式:focus
来自 css(红色轮廓)的伪选择器。
.ext:focus {
outline: 1px dotted red;
}
<a href="#">1. Get me in focus with tab to see black outline -- Browser default </a>
<br><br>
<a class="ext" href="#">2. Get me in focus with tab to see red outline -- ext css </a>
<br><br>
<a class="ext" href="#">3. Click+hold to see red outline -- supposody gets me in focus </a>
<br><br>
<a href="#">4. Click+hold to see black outline -- doesnt work as expected!</a>
我的直觉是,当您单击并按住任何可聚焦元素时,它会聚焦该元素,这就是为什么您在 #3 link 上看到红色虚线轮廓的原因。
那么,为什么在第四个 link 中单击 + 按住时看不到黑色轮廓?
确实,当您单击可聚焦元素时,它也会获得 infocus,但您的误解是浏览器在内部应用了以下 css:
a:focus {
outline: 2px solid black;
}
实际上浏览器是这样使用 focus-visible
css 属性 的:
a:focus-visible {
outline: 2px solid black;
}
focus-visible
是 css4 级 属性 最近大多数浏览器(除了 safari)引入的。它是专门为您所观察到的而设计的。这种行为在输入字段 (check out MDN's example) 的情况下变得更加明显,您无需按住单击即可查看结果。在锚标记的情况下,focus-visible
仅将样式应用于那些通过键盘而不是鼠标聚焦的元素。应该注意 button
元素的行为类似于 a
元素,但 input
元素将 focus-visible
视为与 focus
相同,即使单击它也是如此获取 input:focus-visible{...}
.
中提及的样式
示例:
input:focus-visible, button:focus-visible {
outline: 2px dotted black;
}
<input type="text" value="Click/tab shows outline">
<button>Only tab shows outline</button>
此外,您可以在浏览器中检查元素并将元素的状态切换为 focus-visible
。您将看到用户代理 (chrome) 应用了以下样式:
a:-webkit-any-link:focus-visible {
outline-offset: 1px;
}
user agent stylesheet
a:-webkit-any-link {
color: -webkit-link;
cursor: pointer;
text-decoration: underline;
}
user agent stylesheet
:focus-visible {
outline: -webkit-focus-ring-color auto 1px;
}
如果你运行下面的演示,并在第三个link上点击+按住(松开点击前按住1秒),你会看到它们得到相同的样式:focus
来自 css(红色轮廓)的伪选择器。
.ext:focus {
outline: 1px dotted red;
}
<a href="#">1. Get me in focus with tab to see black outline -- Browser default </a>
<br><br>
<a class="ext" href="#">2. Get me in focus with tab to see red outline -- ext css </a>
<br><br>
<a class="ext" href="#">3. Click+hold to see red outline -- supposody gets me in focus </a>
<br><br>
<a href="#">4. Click+hold to see black outline -- doesnt work as expected!</a>
我的直觉是,当您单击并按住任何可聚焦元素时,它会聚焦该元素,这就是为什么您在 #3 link 上看到红色虚线轮廓的原因。
那么,为什么在第四个 link 中单击 + 按住时看不到黑色轮廓?
确实,当您单击可聚焦元素时,它也会获得 infocus,但您的误解是浏览器在内部应用了以下 css:
a:focus {
outline: 2px solid black;
}
实际上浏览器是这样使用 focus-visible
css 属性 的:
a:focus-visible {
outline: 2px solid black;
}
focus-visible
是 css4 级 属性 最近大多数浏览器(除了 safari)引入的。它是专门为您所观察到的而设计的。这种行为在输入字段 (check out MDN's example) 的情况下变得更加明显,您无需按住单击即可查看结果。在锚标记的情况下,focus-visible
仅将样式应用于那些通过键盘而不是鼠标聚焦的元素。应该注意 button
元素的行为类似于 a
元素,但 input
元素将 focus-visible
视为与 focus
相同,即使单击它也是如此获取 input:focus-visible{...}
.
示例:
input:focus-visible, button:focus-visible {
outline: 2px dotted black;
}
<input type="text" value="Click/tab shows outline">
<button>Only tab shows outline</button>
此外,您可以在浏览器中检查元素并将元素的状态切换为 focus-visible
。您将看到用户代理 (chrome) 应用了以下样式:
a:-webkit-any-link:focus-visible {
outline-offset: 1px;
}
user agent stylesheet
a:-webkit-any-link {
color: -webkit-link;
cursor: pointer;
text-decoration: underline;
}
user agent stylesheet
:focus-visible {
outline: -webkit-focus-ring-color auto 1px;
}