Предупреждение о валидации w3c: статья не имеет заголовка

The Web Is The Old Black спросил: 12 мая 2018 в 04:40 в: html5

У меня есть страница, содержащая только следующий HTML-код:

<article>
    <nav>
        <a href="test.html" rel="parent">Back</a>
    </nav>
    <header>
        <h2>Test</h2>
    </header>
    <p>Test</p>
</article>

Почему я получаю это предупреждение, когда пытаюсь его проверить?

Предупреждение: статья не содержит заголовка. Рассмотрите возможность использования элементов h2 - h6 для добавления идентифицирующих заголовков ко всем статьям.

Из строки 10, столбец 2; к строке 10, столбец 10

<body>↩↩↩ <article> ↩ <na

1 ответ

unor ответил: 14 мая 2018 в 06:49

Причина в том, что элемент содержимого секционирования (nav в вашем случае) поступает перед элементом содержимого заголовка (h2 в вашем случае):

<!-- A -->
<article>
  <nav></nav>
  <h2>Test</h2>
</article>

Если вы их переключаете, валидатор не сообщает о предупреждении:

<!-- B -->
<article>
  <h2>Test</h2>
  <nav></nav>
</article>

См. часть схемы документа, которую генерируют эти фрагменты:

<!-- A -->- article (no heading)
-- nav (no heading)
- "Test" (h2 of an implied section, on the same level as the article)
<!-- B -->- "Test" (h2 of article)
-- nav (no heading)

Справочная информация

Создание схемы описывает алгоритм. Я думаю, что соответствующий шаг - это один (но я не привык к чтению таких алгоритмов, поэтому лучше возьмите его с солью):

При вводе элемента содержимого секционирования
Выполните следующие шаги:

  1. Если current outline owner не является нулевым, запустите эти подшаги:

    1. Если current section не имеет заголовка, создайте подразумеваемый заголовок и пусть это будет заголовок для current section.

Насколько я понимаю, это то, что происходит с примером "A":

  1. Алгоритм входит в элемент содержимого секционирования (article).
  2. До он находит заголовок (h2), он находит другой элемент содержимого секции (nav) и сразу вводит его, поэтому приведенный шаг.
  3. article по-прежнему является current outline owner и current section, поэтому применяются подшаги (потому что current outline owner не является нулевым).
  4. Поскольку current section (→ article) не имеет заголовка (он не нашел h2 пока), им . Таким образом, article получил заголовок, но это не ваш h2.

Я думаю, что спецификация идеально описала бы это также в текст (я тоже был этому удивлен).

Соответствующая запись в трекеру проверки валидатора: предупреждение, выданное, когда заголовки вложены в статью

The Web Is The Old Black ответил: 12 мая 2018 в 09:08
Спасибо за ответ. Ты прав. Но мне действительно интересно узнать, где это правило определено в спецификациях. Я подозреваю, что валидатор w3c добавил в этом случае свои ограничения. Это правило не имеет смысла, так как элемент <nav> не является частью содержимого, а является мета-содержимым. Что произойдет, если вместо <nav> я разместил там элемент <aside> (т.е. то, что я хочу считать a-side ), это должно быть в основном проигнорировано)?
unor ответил: 14 мая 2018 в 06:50
@TheWebIsTheOldBlack: я обновил свой ответ с помощью моей интерпретации алгоритма (не уверен, что это правильно, хотя). - Что касается вашего второго вопроса: aside не имеет значения здесь, это также элемент содержимого секционирования (есть четыре: section, article, nav, aside).