hidden属性(HTML5)和display:none规则(CSS)有什么区别?


110

HTML5具有新的全局属性,hidden可用于隐藏内容。

<article hidden>
   <h2>Article #1</h2>
   <p>Lorem ipsum ...</p>
</article>

CSS具有display:none规则,也可以用来隐藏内容。

article { display:none; }

在视觉上,它们是相同的。在语义上有什么区别?计算上?

在何时使用一种或另一种时,我应该考虑哪些准则?

TIA。

编辑:根据@newtron的响应(如下),我进行了更多搜索。该hidden属性去年受到激烈争论,并且(显然)几乎没有使其成为HTML5规范。有人认为这是多余的,没有目的。据我所知,最终的评估结果是:如果我仅针对Web浏览器,则没有区别。(甚至有一个页面断言,Web浏览器曾经display:none用于实现hidden属性。)但是,如果我正在考虑可访问性(例如,也许我希望屏幕阅读器可以读取我的内容),则存在区别。CSS规则display:none可能会在网络浏览器中隐藏我的内容,但会使用相应的aria规则(例如,aria-hidden="false")可能会尝试阅读它。因此,我现在同意@newtron的答案是正确的,尽管可能(可以说)不像我想的那么清晰。感谢@newtron的帮助。


4
甚至不知道该hidden属性是否存在,但是肯定有个好问题,因为它似乎违反了结构/表示分离。
Waldheinz 2011年

对于尚未阅读此属性的HTML5规范的人: w3.org/TR/html5/editing.html#the-hidden-attribute
james.garriss 2011年


@Yigit已经阅读了。已有一年多的历史了。并且隐藏仍然在规范中。这向我表明,该提案没有赢得任何信奉者。
james.garriss 2011年

感谢您的修改。对不起,还不清楚!您在上面添加的信息很棒。+1
newtron

Answers:


63

关键的区别似乎在于,hidden无论呈现形式如何,元素总是被隐藏:

hidden属性不得用于隐藏可以在其他演示文稿中合理显示的内容。例如,在选项卡式对话框中使用“隐藏”来隐藏面板是不正确的,因为选项卡式界面只是一种溢出演示文稿—同样,也可以只在一个大页面中用滚动条显示所有表单控件。同样,使用此属性仅从一个演示文稿中隐藏内容也是不正确的-如果某些内容被标记为隐藏,则它对于所有演示文稿(包括屏幕阅读器)都是隐藏的。

http://dev.w3.org/html5/spec/Overview.html#the-hidden-attribute

由于CSS可以针对不同的媒体/演示类型,display: none因此将取决于给定的演示。例如display: none,在桌面浏览器而非移动浏览器中查看时,某些元素可能具有。或者,在视觉上隐藏起来,但仍可供屏幕阅读器使用。


1
那么,您是说隐藏的王牌显示了吗?如果是这样,那么您是说它的目的仅仅是覆盖演示文稿。嗯
james.garriss 2011年

1
我的猜测是,是隐藏的王牌显示。但是,我实际上还没有尝试过。如果css可以覆盖它,那似乎毫无意义。
newtron

2
语义上的胜利。如果不应该存在,请从文档级别的文档流中将其删除。如果它应该是文档流程的一部分,但是在某些情况下,您不希望它成为视觉体验的一部分,那么请在修饰层进行处理。请记住,某些代理会尝试解析CSS,如果他们确定某些东西不会被发现,那么它们根本不会输出。我认为这是异常行为,但可以帮助您了解。

6
根据developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…的说法,这里的一些评论(@ james-garris,@ newtron)相关,显示出的王牌实际上是隐藏的-请转到图:-)
JurkoGospodnetić16年

2
我在MDN页面上发现了隐藏属性的一个重要区别:“使用隐藏属性更改元素上CSS显示属性的值会覆盖该行为。例如,即使隐藏属性存在,样式为display:flex的元素也会显示。”
mohsinulhaq
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.