CSS 焦点伪类,仅在键盘(选项卡式)焦点上

  • 本文关键字:焦点 选项 CSS 键盘 html css
  • 更新时间 :
  • 英文 :


这确实是一个基本问题,但我找不到答案。我的 CSS 看起来像这样;

a:focus, button:focus{outline:3px solid #000;}

我想要的是,焦点仅在用户使用键盘按 Tab 键转到这些元素时才适用。

这正是它在Chrome中的工作方式,但是在FF和IE中,当用户单击元素时,大纲会显示出来。这不是我想要的。

Chrome 实际上是错的吗?我试图保持简单,避免Javascript是可能的。如何使大纲仅在用户在页面周围按选项卡显示时显示?

浏览器仅支持IE8+,FF和Chrome。

感谢您的任何帮助!

好吧,我知道如果可能的话,我说没有 JS,但我不想再花更多的时间在这上面......所以对于任何感兴趣的人,这就是我所做的

$("a, button, select, input[type=submit], input[type=text]").keyup(function(){
    $(this).addClass("focusOutline");
}).blur(function(){
    $(this).removeClass("focusOutline");
});

这做得很好。呵��

使用 :focus-visible。它目前是W3C建议使用CSS设置仅键盘焦点的样式。在主流浏览器支持它之前,您可以使用这个强大的 polyfill。

/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
  outline: none;
}
/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}

我还写了一篇更详细的文章,以防您需要更多信息。

我在其他地方以不同的方式执行此操作,并认为我会将其添加到此处,作为任何偶然发现它的人的替代解决方案:

/**
* If user hits tab key then we add a class to <html> that lets us use
* additional styling hints to show focus etc.
*/
function detectTabKey() {
    $(document).keydown(function(e) {
        if (e.keyCode === 9) {
            $('html').addClass('is-tab-user');
        }
    });
}

最新更新