CSS如何隐藏网页内容只让内容在屏幕阅读器上使用

137 阅读3分钟

CSS如何隐藏网页内容只让内容在屏幕阅读器上使用

在网页开发中,有时需要隐藏某些内容,使其在视觉上不可见,但仍然可以被屏幕阅读器(如供视障用户使用的辅助工具)读取。以下是几种常见的实现方法:

1. 使用 aria-hiddenaria-label

  • aria-hidden="true":隐藏元素,使其对屏幕阅读器不可见。
  • aria-label:为元素提供屏幕阅读器可读的标签。

示例

<button aria-label="关闭">
    <span aria-hidden="true">×</span>
</button>
  • 解释:视觉上显示“×”符号,但屏幕阅读器会读取“关闭”。

2. 使用 sr-onlyvisually-hidden

通过CSS将内容隐藏在视觉上,但仍保留在DOM中供屏幕阅读器读取。

示例

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    border: 0;
}

使用

<p class="sr-only">这段内容只对屏幕阅读器可见。</p>

3. 使用 clip-path

通过裁剪元素使其在视觉上不可见,但仍保留在DOM中。

示例

.visually-hidden {
    clip-path: inset(100%);
    clip: rect(1px, 1px, 1px, 1px);
    height: 1px;
    overflow: hidden;
    position: absolute;
    white-space: nowrap;
    width: 1px;
}

使用

<p class="visually-hidden">这段内容只对屏幕阅读器可见。</p>

4. 使用 opacityz-index

通过设置透明度为0并将元素置于底层,使其在视觉上不可见。

示例

.screen-reader-only {
    opacity: 0;
    position: absolute;
    z-index: -1;
}

使用

<p class="screen-reader-only">这段内容只对屏幕阅读器可见。</p>

5. 使用 display: nonevisibility: hidden 的注意事项

  • display: none:元素完全从渲染树中移除,屏幕阅读器也无法读取。
  • visibility: hidden:元素在视觉上隐藏,但仍占据空间,屏幕阅读器也无法读取。

不推荐

<p style="display: none;">这段内容对屏幕阅读器不可见。</p>
<p style="visibility: hidden;">这段内容对屏幕阅读器不可见。</p>

6. 使用 aria-describedbyaria-labelledby

通过关联隐藏内容与可见元素,使屏幕阅读器能够读取隐藏内容。

示例

<button aria-labelledby="button-label">
    <span id="button-label" class="sr-only">提交表单</span>
    提交
</button>

7. 使用 role 属性

通过role属性明确元素的语义,帮助屏幕阅读器理解内容。

示例

<div role="alert" class="sr-only">这是一条重要的提示信息。</div>

8. 综合示例

以下是一个综合使用多种方法的示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>隐藏内容示例</title>
    <style>
        .sr-only {
            position: absolute;
            width: 1px;
            height: 1px;
            padding: 0;
            margin: -1px;
            overflow: hidden;
            clip: rect(0, 0, 0, 0);
            border: 0;
        }
    </style>
</head>
<body>
    <button aria-label="关闭">
        <span aria-hidden="true">×</span>
    </button>

    <p class="sr-only">这段内容只对屏幕阅读器可见。</p>

    <div role="alert" class="sr-only">这是一条重要的提示信息。</div>
</body>
</html>

总结

隐藏网页内容但让屏幕阅读器可读的常用方法包括:

  1. 使用 sr-onlyvisually-hidden 类。
  2. 使用 aria-hiddenaria-label
  3. 使用 clip-pathopacity
  4. 避免使用 display: nonevisibility: hidden

这些方法可以确保内容对视觉用户隐藏,同时为屏幕阅读器用户提供必要的信息。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github