hidden类等价于display:none,彻底移除元素的渲染、布局及可访问性;需保留在DOM或支持动画时应改用opacity-0+pointer-events-none等组合方案。
hidden 类确实能一键让元素不可见,但它不是“隐藏”的万能解,用错场景反而会破坏可访问性或交互逻辑。
hidden会让元素彻底消失且无法聚焦hidden 实际等价于 display: none,它不仅移除视觉渲染,还从文档流和辅助技术(如屏幕阅读器)中完全剔除该元素。这意味着:
tabindex="0",也无法通过键盘 Tab 进入该元素getBoundingClientRect() 会返回全零值,offsetParent 为 null
transition)对 display 属性无效,所以不能用它做淡入淡出opacity-0 + pointer-events-none模拟“视觉隐藏”当需要保留 DOM 结构、维持焦点顺序或配合 CSS 动画时,应避免 hidden,改用组合类:
<div class="opacity-0 pointer-events-none transition-opacity duration-300"> 这个元素看得见但点不了,且支持渐隐</div>
注意:
立即学习“前端免费学习笔记(深入)”;
opacity-0 仅影响透明度,元素仍在文档流中,仍可被屏幕阅读器读取(除非额外加 aria-hidden="true")pointer-events-none 阻断鼠标/触控,但不阻断键盘焦点——若需禁用焦点,得加 tabindex="-1" 或 inert 属性transition-opacity,Tailwind 不会自动为 opacity 启用过渡Tailwind 的响应式隐藏类(如 sm:hidden、md:block)是独立生效的,不会“覆盖”或“取消”其他断点的设置。常见陷阱:
hidden sm:block md:hidden → 在 sm 下显示,在 md 及以上又隐藏,但 lg 没写,会沿用 md:hidden,不是“恢复显示”hidden sm:hidden md:block lg:hidden xl:hidden
max-md:hidden + md:block 组合,语义更清晰真正难的不是加不加 hidden,而是判断这个“隐藏”到底要不要保留在 DOM 中、要不要被 JS 操作、要不要被读屏软件感知——这些决定了你该选 display: none、visibility: hidden、opacity 还是 clip-path。