Как правильно использовать h1 в HTML5 - PullRequest
75 голосов
/ 13 сентября 2011

Какой из следующих способов является правильным способом структурирования страницы:

1) h1 только в header

<header>
    <h1>Site title</h1>
    <nav>...</nav>
</header>
<section>
    <h2>Page title</h2>
</section>

Если я использую h1 исключительно внутри header в качестве заголовка сайта, каждая страница будет иметь одинаковое содержимое для тега h1. Это не кажется очень информативным.


2) h1 в header и section для заголовка сайта и страницы

<header>
    <h1>Site title</h1>
    <nav>...</nav>
</header>
<section>
    <h1>Page title</h1>
</section>

Я также видел примеры использования h1 более одного раза в тегах header и section. Однако не неправильно ли иметь два заголовка для одной и той же страницы? В этом примере показано несколько заголовков и тегов h1 http://orderedlist.com/resources/html-css/structural-tags-in-html5/


3) h1 только в section, подчеркивая заголовок страницы

<header>
    <p>Site title</p>
    <nav>...</nav>
</header>
<section>
    <h1>Page title</h1>
</section>

Наконец, W3 рекомендует использовать h1 в основном элементе section, значит ли это, что я не должен использовать его в элементе header?

Разделы могут содержать заголовки любого ранга, но авторы настоятельно рекомендуется либо использовать только элементы h1, либо использовать элементы соответствующий ранг уровня вложенности раздела.

Ответы [ 3 ]

57 голосов
/ 14 сентября 2011

Как я заявляю в своем комментарии, а вы цитируете в W3C, h1 - это заголовок, а не заголовок. Каждый элемент секционирования может иметь свои собственные элементы заголовка. Вы не можете думать о h1 только как о заголовке страницы, но как о заголовке этого конкретного раздела страницы. Как и на первой странице газеты, каждая статья может иметь собственный заголовок (или заголовок).

Вот хорошая статья на эту тему.

13 голосов
/ 15 августа 2014

Я бы рекомендовал использовать h1 во всем.Забудьте о h2 - h6.

. В HTML4 6 уровней заголовков использовались для неявного определения разделов.Например,

<body>
<h1>This is a top-level heading</h1>
<p>some content here</p>
<h2>This is the heading of a subsection</h2>
<p>content in the subsection</p>
<h2>Another subsection begins here</h2>
<p>content</p>
<h1>another top-level heading</h1>

Теперь с элементом section вы можете явно определять разделы, а не полагаться на неявные разделы, созданные вашим браузером, которые читают разные уровни заголовков.Браузер, снабженный HTML5, знает, что все, что находится внутри элемента section, «понижается» на один уровень в схеме документа.Так, например, section > h1 семантически рассматривается как h2, section > section > h1 подобен h3 и т. Д.

Что сбивает с толку, так это то, что браузеры STILL создают неявные разделына основе уровней заголовков h2 - h6, но элементы h2 - h6 не меняют своих стилей.Это означает, что h2, независимо от того, во сколько разделов он вложен, все равно будет выглядеть как h2 (по крайней мере, в Webkit).Это может сбить с толку, если ваш h2 должен быть, скажем, заголовком уровня 4.

Смешивание h2 - h6 с section приводит к очень неожиданным результатам.Просто придерживайтесь только h1 и используйте section для создания явных разделов.

<body>
<!-- optional --><header>
    <h1>This is a top-level heading</h1>
    <p>you may optionally wrap this p and the h1 above it inside a header element.
     the header element doesn't affect the doc outline.
     the section element does, however.</p>
<!-- optional --></header>
<section>
    <h1>even though this is an h1, the browser "treats it" like an h2
        because it's inside an explicit section.
        (it got demoted).</h1>
    <p>content in the subsection</p>
</section>
<section>
    <h1>Another subsection begins here, also treated like an h2</h1>
    <p>content</p>
    <h2>This is misleading. it is semantically treated like an h3.</h2>
    <p>that is because after an h1, an h2 is demoted one level. the h1 above is
        already a "level 2" heading, so this h2 becomes a "level 3" heading.</p>
    <section>
        <h1>just do this instead.</h1>
        <p>it is treated like an h3 because it's in a section within a section.
            (It got demoted twice.)</p>
    </section>
</section>
<h1>another top-level heading</h1>

Кроме того , вы можете использовать элемент <main> .Этот элемент содержит только информацию, специфичную для данной страницы, и не должен включать в себя контент, повторяющийся по всему сайту, такой как навигационные ссылки, верхние и нижние колонтитулы сайта и т. Д. Может присутствовать только один <main> присутствующий элементв <body>.Таким образом, ваше решение может быть таким простым:

<header>
    <h1>Site title</h1>
    <nav>...</nav>
</header>
<main>
    <h1>Page title</h1>
    <p>page content</p>
</main>
4 голосов
/ 10 октября 2017

Однако не забывайте о проблемах доступности. Согласно MDN , «в настоящее время нет известных реализаций алгоритма схемы в графических браузерах или пользовательских агентах вспомогательных технологий». Это означает, что программа чтения с экрана может не определить относительную важность разделов, имеющих только <h1>. Может потребоваться больше уровней заголовка, таких как <h2> и <h3>.

...