--- title: 有哪些不同的方法可以隐藏内容(使其仅对屏幕阅读器可用)? --- 这些技术与可访问性 (a11y) 相关。 ## 小/零尺寸 `width: 1px; height: 1px` 并结合使用 CSS clip 使元素在屏幕上几乎不占用任何空间。 不建议使用 `width: 0; height; 0`,因为搜索引擎可能会因此受到惩罚,认为它有恶意意图,例如关键词堆砌。 ## 绝对定位 `position: absolute; left: -99999px` 将把元素定位到屏幕之外。但是,根据 [WebAIM 的文章](https://webaim.org/techniques/css/invisiblecontent/): > 可导航元素(例如链接和表单控件)不应隐藏在屏幕外。有视觉的用户仍然可以使用键盘导航它们,但除非对它们进行样式设置以使其在接收到键盘焦点时可见,否则他们将看不到它们。 仅当您的内容仅包含文本时才使用此方法。 ## 文本缩进 `text-indent: -9999px`。这仅适用于 `block` 元素中的文本。与上面的绝对定位技术类似,给定此样式的可聚焦元素仍然可以聚焦,这会给使用键盘导航的视觉用户造成混淆。 ## 错误的方法 以下方法是错误的,因为它们会向用户 **和** 屏幕阅读器隐藏内容,如果目的是仅向屏幕阅读器公开内容,则这是不正确的。 * `display: none` * `visibility: hidden` * `hidden` 属性 ## 实际应用中的技术 理想情况下,建议结合上述方法,以确保它在所有浏览器中都能正常工作。 建议您使用成熟 CSS 框架中的以下方法之一,而不是实现您自己的从渲染树和 a11y 树中删除元素的方法,这些方法已经在许多网站上经过了实战测试。 ### Tailwind CSS ```css .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } ``` ### Bootstrap CSS ```css .visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } ``` ## 参考资料 * [CSS in Action - Invisible Content Just for Screen Reader Users](https://webaim.org/techniques/css/invisiblecontent/)