HTML的“隐藏”属性和“隐藏的aria”属性有什么区别?


Answers:


363

ARIA(可访问的富Internet应用程序)定义了一种使残障人士更容易访问Web内容和Web应用程序的方法。

hidden属性是HTML5中的新增属性,它告诉浏览器不要显示该元素。该aria-hidden属性告诉屏幕阅读器是否应该忽略该元素。请查看w3文档以获取更多详细信息:

https://www.w3.org/WAI/PF/aria/states_and_properties#aria-hidden

使用这些标准可以使残疾人更容易使用网络。


4
那么,如果您仅使用hidden属性,屏幕阅读器仍会阅读?
Daniel Kobe 2015年

39
正确。hidden对所有人都意味着隐藏。aria-hidden对屏幕阅读器和类似工具隐藏。例如,这对于纯粹用于格式化且不包含实际内容的组件很有用。
AndreiBârsan2015年

23
@AndreiBârsan@DanielKobe我认为Andrei的意思是“不正确”。(他的其余评论是事实。)hidden应防止屏幕阅读器访问标签的内容。
eenblam '16

6
您的回答aria-hidden是正确的;但是,您没有说hidden要与区别aria-hidden。不幸的是,这是最佳答案。请更全面地回答。
Pegues

1
您的答案说明了属性的作用,但没有解释其含义。您没有提到元素的可访问性树或时间相关性。阅读规格以获得更多信息。[HTML 5.2ARIA 1.1 ]
chharvey

40

隐藏属性是布尔属性(真/假)。在元素上使用此属性时,它将删除与该元素的所有相关性。当用户查看html页面时,带有hidden属性的元素应该不可见。

例:

    <p hidden>You can't see this</p>

隐藏Aria的属性表示该元素及其所有后代在浏览器中仍然可见,但对可访问性工具(如屏幕阅读器)将不可见。

例:

    <p aria-hidden="true">You can't see this</p>

看看这个。它应该回答您所有的问题。

注意: ARIA代表可访问的富Internet应用程序

资料来源: Paciello集团


25
这不是完全正确的(即使官方文档在这里也有些朦胧)。具有的元素aria-hidden="true"在浏览器中仍然可见,但对辅助功能工具(如屏幕阅读器)将不可见。
AndreiBârsan2015年

aria-hidden用于通过可访问性工具向使用您网站的用户隐藏元素。
路加·布朗

13

语义差异

根据HTML 5.2

在元素上指定时,[ hiddenattribute]表示该元素与页面的当前状态尚不相关,或不再与该页面的当前状态直接相关,或者该元素用于声明内容以供页面的其他部分重用,例如:反对被用户直接访问。

例如,其中一些面板未暴露的选项卡列表,或用户登录后消失的登录屏幕。我想称这些为“暂时相关”,即它们基于时间相关。

另一方面,ARIA 1.1说:

[ aria-hidden状态]指示元素是否公开给可访问性API。

换句话说,具有辅助功能的树aria-hidden="true"辅助功能树中删除了元素,并且具有元素aria-hidden="false"肯定会暴露在树中。没有aria-hidden属性的元素处于“未定义(默认)”状态,这意味着用户代理应根据其呈现方式将其公开给树。例如,如果用户代理的文本颜色与背景颜色匹配,则可以决定将其删除。

现在让我们比较语义。对于尚未“暂时相关”但将来可能变得相关的元素,可以使用hidden,但不宜 使用aria-hidden(在这种情况下,您将使用动态脚本删除该hidden属性)。相反,在始终相关但不想使可访问性API混乱的元素上使用aria-hidden,但不宜使用hidden;这样的元素可能包括“视觉风格”,例如图标和/或图像,对于用户而言并非必需。

有效差异

语义有可预见的效果在浏览器/用户代理。我做出区分的原因是建议使用用户代理行为,但规范不要求这样做。

hidden属性应在所有演示文稿(包括打印机和屏幕阅读器)中隐藏一个元素(假设这些设备符合HTML规范)。如果要从可访问性树可视媒体中删除元素,则可以解决问题hidden。但是,请勿hidden 仅因为需要此效果而使用。首先问自己在hidden语义上是否正确(请参见上文)。如果hidden在语义上不正确,但是您仍想在视觉上隐藏该元素,则可以使用其他技术,例如CSS。

元素aria-hidden="true"不会暴露在可访问性树中,因此,例如,屏幕阅读器不会宣布它们。应谨慎使用此技术,因为它将为不同的用户提供不同的体验:可访问的用户代理不会宣布/呈现它们,但仍将它们呈现在可视代理上。如果做得正确,这可能是一件好事,但有可能被滥用。

句法差异

最后,两个属性在语法上有所不同。

hidden是一个布尔属性,意味着如果该属性存在,则为true(不管它可能具有什么值),而如果该属性不存在,则为false。对于真实情况,最佳实践是完全不使用任何值(<div hidden>...</div>),或使用空字符串值(<div hidden="">...</div>)。我建议这样做,hidden="true"因为有人在读/更新您的代码可能会推断出hidden="false"相反的效果,这是不正确的。

aria-hidden相比之下,是枚举属性,允许使用有限的值列表之一。如果aria-hidden存在该属性,则其值必须为"true""false"。如果要使用“未定义(默认)”状态,请完全删除该属性。


进一步阅读:https : //github.com/chharvey/chharvey.github.io/wiki/Hidden-Content


1
Paciello Group在2012年发表的这篇文章说:“在任何支持aria-hidden的浏览器中均未映射aria-hidden = false,因此其使用没有任何意义,或者换句话说,与不存在它具有相同的含义。” 不确定是否仍然如此,但请注意。我想将我的a11y视图状态与CSS分开描述,但是不确定使用aria隐藏的视图是否可行。 developer.paciellogroup.com/blog/2012/05/…–
RobW

-1

将aria-hidden设置为false并在element.show()上切换对我有用。

例如

<span aria-hidden="true">aria text</span>

$(span).attr('aria-hidden', 'false');
$(span).show();

当躲起来

$(span).attr('aria-hidden', 'true');
$(span).hide();
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.