change proposal for <main>: possible validation warning heuristic for misuse

Despite the <main> element extension specification being approved "with no objections and ample support" by the HTML Working Group [1], some arguments have been resurrected on a few lists recently, including webkit-dev [2].

While I don't share Ian's concern that misuse or misunderstanding of the element will make <main> "pointless", he has a valid concern that there is some potential for incorrect use. I personally feel that the penalty for such misuse is negligible [3], but we should do everything we can to avoid misunderstanding and warn authors about misuse, so I'm proposing a heuristic to trigger author validation warning upon detection of probable misuse, thereby making the spec for <main> a little bit stronger, and address the primary case that I believe is the cause of Ian's concern. 

I'll begin by defining what I consider "misuse" of the <main> element.

I'd consider it misuse of <main> to be used as a direct replacement for a wrapper element (like <div id="body">) that contains all standard page contents, including the navigation and footer, in addition to the actual primary content or 'main' content.

Misuse Example:
<body>
    <main>
        <header></header>
        <nav> … </nav>
        <div id="primarycontent"> this is the real 'main' content </div>
        <footer> … </footer>
    </main>
    <!-- with possibly some appended dialogs or panels out here -->
</body>


However, there are some times when it would be valid to use <main> as the wrapper element with no other programmatically discernible landmarks. 

Valid uses of <main> Example 1, with no other discernible landmarks: 
<body> <!-- example: this may be iframe contents -->
    <main> this is the real 'main' content </main>
</body>
<body>
    <main> this is the real 'main' content </main> <!-- not a misuse of main, despite the follow misuse of footer -->
    <div id="footer"> … </div> <!-- this should be a footer element, but that info is not programmatically determinable -->
</body>


Likewise, there are times when it's valid to nest landmarks, so we should not trigger a warning for something as simple as a <nav> element inside <main>:

Valid use of <main> Example 2, with nested landmarks: 
<body>
    <header></header>
    <nav> … </nav>
    <main>
        <div id="primarycontent"> this is the real 'main' content </div>
        <nav> secondary navigation inside main </nav>
    </main>
    <footer> … </footer>
</body>


I think, however, we can safely trigger a warning for the error case mentioned above, because there are no discernible landmarks outside main element, but there are one or more discernible landmarks inside main.

Misuse Example:
<body>
    <!-- no discernible landmarks outside main -->
    <main>
        <!-- but multiple discernible landmarks inside main -->
        <header></header>  
        <nav> … </nav>
        <div id="primarycontent"> this is the real 'main' content </div>
        <footer> … </footer>
    </main>
</body>


Explicit ARIA landmarks outside the main element should probably also prevent the heuristic from triggering a warning:

Valid use example for main (misuse of header/footer though):
<body>
    <div id="header" role="banner"> … </div> <!-- bypasses the warning because of the explicit aria landmark role outside main -->
    <main>
        <nav> … </nav>
        <div id="primarycontent"> this is the real 'main' content </div>
    </main>
    <div id="footer" role="contentinfo"> … </div> <!-- bypasses the warning because of the explicit aria landmark role outside main -->
</body>


I have not yet proposed any specific wording for what will probably end up as an RFC-2119 author "SHOULD NOT" requirement, because it deserves more discussion first.

Thoughts?
James


1. HTML WG Approval of <main> extension spec: http://lists.w3.org/Archives/Public/public-html/2012Nov/0232.html

2. Webkit dev thread: http://lists.webkit.org/pipermail/webkit-dev/2012-November/023013.html

3. The penalty for misuse of <main>, with regards to landmark navigation, is about the same penalty that users pay when authors hierarchically structure headings incorrectly. (e.g. h1, then h3, without an h2 in between). Multiple non-linear navigation mechanisms still work, but there is a minor loss of clarity in a screen reader user's ability to grok the page structure at a high level. In my opinion, this cost is relatively trivial compared to the potential wins we get by adding the accessible landmark role to the default semantics of the <main> element when used correctly.

Received on Friday, 30 November 2012 22:42:07 UTC