2014-02-11 30 views
4

在下面的標記中,我爲了表示的目的而圍繞<main>元素打包。ARIA角色是由子孫繼承的嗎?

<div id="main-wrapper" role="presentation"> 
    <main id="main" role="main"> 
    <h1>Title</h1> 
    <p>Lorem ipsum, dolor sit amet.</p> 
    </main> 
</div> 

但是我不確定ARIA roles是否被子孫繼承。如果<main>元素被看作是表示性的,因爲它周圍的包裝具有role="presentation",這將是個問題。

這裏ARIA角色是否正確使用? ARIA角色是如何繼承的?

+1

您的主包裝默認情況下是不帶內容的(具有沒有特定語義的div),並且在技術上不可聚焦......因此按照您的示例,我沒有看到需要使用role =「介紹」。 – hexalys

+0

@hexalys謝謝,我這樣看。那麼你是說ARIA角色只適用於元素的直接內容(如果有)而不適用於嵌套元素? – marcvangend

回答

3

它可能取決於上下文和角色。規格和示例如下: http://www.w3.org/TR/wai-aria/roles#presentation給出了每個角色的「繼承狀態和屬性」列表以及role="presentation"的很好示例。

對於你的情況,與role="presentation"包裝元素將有隱含本地語義刪除所有其子元素。 role="main"重寫「演示文稿」,恢復語義的<main>。但是,這也意味着你將不得不重寫內<main>語義元素各自的ARIA角色,這將成爲在<main>

但最重要的背景非常複雜,role="presentation"應僅適用於元素與隱含作用<span><div>沒有隱含的角色用一個例子在編輯器中的草案解釋說:

呈現角色是有隱含的本土 語義元素上使用,這意味着是 的默認訪問性API的作用元件

<!-- 3. This role declaration is redundant. --> 
<span role="presentation"> Sample Content </span> 

基本上不會應用於role="presentation"到元素沒有隱式的本地語義,除非使用特別如WRA pper到刪除其後代的隱式本地語義。