Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should the <main> tag be inside <section> tag

Should <main> be considered something important to put inside <section>? Like having many articles with <main> 'article' in <section>? If not then how to use them together?

like image 204
Adam M. Avatar asked Dec 28 '13 14:12

Adam M.


2 Answers

From the HTML5 specs :

Authors must not include more than one main element in a document.

Authors must not include the main element as a descendant of an article, aside, footer, header or nav element.

The main element represents the main content of the body of a document or application.

So you should use main as a delimiter of your main content of your website and use article or sections inside main as a delimiter of context, here is a sample of how to handle main :

<main>

  <h1>Skateboards</h1>
  <p>The skateboard is the way cool kids get around</p>
  
  <article>
    <h2>Longboards</h2>
    <p>Longboards are a type of skateboard with a longer 
       wheelbase and larger, softer wheels.</p>
    <p>... </p>
    <p>... </p>
  </article>

  <article>
    <h2>Electric Skateboards</h2>
    <p>These no longer require the propelling of the skateboard
       by means of the feet; rather an electric motor propels the board, 
       fed by an electric battery.</p>
    <p>... </p>
    <p>... </p>
  </article>

</main>

NB : Authors are encouraged to use the article element instead of the section element when it would make sense to syndicate the contents of the element.

like image 167
Xavier Avatar answered Sep 20 '22 12:09

Xavier


Quoting the HTML5 Spec again:

Authors are advised to use ARIA role="main" attribute on the main element until user agents implement the required role mapping.

HTML5 doctor, though somewhat outdated, does provide a useful working example of the main element:

<main id="content" class="group" role="main">
    <!-- [...] -->
</main>

In short, the main element should be used whenever possible (but only once per page), ideally with the role attribute set to main as well. Alternatively, you can use role="main" on a sectioning element with the exact same results in terms of WAI-ARIA. Read more about WAI-ARIA roles in my post. For example:

<div class="main-content-column">
    <article role="main" id="content">
        [...]
    </article>
</div>

I don't see how assigning the role="main" to a section element could be semantic at all, but there may be use cases. Generally, you'll want to use the article tag to identify main content. The above snippet provides the exact same semantic information as <main role="main">, and some may opt to use this method over the recommended <main role="main">, as it can be seen as redundant (note that the reason we are advised to declare role="main" is largely due to spotty browser support in current user agents).

like image 25
user1429980 Avatar answered Sep 20 '22 12:09

user1429980