hidden属性是HTML5语义化隐藏机制,仅声明内容当前不可感知,浏览器自动应用display: none但核心在于可访问性控制;它不可动画、不占布局、屏幕阅读器跳过,适用模态框未打开等场景,区别于aria-hidden仅影响无障碍树。
Hidden属性影响的是语义可见性与可访问性,并不负责控制CSS显示状态。 设置hidden会让元素从渲染树中移除(视觉效果类似display: none),但其设计核心并非控制样式,而是向浏览器及辅助技术声明此内容当前不应被用户感知,属于语义隐藏。
HTML5 中 hidden 属于布尔属性,只要存在就会生效。它向浏览器表明,这个元素在当前上下文中逻辑上不可见,既不应获得焦点,也不应由屏幕阅读器朗读。这与 CSS 的 visibility: hidden(依旧占用布局空间,也仍能获得焦点)或 opacity: 0(虽然完全透明,但交互仍然有效)。
[hidden] 应用 display: none(这是规范要求),不过它只是实现方式,并非设计目的hidden 元素;即使它意外得到了焦点,也不会被读取,而现代浏览器通常还会阻止它获得焦点element.hidden 属性支持读取和写入,修改该值等同于添加或移除 hidden 属性折叠面板、动画淡入等需求属于视觉呈现切换,处理时应把 CSS 类作为优先选择并配合 display、opacity 或 transform。原因如下:
hidden 它无法实现过渡或动画,因为只有“存在”和“不存在”两种状态,不具备中间过程hidden 功能会被屏幕阅读器用户理解为“消失”,而不是“暂不可用”:例如加载中隐藏按钮,又不提供加载状态提示,这可能使可访问性不符合预期hidden 用于明确声明初始状态;CSS 类则更适合处理运行时的动态行为无需让用户感知,并且内容处于“尚未就绪”或确属“当前无意义”状态时,hidden 就是语义上最准确的表达:
立即学习“前端免费学习笔记(深入)”;
<dialog hidden>…</dialog>
<p hidden class="error">邮箱格式不正确</p>
<div hidden id="mobile-nav">…</div>
hidden 会同时从视觉、可访问性和焦点层面隐藏,而 aria-hidden="true" 只会影响可访问性树,不会改变视觉渲染:
<button hidden>删除</button> → 按钮彻底不可见、无法聚焦,也不会被朗读<button aria-hidden="true">删除</button> → 屏幕阅读器会忽略按钮(常用于装饰性图标),但它在视觉上仍存在,也能接受点击和聚焦hidden 会更加简洁可靠