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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6708247/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-29 09:35:10  来源:igfitidea点击:

What is the difference between the hidden attribute (HTML5) and the display:none rule (CSS)?

csshtmlvisibility

提问by james.garriss

HTML5 has a new global attribute, hidden, which can be used to hide content.

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

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

CSS has the display:nonerule, which can also be used to hide content.

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

article { display:none; }

Visually, they are identical. What is the difference semantically? Computationally?

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

What guidelines should I consider on when to use one or the other?

关于何时使用其中之一,我应该考虑哪些准则?

TIA.

TIA。

EDIT: Based on @newtron's responses (below), I did more searching. The hiddenattribute was hotly contested last year and (apparently) barely made it into the HTML5 spec. Some argued it was redundant and had no purpose. From what I can tell, the final evaluation is this: If I'm targeting only web browsers, there is no difference. (One page even asserted that web browsers used display:noneto implement the hidden attribute.) But if I'm considering accessibility (e.g., perhaps I expect my content to be read by screen-readers), then there is a difference. The CSS rule display:nonemight hide my content from web browsers, but a corresponding aria rule (e.g., aria-hidden="false") might try to read it. Thus, I now agree that @newtron's answer is correct, though perhaps (arguably) not as clear as I might like. Thanks @newtron for your help.

编辑:根据@newtron 的回复(如下),我进行了更多搜索。该hidden属性在去年引起了激烈争论,并且(显然)几乎没有进入 HTML5 规范。有些人认为这是多余的,没有目的。据我所知,最终评估是这样的:如果我只针对 Web 浏览器,则没有区别。(有一页甚至断言 Web 浏览器过去常常display:none实现隐藏属性。)但如果我考虑可访问性(例如,也许我希望我的内容可以被屏幕阅读器阅读),那么就会有所不同。CSS 规则display:none可能会在 Web 浏览器中隐藏我的内容,但相应的 aria 规则(例如,aria-hidden="false") 可能会尝试阅读它。因此,我现在同意@newtron 的答案是正确的,尽管可能(可以说)没有我想要的那么清楚。感谢@newtron 的帮助。

采纳答案by newtron

The key difference seems to be that hiddenelements are always hidden regardless of the presentation:

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

The hidden attribute must not be used to hide content that could legitimately be shown in another presentation. For example, it is incorrect to use hidden to hide panels in a tabbed dialog, because the tabbed interface is merely a kind of overflow presentation — one could equally well just show all the form controls in one big page with a scrollbar. It is similarly incorrect to use this attribute to hide content just from one presentation — if something is marked hidden, it is hidden from all presentations, including, for instance, screen readers.

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

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

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

Since CSS can target different media/presentation types, display: nonewill be dependent on a given presentation. E.g. some elements might have display: nonewhen viewed in a desktop browser, but not a mobile browser. Or, be hidden visually but still available to a screen-reader.

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