`:focus-visible` 和向后兼容性

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

Patrick H. Lauke 介绍了未来的 CSS 伪类 :focus-visible。我们正处于 浏览器支持的早期阶段,但它旨在解决一个尴尬的状况

… 当焦点样式作为鼠标/指针交互的结果应用时,它们通常是不希望的。一个经典的例子是按钮,它们会触发页面上的特定操作,例如推进轮播。虽然键盘用户能够看到他们的焦点何时位于按钮上非常重要,但对于鼠标用户来说,在他们点击按钮后发现按钮的外观发生了变化可能会令人困惑——让他们想知道为什么样式“卡住了”,或者按钮的状态/功能是否发生了某种变化。

如果我们使用 :focus-within 代替 :focus,则浏览器可以自由地应用焦点样式,因为它认为没有必要,但在例如元素被 Tab 键切换到时仍然会应用。

令人害怕的部分是“代替”。我们可以直接切换,因为浏览器支持就是这样。甚至 @supports 也无法帮助我们。但 Patrick 有些想法。

button:focus { /* some exciting button focus styles */ }
button:focus:not(:focus-visible) {
    /* undo all the above focused button styles
       if the button has focus but the browser wouldn't normally
       show default focus styles */
}
button:focus-visible { /* some even *more* exciting button focus styles */ }

直接链接 →