试一试
<p>
This content should be read right now, as it is important. I am so glad you
are able to find it!
</p>
<p hidden>
This content is not relevant to this page right now, so should not be seen.
Nothing to see here. Nada.
</p>
p {
background: #ffe8d4;
border: 1px solid #f69d3c;
padding: 5px;
border-radius: 5px;
}
描述
hidden 属性表示元素的内容不应呈现给用户。该属性接受以下任何一个值:
- 关键字
hidden - 关键字
until-found - 空字符串或无值
无效的 hidden 属性值也会使元素处于*隐藏*状态。因此,以下所有元素都处于隐藏状态:
<span hidden>I'm hidden</span>
<span hidden="">I'm also hidden</span>
<span hidden="hidden">I'm hidden too!</span>
<span hidden="bananas">I'm equally as hidden!</span>
关键字 until-found 将元素设置为直到找到才显示状态
<span hidden="until-found">I'm hidden until found</span>
隐藏状态
隐藏状态表示元素当前与页面不相关,或者它被用于声明内容以便页面其他部分重用,并且不应直接呈现给用户。浏览器不会渲染处于隐藏状态的元素。
Web 浏览器可能会使用 display: none 来实现隐藏状态,在这种情况下,元素将不参与页面布局。此外,更改隐藏元素的 CSS display 属性的值将覆盖隐藏状态。例如,即使存在 hidden 属性,样式为 display: block 的元素也将显示。
直到找到才显示状态
在直到找到才显示状态下,元素是隐藏的,但其内容可通过浏览器的“页面查找”功能或片段导航进行访问。当这些功能导致滚动到*直到找到才显示*子树中的元素时,浏览器将:
- 在隐藏元素上触发
beforematch事件 - 从元素中移除
hidden属性 - 滚动到元素
这允许您折叠内容部分,同时仍然允许用户通过搜索或导航找到它。
浏览器通常使用 content-visibility: hidden 来实现*直到找到才显示*。这意味着,与处于隐藏状态的元素不同,处于*直到找到才显示*状态的元素会生成盒子,并且:
- 它们参与页面布局
- 它们的边距、边框、内边距和背景都会被渲染
此外,元素需要受到 布局隔离 的影响才能被揭示。如果处于*直到找到才显示*状态的元素其 display 值为 none、contents 或 inline,则该元素将不会通过“页面查找”或片段导航而被揭示。
用法说明
hidden 属性不得用于仅从一种呈现方式中隐藏内容。如果某物被标记为隐藏,它将从所有呈现方式中隐藏,包括(例如)屏幕阅读器。
除非使用 hidden="until-found",否则不应从可见元素链接到隐藏元素。例如,使用 href 属性链接到具有 hidden 属性的部分是不正确的。如果内容不适用或不相关,则不应链接。
然而,可以使用 ARIA aria-describedby 属性来引用隐藏的描述。虽然隐藏描述意味着它们本身没有用处,但当以这种方式引用时,它们可以提供有用的上下文。
同样,具有 hidden 属性的 canvas 元素可以被脚本图形引擎用作离屏缓冲区,并且表单控件可以通过其 form 属性引用隐藏的表单元素。
最后,请注意,隐藏元素的后代元素仍然处于活动状态,这意味着脚本元素仍然可以执行,表单元素仍然可以提交。
<div hidden>
<script>
console.warn("Boo! I'm hidden *and* running!");
</script>
</div>
示例
使用 hidden 属性
在此示例中,我们有三个 <div> 元素。第一个和第三个没有隐藏,而第二个具有 hidden 属性。请注意,隐藏元素没有生成的盒子。
<div>I'm not hidden</div>
<div hidden>I'm hiding!</div>
<div>I'm not hidden, either</div>
使用 until-found 值
在此示例中,我们有三个 <div> 元素。第一个和第三个是可见的,而第二个具有 hidden="until-found" 和 id="until-found-box" 属性。id 为 until-found-box 的元素具有红色虚线边框和灰色背景。
我们还有一个链接,它指向 "until-found-box" 片段,以及一个 JavaScript 脚本,它监听该隐藏元素上触发的 beforematch 事件。事件处理程序更改盒子的文本内容,以说明当即将移除直到找到才显示状态时可能发生的操作。
HTML
<a href="#until-found-box">Go to hidden content</a>
<div>I'm not hidden</div>
<div id="until-found-box" hidden="until-found">Hidden until found</div>
<div>I'm hidden</div>
CSS
div {
height: 40px;
width: 300px;
border: 5px dashed black;
margin: 1rem 0;
padding: 1rem;
font-size: 2rem;
}
div#until-found-box {
color: red;
border: 5px dotted red;
background-color: lightgray;
}
JavaScript
const untilFound = document.querySelector("#until-found-box");
untilFound.addEventListener(
"beforematch",
() => (untilFound.textContent = "I've been revealed!"),
);
结果
点击“转到隐藏内容”链接会导航到*直到找到才显示*元素。beforematch 事件触发,文本内容更新,元素变为可见。请注意,尽管元素的内容被隐藏,但元素仍然有一个生成的盒子,占据布局空间,并且背景和边框都会被渲染。
要再次运行示例,请点击“重置”。
规范
| 规范 |
|---|
| HTML # the-hidden-attribute |
浏览器兼容性
加载中…
另见
HTMLElement.hidden- 所有全局属性
aria-hidden属性beforematch事件