Семантика HTML5 для нескольких элементов навигации?

Я изучаю HTML5, и мне дали проект по преобразованию CSS Zen Gardens в семантическую версию HTML5. Я смог легко преобразовать большую часть этого, однако ссылки / навигация внизу доставляют мне некоторые проблемы.
Как лучше преобразовать это/обработать несколько навигаций?

<div id="linkList2">
     <div id="lselect">
          <h3 class="select"><span>Select a Design:</span></h3>
          <ul>
          <!-- Links -->
          </ul>
     </div>
     <div id="larchives">
          <h3 class="archives"><span>Archives:</span></h3>
          <ul>
          <!-- Links -->
          </ul>
     </div>
     <div id="lresources">
          <h3 class="resources"><span>Resources:</span></h3>
          <ul>
          <!-- Links -->
          </ul>
     </div>
</div>

На данный момент я разрываюсь между мыслью, что linkList2 должен быть разделом, а каждый из дочерних элементов div должен быть элементом навигации, или что linkList2 должен быть навигацией, а дочерние элементы div — разделами.


person George-Intrigued    schedule 31.12.2012    source источник


Ответы (2)


Если вы сделаете linkList2 section, тогда ваша семантика будет выглядеть так: «вот навигация по этому разделу». Обратите внимание, что nav уже разделяет контент, поэтому обертывание его в section было бы несколько излишним.

Также обратите внимание, что спецификация говорит:

Не все группы ссылок на странице должны находиться в элементе навигации — этот элемент в первую очередь предназначен для разделов, состоящих из основных блоков навигации.

Нет необходимости помещать каждый набор ссылок в nav просто так. Я думаю, что ваш подход к созданию linkList2 в nav был бы лучшим, хотя я бы не слишком беспокоился о создании дочерних элементов section:

<nav id="linkList2">
     <div id="lselect">
          <h1 class="select"><span>Select a Design:</span></h1>
          <ul>
          <!-- Links -->
          </ul>
     </div>
     <div id="larchives">
          <h1 class="archives"><span>Archives:</span></h1>
          <ul>
          <!-- Links -->
          </ul>
     </div>
     <div id="lresources">
          <h1 class="resources"><span>Resources:</span></h1>
          <ul>
          <!-- Links -->
          </ul>
     </div>
</nav>

Как я уже упоминал выше, nav — это разделы контента, поэтому все заголовки должны быть действительно h1, поскольку все они являются заголовками самого высокого уровня в соответствующих разделах (я изменил их выше). Однако я думаю, что с практической точки зрения все еще допустимо оставлять их как h3, если в разметке им предшествуют заголовки h2 и h1.

Другой подход, который был бы хорош:

<div id="linkList2">
     <nav id="lselect">
          <h1 class="select"><span>Select a Design:</span></h1>
          <ul>
          <!-- Links -->
          </ul>
     </nav>
     <nav id="larchives">
          <h1 class="archives"><span>Archives:</span></h1>
          <ul>
          <!-- Links -->
          </ul>
     </nav>
     <nav id="lresources">
          <h1 class="resources"><span>Resources:</span></h1>
          <ul>
          <!-- Links -->
          </ul>
     </nav>
</div>

Как я упоминал ранее, не заворачивайте в section (или article), достаточно nav.

И последнее, поскольку ваш вопрос касается семантики. Я знаю, что вы работаете над разметкой CSS Zen Garden, поэтому смысл, вероятно, в том, чтобы элементы на вашей новой странице соответствовали всем старым, чтобы все таблицы стилей по-прежнему работали, но вы должны знать, что это не< /em> пример хорошей «семантической разметки». Вот некоторые вещи, о которых вы должны знать:

  • Эта разметка была создана в 2003 году, поэтому она никогда не станет отличным примером того, что мы в настоящее время считают хорошей семантической разметкой.
  • Разметка в CSS Zen Garden должна оставаться неизменной — это демонстрация CSS, а не HTML.
  • Потому что в 2003 IE6 был доминирующим браузером, и никто другой так далеко не продвинулся с В любом случае, в CSS3 эта разметка содержит множество ненужных дополнительных элементов, которые используются для стилизации. В частности, все элементы span в заголовках и (более вероятно) дочерние элементы div lselect, larchives и lresources.
  • Помимо отсутствия OOOCSS, эта разметка демонстрирует classitis — нет необходимости везде иметь несколько атрибутов id и class . Например, нет необходимости иметь как id из lselect, так и class из select, вместо этого вы можете просто использовать селектор #lselect h1.
  • Наконец, linkList2 семантически ужасное id. Он не входит в связанный список, и будет ли он вторым, зависит от всей остальной разметки. Используемые имена ids и class также являются частью семантической разметки.
person robertc    schedule 31.12.2012

Вы должны использовать HTML5-элемент <nav>, так как это не только наиболее семантический элемент для того, что вы хотите, но он также позволяет людям, использующим программы чтения с экрана, перемещаться по странице с помощью ориентиров (<nav> будет соответствовать ориентиру navigation).

Теперь, если на вашем веб-сайте есть несколько областей со ссылками (например, основная навигация и вторичная навигация), вы должны убедиться, что разные элементы <nav> помечены правильно. Это позволяет программам чтения с экрана правильно объявлять ориентиры (например, "Первичный, навигация", "Вторичный, навигация"), а не объявлять все как "навигация". ), что может сбивать с толку.

Чтобы пометить <nav> элементов, вы можете выполнить одно из следующих действий:

Вариант 1: Нет видимого текста на экране

Используйте aria-label для предоставления текстовых альтернатив элементам.

<nav aria-label=’primary’>
  <ul>
    ...List on links here...
  </ul>
</nav>
<nav aria-label=’secondary’>
  <ul>
    ...List on links here...
  </ul>
</nav>

Вариант 2: видимый текст на экране

Если на экране есть текст, по которому можно идентифицировать регион (например, "Похожий контент"), вы можете использовать aria-labelledby.

<nav aria-label="Site Menu">
  <ul>
    ...List on links here...
  </ul>
</nav>
<article>
  <h1>Title</h1>
  ...
  <nav aria-labelledby="id-1">
    <h2 id="id-1">
      Related Content
    </h2>
    <ul>
      ...List on links here...
    </ul>
  </nav>
</article>

Вот несколько ресурсов, которые объясняют это дальше:

person lucalanca    schedule 09.10.2019