负责任地隐藏内容

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

我们已经多次介绍过在 CSS 中隐藏内容 的想法,最近的一篇文章是 Marko Ilic 的“比较在 CSS 中隐藏内容的各种方法”,它很好地比较了在不同情况下使用的不同技巧。Kitty Giraudel 在“负责任地隐藏内容” 中做了类似的事情,其中探讨了10 种方法——即使是这些方法,也可以说并不完全全面。

这是否意味着 CSS 混乱且难以理解?不。我觉得所有方法都是合乎逻辑的,都有良好的用例,并能带来良好的结果。请允许我进行一次假想的对话,来贯穿我的思考过程。

我需要完全隐藏这个东西。对所有人隐藏。

没问题,使用 display: none;

我需要隐藏这个东西,但仅对屏幕阅读器隐藏,而不是视觉上隐藏。(例如,对屏幕阅读器没有额外意义的图标,因为附近有一个可访问的标签。)

没问题,这就是 aria-hidden 属性的作用。

我需要隐藏这个东西,但仅视觉上隐藏,而不是对屏幕阅读器隐藏。(例如,非活动选项卡的内容。)

没问题,使用 .sr-only 类。这使得它可以访问,但视觉上隐藏它,直到您删除该类。

糟糕,我实际上想视觉上隐藏这个东西,但我仍然希望它占用物理空间,而不是折叠。(例如,假设一个按钮有一个加载微调器图标,该图标仅在执行操作时才需要。按钮的大小应始终考虑该图标的大小,而不仅仅是在该图标可见时。这样,当该图标出现和消失时,就不会出现布局偏移。)

没问题,使用 transform: scale(0),这将视觉上折叠它,但原始空间将保留,并且会使它对屏幕阅读器可访问。

哦,不错,我想我也可以对转换进行 transition。但实际上,那个 transition 不适合我的网站。我只是想要一些可以淡出和淡入的东西。

opacity 属性是可转换的,因此在淡入淡出时转换 0 到 1 之间的值。好消息是 visibility 也是可转换的。在淡出时,使用 visibility: hidden,在淡入时,使用 visibility: visible 来隐藏和显示屏幕阅读器中的内容。


这并不完全全面,但我发现它涵盖了 95% 的隐藏情况。