首页 web前端 css教程 理解 CSS 中 `:focus` 和 `:focus-visible` 之间的区别

理解 CSS 中 `:focus` 和 `:focus-visible` 之间的区别

Nov 24, 2024 am 07:59 AM

Understanding the Difference Between `:focus` and `:focus-visible` in CSS

了解 CSS 中 :focus 和 :focus-visible 之间的区别

我已经了解了键盘可访问性的重要性,所以我知道聚焦元素的视觉指示非常重要。但众所周知的 :focus 伪类并不总是最适合这项工作。这就是 :focus-visible 的用武之地。让我们看看这两个伪类之间的差异,并探索有效使用它们的最佳实践。

什么是 :focus 伪类?

:focus 伪类是一个 CSS 选择器,它将样式应用于任何接收焦点的元素,无论焦点是如何触发的。这包括来自键盘导航、鼠标单击和触摸交互的焦点事件。

:focus 的用法示例

button:focus {
  outline: 2px solid blue;
}
登录后复制
登录后复制

在此示例中,只要按钮获得焦点,无论用户是使用鼠标单击它、在触摸屏上点击它还是使用键盘导航到它,该按钮都会显示蓝色轮廓。

什么是 :focus-visible 伪类?

:focus-visible 伪类更加专业。仅当浏览器确定焦点应该可见时,它才将样式应用于元素。当用户通过键盘或辅助技术而不是通过鼠标或触摸输入进行导航时,通常会发生这种情况。

:focus-visible 的用法示例

button:focus-visible {
  outline: 2px solid blue;
}
登录后复制

在这里,当通过键盘导航或其他通常需要可见焦点指示器的输入方法获得焦点时,按钮只会显示蓝色轮廓。

:focus 和 :focus-visible 之间的主要区别

:重点

  • 行为: 适用于任何接收焦点的元素,无论输入法如何。
  • 用例:确保与元素的所有交互都以视觉方式指示,无论是通过鼠标、键盘还是触摸。

:焦点-可见

  • 行为: 仅当焦点可见时应用样式,例如使用键盘或辅助技术。
  • 用例:非常适合您只想向键盘和辅助技术用户提供焦点指示器,同时避免为鼠标和触摸用户提供不必要的轮廓(通常是设计所需的)的场景。

无障碍影响

:重点

  • 优点:
  • 保证所有用户都可以看到某个元素何时获得焦点,这对于可访问性至关重要。
  • 缺点:
  • 可能会导致鼠标用户的体验不佳,因为在鼠标交互过程中可能会出现不必要的焦点样式。

:焦点-可见

  • 优点:
  • 仅在必要时显示焦点指示器,从而增强用户体验,从而为鼠标和触摸用户保持界面干净。
  • 为键盘和辅助技术用户量身定制体验,为他们提供清晰的视觉提示。
  • 缺点:
  • 可能需要额外的考虑,以确保焦点指示器不会被意外省略,特别是在不支持 :focus-visible 的旧浏览器中。
    • 在某些情况下,您可能希望向所有用户显示焦点指示器,无论输入法如何。

使用 :focus 和 :focus-visible 的最佳实践

为了实现最佳的可访问性和用户体验,在 CSS 中结合使用 :focus 和 :focus-visible 通常是一个好主意。

结合 :focus 和 :focus-visible

button:focus {
  outline: 2px solid blue;
}
登录后复制
登录后复制

这是一个 Stackblitz 示例,展示了此类样式的外观,供您尝试和使用:

额外提示

  • 使用键盘和辅助技术进行测试:确保您的 Web 应用程序可以使用键盘(Tab、Shift Tab 等)进行导航,并且焦点指示器对于依赖它们的人是可见的。在您的 e2e 测试套件中包含可访问性测试绝不是一个坏主意。
  • 提供清晰的焦点指示器:确保焦点指示器突出且易于看到。微妙或难以发现的焦点指示器可能会严重影响依赖键盘导航的用户的可访问性。

结论

:focus-visible 伪类提供了一种更精细的方式来管理焦点指示器,提高可访问性和用户体验,特别是对于键盘和辅助技术用户。通过了解 :focus 和 :focus-visible 之间的差异,并在 CSS 中应用最佳实践,您可以创建更易于访问和用户友好的 Web 应用程序。

请记住,可访问性永远不应该是事后的想法。通过深思熟虑地应用焦点样式,您可以确保所有用户,无论他们如何与您的网站交互,都可以轻松导航和交互。

以上是理解 CSS 中 `:focus` 和 `:focus-visible` 之间的区别的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

如何将CSS网格用于粘头和页脚 如何将CSS网格用于粘头和页脚 Apr 02, 2025 pm 06:29 PM

CSS网格是一系列属性的集合,旨在使布局比以往任何时候都容易。像任何东西一样,那里有一点学习曲线,但是网格是

Google字体可变字体 Google字体可变字体 Apr 09, 2025 am 10:42 AM

我看到Google字体推出了新设计(Tweet)。与上一次大型重新设计相比,这感觉更加迭代。我几乎无法分辨出区别

See all articles