Html5 структура: HTML5 — Основы создания структуры документа

Содержание

HTML5 — Основы создания структуры документа

Статья, которая повествует об основах создания структуры документа в HTML 5.

Семантика и структура документа в HTML 5

Структура документа играет очень важную роль для понимания того, как устроена веб-страница. Она определяет то, как контенты организованы и взаимосвязаны между собой в документе, а также их относительную важность. Если воспользоваться схемой документа, то можно увидеть, как более просто стало просматривать информацию. Правильно спроектированная структура придаёт содержимому страницы смысл, делает его более лёгким для чтения, которое осуществляется поисковыми системами и другими пользовательскими агентами. На сайте, в котором правильно спроектирована структура, проще ориентироваться и находить нужную информацию.

Создание структуры документа до HTML 5

Перед изучением процесса создания структуры документа в HTML 5, желательно познакомиться с тем, как это осуществлялось в предыдущей версии языка и с какими проблемами веб-разработчику при этом приходилось сталкиваться.

Как образуется структура документа в HTML 4

Создание структуры документа в HTML 4 осуществляется с помощью 6 элементов (h2, h3, h4, h5, h5, h6). Эти элементы, при их размещении на странице, создают неявные разделы. Данные разделы называются неявными, потому что автор их в документе явно не создаёт. Они образуются автоматически, как только user agent встречает один из этих элементов в документе. Впоследствии из всех созданных user agent-ом разделов образуется структура документа.

Проблемы при реализации структуры документа

Модель структуры документа, использованная в HTML 4, имеет существенные ограничения, которые связаны с тем, что автору доступны для её создания всего 6 элементов h2, h3, h4, h5, h5 и h6. С помощью этих элементов веб-разработчик не может спроектировать структуру документа, которая одновременно обеспечивала бы логическую взаимосвязь между разделами и отвечала критериям SEO.

Более подробно познакомиться с процессом создания структуры документа в HTML 4 и с проблемами при её реализации можно в следующей статье.

Создание структуры документа в HTML 5

Стратегия создания структуры документа в HTML5 значительно изменилась. Теперь она не определяется только одними заголовками, т.к. это всегда для большинства веб-разработчиков выглядело как-то нелепо. Заголовки позволяют определить структуру документа, но они не группируют контент. До HTML 5 авторы группировали контент с помощью элементов div, а затем использовали атрибуты классов или id атрибуты для того, чтобы присвоить этим разделам более семантически верное значение. К счастью в HTML5 появилась новая группа элементов sectioning, которые позволяют авторам создавать описание (структуру) документа. К этой группе относятся элементы article, aside, nav и section. Их основное назначение сделать код HTML более семантическим, добавить в него смысл с помощью разметки.

Элементы, предназначенные для создания структуры в HTML 5

Для создания структуры документа в HTML 5 используются заголовочные элементы (h2, h3, h4, h5, h5 и h6) и элементы nav, aside, section и article из группы sectioning. Данные элементы в отличие от заголовков предназначены для создания явных разделов и установления этим разделам некоторого смысла.

Процесс создания структуры документа в HTML5

Для того чтобы было более просто понять основные принципы структурирования документа в HTML 5 будет считать, что элементы body, nav, aside, section и article создают секции (явные разделы), а элементы h2, h3, h4, h5, h5 и h6 — обычные разделы (неявные разделы).

Процесс разработки структуры документа рассмотрим посредством пошаговых инструкций.

В HTML 5 создание структуры документа начинается с элемента body. Данный элемент создаёт основную секцию (раздел на уровне документа).


<body>
</body>

--> Вышеприведённый пример будет создавть следующую структуру документа:
[document] Untitled

После этого обычно переходят к созданию секций внутри body (основной секции). Например, создадим секции nav, section и aside. Эти секции будут являться дочерними по отношению к body.


<body>
  <nav></nav>
  <section></section>
  <aside></aside>
</body>

--> Вышеприведённый пример будет создавать следующую структуру документа:
[document] Untitled
  [nav] Untitled
  [section] Untitled
  [aside] Untitled

Каждая из секций (nav, aside, section, article) в свою очередь тоже может содержать секции. Таким образом, в HTML 5 получается структура документа. Т.е. одни секции вкладываются в другие. Секции, которые расположены непосредственно в body, имеют 2 уровень. А секции, которые расположены непосредственно в секциях 2 уровня будут уже иметь 3 уровень и т.д.

Например, создадим в section 3 секции article.


<body>
  <nav></nav>
  <section>
    <article></article>
    <article></article>
    <article></article>
  </section>
  <aside></aside>
</body>

--> Вышеприведённый пример будет создавать следующую структуру документа:
[document] Untitled
  [nav] Untitled
  [section] Untitled
     [article] Untitled
     [article] Untitled
     [article] Untitled
  [aside] Untitled

Элементы h2, h3, h4, h5, h5 и h6 в HTML5 применяются для указания названия секции (т.е. выступают в качестве заголовка секции) и для создания неявных разделов внутри секции. Причём взаимосвязь между неявными разделами осуществляется только в пределах одной секции. Т.е. заголовочные элементы, находящиеся в одной секции, не связаны с заголовочными элементами, находящимися в другой секции. Другими словами неявные разделы одной секции изолированы от неявных разделах другой секции. В качестве заголовка секции выступает заголовочный элемент, находящийся в этой секции и имеющий самый высокий ранг (уровень). Если секция не содержит заголовочный элемент, то она не имеет названия (Untitled).

Внимание: В HTML 4 в отличие от HTML 5 взаимосвязь между неявными разделами осуществлялась в пределах всего документа, а не в пределах секции (body, nav, aside, section, article). В HTML 4 нет элементов для создания секций.

Например, создадим названия для всех секций кроме nav.


<body>
  <h2>A</h2>
  <nav></nav>
  <section>
    <h2>B</h2>
    <article>
      <h2>C</h2>
    </article>
    <article>
      <h2>D</h2>
    </article>
    <article>
      <h2>E</h2>
    </article>
  </section>
  <aside>
    <h2>F</h2>
  </aside>
</body>

--> Вышеприведённый пример будет создавать следующую структуру документа:
[document] A
  [nav] Untitled
  [section] B
     [article] C
     [article] D
     [article] E
  [aside] F

Например, создадим неявные разделы в секции section и aside:


<body>
  <h2>A</h2>
  <nav></nav>
  <section>
    <h2>B</h2>
    <article>
      <h2>C</h2>
    </article>
    <article>
      <h2>D</h2>
    </article>
    <article>
      <h2>E</h2>
    </article>
    <h3>B-R1</h3>
    <h4>B-R2</h4>
    <h3>B-R3</h3>
  </section>
  <aside>
    <h2>F</h2>
    <h3>F-R1</h3>
    <h4>F-R2</h4>
    <h5>F-R3</h5>
    <h4>F-R4</h4>
    <h4>F-R5</h4>
  </aside>
</body>

--> Вышеприведённый пример будет создавать следующую структуру документа:
[document] A
  [nav] Untitled
  [section] B
     [article] C
     [article] D
     [article] E
     [h3] B-R1
       [h4] B-R2
     [h3] B-R3
  [aside] F
    [h3] F-R1
      [h4] F-R2
        [h5] F-R3
      [h4] F-R4
      [h4] F-R5

Типовая структура страницы в HTML5 — CSS-LIVE

Дополнение от 1.03.2016: у нас есть более свежая статья на эту же тему (перевод заметки редактора спецификации W3C HTML5).

Типовая структура страницы в HTML5:

<!DOCTYPE HTML>

<html>

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Ваш сайт</title>
</head>

<body>

	<header>
		<nav>
			<ul>
				<li>Ваше меню</li>
			</ul>
		</nav>
	</header>
	
	<section>
	
		<article>
			<header>
				<h3>Заголовок статьи</h3>
				<p>Опубликовано <time datetime="2014-01-30T16:31:24+03:00">30 января 2014</time> <a href="#">Автор</a> - <a href="#comments">6 комментариев</a></p>
			</header>
			<p>Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться.</p>
		</article>
		
		<article>
			<header>
				<h3>Заголовок статьи</h3>
				<p>Опубликовано <time datetime="2014-01-30T16:31:24+03:00">30 января 2014</time> <a href="#">Автор</a> - <a href="#comments">6 комментариев</a></p>
			</header>
			<p>Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию.</p>
		</article>
		
	</section>

	<aside>
		<h3>Об авторе</h3>
		<p>Нет никого, кто любил бы боль саму по себе, кто искал бы её и кто хотел бы иметь её просто потому, что это боль..</p>
	</aside>

	<footer>
           <p>Copyright 2014 Ваш сайт</p>
	</footer>

</body>

</html>
P.S. Это тоже может быть интересно:

Семантическая структура для HTML5 страницы. Семантика в HTML5

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

 

Семантическая структура для HTML5 страницы

В этой статье мы будем постепенно создавать html страницу, и оформлять ее семантическими HTML5 тегами.

Рисунок — Семантическая структура для HTML5 страницы.

 

DOCTYPE и meta теги в заголовке страницы

Начнем со стандартного шаблона HTML5 документа, и добавим теги meta в head:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Заголовок страницы</title>
    <meta name="keywords" content="Ключевые слова, и, фразы, через, запятую">
    <meta name="description" content="Описание контента страницы, 1-2 предложения.">
</head>
<body>

Я добавил тег <meta name="keywords" content=""> который отвечает за ключевые слова. И тег <meta name="description" content=""> который отвечает за описание страницы. Для SEO оптимизации эти теги обязательны. Также обязательно корректное заполнение тега <title>. Title страницы должен быть уникальным для всего сайта, и содержать в названии всю суть страницы для которой он указан.

Пойдем дальше. В HTML5 появились новые теги, которые используются для того чтобы делать семантическую разметку документа. Это теги header, nav, main, article, aside, footer и т.д. По отображению они работают также как и обычные <div> теги, то есть это блочные элементы. Но если <div> не имеет семантической нагрузки, то header, nav, main и другие — уже нужно использовать только осмысленно.

 

Заголовок страницы

Шапка страницы оформляется в тег header. Заметьте что заголовок страницы пишем тегом h2.

<!-- Header страницы -->
    <header>
            <h2>Site title</h2>
    </header>

Если у нас есть еще и слоган рядом с заголовком, то помещаем его в p, div или span.

<!-- Header страницы -->
    <header>
            <h2>Site title</h2>
            <p>site slogan</p>
    </header>

Замечание по поводу тега h2

Следует заметить что в HTML5 тег h2 используется для указания заголовка контейнера в котором он находится (это может быть header, section, article и т.д.)

До появления HTML5 тегов семантика была несколько другой и отличалась. Так в HTML4 на странице мог быть только один заголовок h2! Как правило это был заголовок статьи или заголовок страницы (например если это страница рубрики на которой отображаются несколько статей.) h3 использовался для подзаголовков, или для разделов главной статьи. h4 для под разделов и так далее.

 

Навигация на странице

Оформление главной навигации по сайту должно заключаться в тег nav. Также следует помнить что хорошей практикой считается оформлять навигацию элементами списка.

<!-- Главная Навигация по сайту -->
    <nav>
        <ul>
            <li><a href="#">Home</a></li>
            <li><a href="#">Portfolio</a></li>
            <li><a href="#">Gallery</a></li>
            <li><a href="#">Contacts</a></li>
        </ul>
    </nav>

 

Контент на странице

Основное содержимое страницы оформляется в тег main. Это может быть одна статья, или несколько превью статей если речь идет о странице блога с несколькими записями. Нельзя помещать сайдбар, хедер страницы, футер или главную навигацию в тег main!

<!-- Основное содержимое страниц -->
<main>
        
...основной контент страницы...

</main>

 

Оформление статьи

Тег article — служит для обертки статей. В общем этот тег содержит в себе блок контента, который может быть вынут из контекста страницы, и использован отдельно в другом месте. Это может быть статья (полный тескт статьи или превью), пост на форуме, и т.п.

На примере ниже я показал оформление статьи в контексте, внутри тега main. У статьи задан блок header с заголовком статьи. Дата публикации статьи задана специальным тегом time, который отображается как обычный inline элемент. У тега time есть специальный аттрибут в котором время публикации должно быть задано в машинном формате. Это может быть только дата datetime="2015-09-30" или с указанием часов минут и секунд datetime="2015-09-30T15:25:55". Параметр pubdate указывает что статья была и опубликована в то же время что и написана. Если это новость, то может быть такое что время новости одно, а время публикации другое, для этого необходимо указать два раза тег time, и поставить pubdate только в том теге где указано время публикации.

<main>
...
<!-- Статья -->
    <article>

        <!-- Шапка статьи если в шапке у нас больше чем заголовок -->
        <header>
        
            <!-- Заголовок статьи -->
            <h2>Article title</h2>
            
            <!-- Дата публикации статьи  -->
            <time datetime="2015-09-30T15:25:55" pubdate>30 Сентября</time>
            
        </header>

        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo quisquam, soluta sunt, aliquam voluptatem voluptates! Deserunt repudiandae aperiam pariatur sit harum at a, quo, est neque. Adipisci beatae eaque unde?</p>

        <!-- Подзаголовок страницы -->
        <h3>Article sub-title</h3>

        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nemo quisquam, soluta sunt, aliquam voluptatem voluptates! Deserunt repudiandae aperiam pariatur sit harum at a, quo, est neque. Adipisci beatae eaque unde?</p>
        
        <footer>
            <a href="#">Читать далее</a>
            <a href="#">Комментарии</a>
        </footer>

    </article>
...
</main>

Из примера выше видна что внутри статьи были использованы теги header и footer чтобы выделить заголовок и нижний колонтитул статьи.

 

Сайдбар или колонка с виджетами

Для каждого отдельного элемента сайдбара используем блок aside. Внутри него заголовок оформляем тегом h2. Так колонка с сайдбаром может выглядеть следующим образом:

<!-- Сайдбар -->
<div>

        <!-- Виджет в сайдбаре -->
        <aside>
            <h2>Widget title</h2>
            ...
        </aside>

        <!-- Виджет в сайдбаре -->
        <aside>
            <h2>Последние записи</h2>
            ...
        </aside>


        <!-- Виджет в сайдбаре -->
        <aside>
            <h2>Популярные комментарии</h2>
            ...
        </aside>
        
</div>

 

Тег section

Тег section — используется для представления группы или секции тематически связанного контента.Его использование похоже на article с главным отличием в том что допускается отсутствие смысла содержимого внутри элемента <section> вне контекста самой страницы. Рекомендуется использовать теги (<h2> – <h6>) для обозначения темы секции.

В качестве примера можно привести статью, которую вы сейчас читаете, можно было бы каждый параграф обернуть в тег <section>. Например тегом section можно выделять блоки контента на лендинге. Звучит похоже на определение div элемента, который часто используется как контейнер для контента. Разница в том что div не имеет семантического значения, и он не говорит не о чем про контент находящийся внутри него. Тег section, наоборот используется чтобы четко показать что контент внутри него связан по смыслу. Вы можете заменить некоторые свои div теги на section, но всегда отвечайте себе на вопрос: «Этот контент связан между собой или нет?»

Пример использования тега section в списке с перечислением городов:

<h2>An Event Apart</h2>

<section>

    <header>
        <h3>Cities</h3>
    </header>
    <p>Join us in these cities in 2010.</p>
    
    <section>
        <header>
            <h4>Seattle</h4>
        </header>
        <p>Follow the yellow brick road.</p>
    </section>

    <section>
        <header>
            <h4>Boston</h4>
        </header>
        <p>That's Beantown to its friends.</p>
    </section>

    <section>
        <header>
            <h4>Minneapolis</h4>
        </header>
        <p>It's so <em>nice</em>.</p>
    </section>

</section>

<small>Accommodation not provided.</small>

 

Подвал сайта — Footer

Подвал сайта оформляется тегом <footer>

<!-- Подвал сайта -->
<footer>
        <p>© 2015 Rightblog.ru Copyright</p>
</footer>

 

Заключение

Для проверки структуры страницы можно использовать инструмент HTML5 outliner. Он показывает структуру страницы блокам и заголовкам.

Семантика в HTML5 не ограничивается приведенными выше в статье тегами. Но используя приведенные примеры вы можете освежить свою разметку, и сделать сайт более дружелюбным к поисковым системам, что скажется на более высоком рейтинге сайта в поисковой выдаче.

В продолжение темы можно изучить другие новые HTML5 теги. А также микро форматы для оформления и структуризации данных, например такие как schema.org

 

Важное замечание по использованию HTML5 тегов. В спецификации не указаны жесткие правила по использованию семантических тегов, указаны лишь рекомендации п их использованию. Если вы не понимаете или не знаете где и какой HTML5 тег использовать, лучше используйте div — чтобы не навредить и не нарушить структуру документа.

 

Статьи и материалы по теме:
http://html5forwebdesigners.com/semantics/
http://habrahabr.ru/post/214407/
http://www.adobe.com/devnet/archive/dreamweaver/articles/understanding-html5-semantics.html
http://www.smashingmagazine.com/2011/11/html5-semantics/
http://blogs.msdn.com/b/jennifer/archive/2011/08/01/html5-part-1-semantic-markup-and-page-layout.aspx
http://www.w3schools.com/html/html5_semantic_elements.asp

Разделы документа в HTML5

Структура документа В HTML5 состоит из разделов и подразделов. Разделы могут быть представлены в виде схем документа по аналогии с оглавлением. Каждый секционный элемент имеет свою собственную схему, поэтому каждый раздел можно начинать с заголовка <h2>.

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

Схема состоит из списка одного или более вложенных разделов. Раздел (секция) представляет собой контейнер, который соответствует некоторым узлам в исходном дереве DOM. Раздел в данном случае не является элементом <section>, он просто подразумевает его концепцию. Каждый раздел может иметь один заголовок, связанный с ним, а также любое количество дополнительных вложенных разделов.

Также отдельно выделяют корневые секционные элементы. Они отличаются от секционных элементов, но могут также иметь схему.

Элементы, формирующие разделы HTML-документа

1. Элемент <body>

Категории контента: корневой секционный.

Контекст, в котором этот элемент может быть использован: как второй элемент в элементе <html>.

Пропуск тегов: начальный тег <body> может быть опущен, если элемент пуст, или если первое, что внутри элемента не является пробелом или комментарием, за исключением случаев, когда первое, что идет за тегом <body> являются элементы <meta>, <link>, <script> или <style>.

Закрывающий тег </body> может быть опущен, если перед ним нет комментария.

<!DOCTYPE html>
  <title>Тест</title>
   <h2>Тестовая страница</h2>

Элемент <body> представляет содержимое документа.

Для элемента доступны ‎глобальные атрибуты, а также атрибуты, приведенные в таблице ниже.

Элемент <body> предоставляет в качестве атрибутов ряд обработчиков событий объекта Window — onblur, onerror, onfocus, onload, onresize и onscroll.

Таблица 1. Атрибуты элемента <body>
АтрибутОписание, принимаемое значение
onafterprintСобытие, срабатывающее после отправки страницы на печать или после закрытия окна печати.
onbeforeprintСобытие, срабатывающее перед отправкой страницы на печать.
onbeforeunloadСобытие срабатывает, когда посетитель инициировал переход на другую страницу или нажал «закрыть окно». Позволяет отображать сообщение в диалоговом окне подтверждения, чтобы сообщить пользователю, хочет ли он остаться или покинуть текущую страницу.
onhashchangeСобытие срабатывает, когда меняется hash-часть URL, например, когда пользователь перейдет с адреса example.domain/test.aspx#page1 на example.domain/test.aspx#page2.
onlanguagechangeСобытие срабатывает при изменении предпочтительных языков.
onmessageСобытие происходит, когда сообщение получено через источник события.
onofflineСобытие вызывается браузером в том случае, когда браузер определит, что соединение с интернет пропало.
ononlineСобытие вызывается браузером в том случае, когда соединение с интернет возобновилось.
onpagehideСобытие происходит, когда пользователь покидает страницу посредством навигации, например, нажав на ссылку, обновив страницу, заполнив форму и т.д.
onpageshowСобытие происходит, когда пользователь переходит на веб-страницу, после события onload.
onpopstateСобытие срабатывает, когда пользователь просматривал историю сеанса.
onrejectionhandledСобытие возникает, когда Promises отклоняются.
onstorageСобытие срабатывает при изменении места хранения.
onunhandledrejectionСобытие используется для обработки необработанных событий отказа.
onunloadСобытие срабатывает если страница не загрузилась по каким-либо причинам, либо при закрытии окна браузера.

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

<!DOCTYPE html>
<html>
  <head>
    <title>Онлайн или офлайн?</title>
    <script>
      function update(online) {
        document.getElementById('status').textContent =
        online ? 'Онлайн' : 'Офлайн';
      }
    </script>
  </head>
  <body ononline="update(true)"
    onoffline="update(false)"
    onload="update(navigator.onLine)">
    <p>Вы: <span>(Статус неизвестен)</span></p>
  </body>
</html>

2. Элемент <article>

Категории контента: потоковое содержимое, секционное содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Элемент <article> представляет собой законченное или автономное произведение в документе, странице, приложении или сайте. Может дублироваться на других страницах сайта и содержать внутри другие элементы <article>, которые по содержанию имеют близкое отношение к содержанию внешней статьи. Если на странице присутствует только одна статья с заголовком и текстовым содержимым, она не нуждается в обёртке элементом <article>.

Общее правило заключается в том, что элемент <article> уместен только в том случае, если содержимое элемента будет явно указано в схеме документа. Каждая статья должна быть идентифицирована, обычно путем включения заголовка (элемент <h2-h6>) в качестве дочернего элемента элемента <article>.

<article>
    <header>
        <h3><a href="https://herbert.io">Короткая заметка о ношении шорт</a></h3>
        <p>Опубликовано в пятницу, 13 марта 2020 Патриком Люком.
            <a href="https://herbert.io/short-note/#comments">6 комментариев</a></p>
    </header>
    <p>Попутчик задал интересный вопрос: почему вы носите шорты, а не длинные брюки? Человек носил брюки-кюлоты как время, поэтому я считал вопрос двусмысленным по своей природе, но я попытался дать честный ответ, несмотря на сомнительную одежду спрашивающего.</p>
    <p>Короткий ответ: мне нравится носить шорты, длинный ответ ...</p>
    <p><a href="https://herbert.io/short-note/">Продолжить чтение: Короткая заметка о ношении шорт</a></p>
</article>
<section>               
      <article>
        <h3><a href="">Весна приходит (и уходит) в графстве Суссекс</a></h3>        
        <p>Вчера я присоединился к Brooklyn Bird Club для нашей ежегодной поездки в Западный Нью-Джерси, в частности, в Hyper Humus, относительно недавно обнаруженную «горячее место».</p>
      </article>

      <article>
        <h3><a href="">Как стать бердвотчером?</a></h3>        
          <p>Птицы — почти единственная связь современного городского человека с дикой природой. Благодаря бердвотчингу вы, скорее всего, начнете больше путешествовать, причем по самым неожиданным местам. Если у вас есть дети, можно изучать птиц вместе — это идеальное семейное хобби. </p>
      </article>  
  
    <nav>
      <a href="">&laquo; Предыдущие записи</a>
    </nav>
  </section>

Для элемента доступны ‎глобальные атрибуты.

3. Элемент <section>

Категории контента: потоковое содержимое, секционное содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Элемент <section> представляет общий раздел документа или приложения, группируя тематическое содержимое. Каждый раздел должен быть идентифицирован, обычно путем включения заголовка (элемент <h2-h6>) в качестве дочернего элемента <section>.

Примерами разделов могут быть главы, различные страницы во вкладках или пронумерованные разделы. Домашняя страница веб-сайта может быть разбита на разделы для введения, новостей и контактной информации.

Авторам рекомендуется использовать элемент <article> вместо элемента <section>, когда контент завершен или самодостаточен.

Элемент <section> не является универсальным контейнерным элементом. Когда элемент нужен только для стилизации или для удобства написания сценариев, рекомендуется использовать вместо этого элемент <div>. Общее правило заключается в том, что элемент <section> уместен только в том случае, если содержимое элемента будет явно указано в схеме документа.

<article>
  <header>
    <h3>Яблоки</h3>
    <p>Вкусные, восхитительные фрукты!</p>
  </header>
  <p>Яблоко является плодом яблони.</p>
  <section aria-label="Красные яблоки">
    <h4>Ред Делишес</h4>
    <p>Эти ярко-красные яблоки чаще всего встречаются во многих супермаркетах.</p>
  </section>
  <section aria-label="Зеленые яблоки">
    <h4>Гренни Смит</h4>
    <p>Эти сочные зеленые яблоки станут отличной начинкой для яблочных пирогов.</p>
  </section>
</article>

Для элемента доступны ‎глобальные атрибуты.

<article> внутри <section>

Можно создавать родительские элементы <section> с вложенными элементами <article>, в которых есть один или несколько элементов <article>. Не все страницы должны быть устроены именно так, но это допустимый способ вложения элементов. Например, основная область контента страницы содержит два блока со статьями разной тематики. Можно сделать на этом акцент, поместив каждую статью одной тематики внутрь элемента <section>

<section>
  <h2>Заметки о природе</h2>
    <article>
      <h3>...</h3>
      <p>...</p>
    </article>
    <article>
      <h3>...</h3>
      <p>...</p>
    </article>
</section>
<section>
  <h2>Исторические заметки</h2>
    <article>
      <h3>...</h3>
      <p>...</p>
    </article>
    <article>
      <h3>...</h3>
      <p>...</p>
    </article>
</section>

4. Элемент <nav>

Категории контента: потоковое содержимое, секционное содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Элемент <nav> представляет собой раздел страницы с навигационными ссылками, который ссылается на другие страницы или части внутри страницы, при этом не обязательно должен находиться внутри <header>. На странице может быть несколько элементов <nav>.

В случаях, когда содержимое элемента <nav> представляет список элементов, рекомендуется использовать разметку списка. Не заменяет теги <ul> или <оl>, он просто их обрамляет.

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

<body>
  <h2>Вики-центр</h2>
  <nav>
    <ul>
      <li><a href="/">Главная</a></li>
      <li><a href="/events">Текущие события</a></li>
      ...
    </ul>
  </nav>
  <article>
    <header>
      <h3>Афиша мероприятий</h3>
    </header>
    <nav>
      <ul>
        <li><a href="#public">Лекции</a></li>
        <li><a href="#practice">Практические занятия</a></li>
        ...
      </ul>
    </nav>
    <div>
      <section>
        <h3>Лекции</h3>
        <p>...</p>
      </section>
      <section>
        <h3>Практические занятия</h3>
        <p>...</p>
      </section>
      ...more...
    </div>
    <footer>
      <p><a href="?edit">Редактировать</a> | <a href="?delete">Удалить</a> | <a href="?rename">Переименовать</a></p>
    </footer>
  </article>
  <footer>
    <p><small>© 2020 Вики-центр</small></p>
  </footer>
</body>

В качестве элементов панели навигации можно использовать не только элементы списков:

<nav>
  <p><a href="">...</a></p>
  <p><a href="">...</a></p>
</nav>

Также можно добавлять заголовки внутрь элемента:

<nav>
  <h3>...</h3>
    <ul>
      <li><a>...</a></li>
      <li><a>...</a></li>
      <li><a>...</a></li>
    </ul>
</nav>

Для элемента доступны ‎глобальные атрибуты.

5. Элемент <aside>

Категории контента: потоковое содержимое, секционное содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Элемент <aside> представляет раздел страницы, который состоит из содержимого, косвенно связанного с родительским секционным элементом и который можно рассматривать отдельно от него. Чаще всего элемент позиционируется как боковая колонка (как в книгах) и включает в себя группу элементов: <nav>, цифровые данные, цитаты, рекламные блоки, архивные записи. Не подходит для блоков, просто позиционированных в стороне.

<aside>
  <h3>Швейцария</h3>
  <p>Швейцария, страна в центре географической Европы, не имеющая выхода к морю, не присоединилась к геополитическому Европейскому союзу, хотя она подписала ряд европейских договоров.</p>
</aside>
<body>
  <header>
    <h2>Мой замечательный блог</h2>
    <p>Мой слоган</p>
  </header>
  <aside>
    <nav>
      <h3>Мой блогролл</h3>
      <ul>
        <li><a href="https://blog.example.com/">Интересная ссылка</a>
      </ul>
    </nav>
    <nav>
      <h3>Архивы</h3>
      <ol reversed>
        <li><a href="/last-post">Моя последняя запись</a>
        <li><a href="/first-post">Моя первая запись</a>
      </ol>
    </nav>
  </aside>
  <aside>
    <h3>Мой Twitter</h3>
    <blockquote cite="https://twitter.example.net/t31351234">
      Я в отпуске, пишу для своего блога.
    </blockquote>
    <blockquote cite="https://twitter.example.net/t31219752">
      Я скоро пойду в отпуск.
    </blockquote>
  </aside>
  <article>
    <h3>Моя последняя запись</h3>
    <p>Это моя последняя запись.</p>
    <footer>
      <p><a href="/last-post" rel=bookmark>Ссылка</a>
    </footer>
  </article>
  <article>
     <h3>Моя первая запись</h3>
    <p>Это моя первая запись.</p>
    <aside>
        <h2>Публикация</h2>
        <p>Пока я думаю об этом, я хотел бы сказать кое-что о публикациях. Опубликовывать статьи - это весело!</p>
    </aside>
    <footer>
      <p><a href="/first-post" rel=bookmark>Ссылка</a>
    </footer>
  </article>
  <footer>
    <nav>
      <a href="/archives">Архивы</a> —      <a href="/about">Обо мне</a> —      <a href="/copyright">Copyright</a>
    </nav>
  </footer>
</body>

Для элемента доступны ‎глобальные атрибуты.

6. Элементы <h2>, <h3>, <h4>, <h5>, <h5> и <h6>

Категории контента: потоковое содержимое, секционное содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Элементы <h2-h6> представляют заголовки для своих разделов. Эти элементы имеют ранг, определяемый числом в их имени. Элемент <h2> имеет наивысший ранг, элемент <h6> имеет наименьший ранг, а два элемента с одинаковым именем имеют одинаковый ранг. Используйте ранг элементов заголовка, чтобы создать схему документа.

Элементы <h2 – h6> не должны использоваться для разметки подзаголовков, альтернативных заголовков и слоганов, если только они не предназначены для заголовка нового раздела или подраздела.

<body>
<h2>Заголовок верхнего уровня</h2>
 <section><h3>Заголовок второго уровня</h3>
  <section><h4>Заголовок третьего уровня</h4>
   <section><h5>Заголовок четвертого уровня</h5>
    <section><h5>Заголовок пятого уровня</h5>
     <section><h6>Заголовок шестого уровня</h6>
     </section>
    </section>
 </section>
</section>
</section>
</body>

Для элементов доступны ‎глобальные атрибуты.

Категории контента: потоковое содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Для элемента доступны ‎глобальные атрибуты.

Элемент <header> представляет вводное содержимое для его ближайшего предка — элемента <main> или элемента из категории секционного содержимого или корневого секционного элемента. Элемент <header> обычно содержит группу вводных или навигационных элементов.

Если элемент <header> является ближайшим предком элемента <body> и не находится внутри <main>, он представляет вводное содержимое для страницы в целом.

Элемент <header> обычно содержит заголовок раздела (элемент <h2–h6>), но это не обязательно. Элемент <header> также можно использовать как элемент-обертку для оглавления раздела, формы поиска или любых уместных логотипов. В документе может содержаться одновременно несколько элементов <header> и они могут располагаться в любой части страницы.

Элемент <header> не является секционным содержимым, он не вводит новый раздел.

<article>
  <header>
    <h2>Flexbox: Полное руководство</h2>
    <aside>
      <header>
        <h3>Автор: Wes McSilly</h3>
        <p><a href="./wes-mcsilly/">Связаться с ним!</a></p>
      </header>
      <p>Эксперт в Flexbox.</p>
    </aside>
  </header>
  <p><ins>Руководство о Flexbox должно было быть здесь, но оно оказалось, что Wes не был экспертом по Flexbox.</ins></p>
</article>

Элемент <header> может содержать только <header> или <footer>, если они сами находятся внутри <article>, <aside>, <nav> или <section>.

Категории контента: потоковое содержимое, видимое содержимое.

Контекст, в котором этот элемент может быть использован: где ожидается потоковое содержимое.

Пропуск тегов: ни один из тегов не может быть пропущен.

Для элемента доступны ‎глобальные атрибуты.

Элемент <footer> представляет нижний колонтитул для его ближайшего предка элемента <main>, или элемента из категории секционного содержимого или корневого секционного элемента.

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

...
  <footer>
    <nav>
      <section>
        <h3>Статьи</h3>
        <p><img src="images/somersaults.jpeg" alt=""> Посетить спортзал с нашим классом сальто! Наш учитель Джим проведет вас через шаги в этой статье из двух частей. <a href="articles/somersaults/1">Часть 1</a> · <a href="articles/somersaults/2">Часть 2</a></p>
        <p><img src="images/crisps.jpeg"> Чипсы закончились, теперь осталась только картошка. Что вы можете с этим сделать? <a href="articles/crisps/1">Читать далее...</a></p>
      </section>
      <ul>
        <li> <a href="/about">О нас...</a>
        <li> <a href="/feedback">Связаться с нами!</a>
        <li> <a href="/sitemap">Карта сайта</a>
      </ul>
    </nav>
    <p><small>© 2020 The Snacker — <a href="/tos">Условия обслуживания</a></small></p>
  </footer>
</body>

В одном веб-документе может быть несколько элементов <footer>. Как каждая страница, так и каждая статья может иметь свой элемент <footer>. Также, <footer> можно поместить в элемент <blockquote>, чтобы указать источник цитирования.

По материалам Sections

Структура html5 страницы (документа): чем она отличается?

От автора: я вновь приветствую вас на блоге webformyself. А может вы здесь и впервые. Сегодня мы рассмотрим, из чего состоит структура html5 страницы и как она поменялась с выходом этой новой спецификации.

Как изменилась структура

Прежде всего, я хотел бы сказать, что до появления html5 явной структуры как таковой вообще не существовало. Как верстались все шаблоны? В большинстве случаев использовался метод блочной верстки, ставший сегодня стандартным. В качестве контейнеров для элементов использовались обычные div с разными идентификаторами.

Например, шапка обычно обозначалась как div с идентификатором header, блок с основной информацией называли main или content, боковая колонка получила идентификатор sidebar.

В общем-то, очень мало разработчиков, которые выбирали другие имена классов или уникальных меток. В самом деле, что может быть более понятным и правильным обозначением боковой колонки, чем слово sidebar? Его понимают даже люди, очень мало знакомые с английским.

В связи с этим, в html5 назревало появление новых элементов – семантических блоков, которые были призваны заменить обычные div, придать разметке больше смысла.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

Собственно говоря, историю их происхождения вы также можете узнать в первом уроке премиум-курса по основам html5. Я советую вам ознакомиться с ним, если вы пока очень мало знаете об этой спецификации. Ну а я расскажу вам теперь о некоторых из этих новых элементов.

Новые семантические блоки в разметке

Стоит отметить, что подходящий тег придумали практически для любого элемента на веб-странице. Например, для шапки. По стандарту ее всегда делали так: div id = “header”. Теперь необходимость в этом отпала – появился контейнер header. Да, это парный тег и в него помещается все содержимое шапки.

Впрочем, это не означает, что к нему нельзя привязать класс или идентификатор. Конечно, можно, и так и будут делать. Header имеет немного большую роль, чем только контейнер для главной шапки сайта.

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

Так вот, к чему это я? У статьи (новости, обзора и т.д.) тоже может быть своя шапка, своя заключительная часть и т.д. Соответственно, на странице может быть несколько header-ов, каждый со своим классом.

К слову, подвал сайта, самая нижняя его часть, формируется в html5 тегом footer. Для вас это будет очевидным, если вы сверстали хотя бы несколько типичных макетов – именно такой класс обычно дают этому блоку.

Теперь о меню. Раньше оно тоже не имело своего собственного, уникального контейнера, который мог бы его отличать. Оно тоже формировалось в помощью div. Естественно, для такого важного элемента на странице тоже придумали свой тег – nav (navigation). Он тоже не обязательно должен быть одним на странице – на некоторы веб-ресурсах можно наблюдать несколько разных меню и все же по своему смыслу в него рекомендуется заключать самые важные ссылки на странице.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

Вы наверное, замечали, как сильно может отличаться основное содержимое от того, что показывается в боковой колонке? Если подумать, то это вообще разные секции шаблона. Вот именно – секции! Наверняка подобным образом думали и разработчики спецификации html5, поэтому они создали тег – section. Его общий смысл заключается в том, что он содержит в себе часть документа (секцию), в целом независимую от других, у которой может быть свой заголовок и т.д.

Пример новой разметки

Хорошо, мы с вами уже узнали о некоторых новых элементах, давайте попробуем сделать разметку c их помощью.

<header>Шапка</header>
<nav>Главное меню</nav>
<section id = “sidebar”>Сайдбар</section>
<section id = “content”>
<h2>Заголовок</h2>
<aside>Второстепенная информация о статье</aside>
<article>Сама статья</article>
</section>
<footer>Подвал</footer>

<header>Шапка</header>

<nav>Главное меню</nav>

<section id = “sidebar”>Сайдбар</section>

<section id = “content”>

<h2>Заголовок</h2>

<aside>Второстепенная информация о статье</aside>

<article>Сама статья</article>

</section>

<footer>Подвал</footer>

Конечно, это очень простой пример. В реальности еще к этим элементам добавляются какие-то стилевые классы. Здесь мы с вами применили два абсолютно новых тега – article и aside. Как вы понимаете, тег article обозначает основную информацию на странице, причем исключительно ее текст.

Такие важные вещи, как дату публикации или количество комментариев, лучше вынести отдельно в блок aside. Он создан для того, чтобы помещать в него информацию, которая не является главной, имеет второстепенное значение, по сравнению с основной.

Конечно, дата публикации это важно, но она никак не связана с самой статьей по смыслу. Именно поэтому рекомендуется обрамлять ее в другой тег. Собственно, эти рекомендации не являются обязательными к выполнению. Например, если вы в тег article включите всю статью с датой, кол-вом просмотров и другой побочной информацией, ничего страшного не случится. Я бы даже сказал, что вообще ничего не случится, просто нужно стремиться делать более правильно.

Наконец, если говорить о времени (дате), то ее желательно заключать в новый тег time. Это позволит браузеру действительно считать это датой, а не просто каким-то случайным элементом на странице.

Конечно, представленный выше вариант разметки является лишь одним из примеров, на каждом реальном сайте по-разному. Например, в любой section можно добавить header и footer – они будут обозначать начало и конец секции, второстепенная информация может находиться ниже самой статьи, а не выше. Тут много разных вариантов, причем вы разбираем только структуру блога, на других типах веб-ресурсов все может быть совсем по-другому. Например, вот другой вариант разметки, и он тоже имеет право на жизнь:

Итак, вот так быстро мы с вами прошлись по структуре html5 – новым тегам этой спецификации, которые помогают сделать разметку веб-страницы куда более понятной. Подписывайтесь на наш блог, если вы хотите продолжать изучение сайтостроения.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

PSD to HTML

Верстка сайта на HTML5 и CSS3 с нуля

Смотреть

Основы HTML5 — Структура документа

В HTML4 можно, используя CSS, создавать страницы с очень понятной
для пользователей структурой. Но как поисковый робот мог отличить
содержимое документа от подвала или навигационного меню, если все они
размечены с помощью элементов div?

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

ТегОписание
headerОпределяет заголовочный блок сайта.
navОпределяет навигационное меню.
footerОпределяет подвал
articleОпределяет независимое содержимое страницы.
sectionНазначение — определение секций. Позволяет сгруппировать
логически связанное содержимое.

Так выглядела общая структура документа в HTML4.
Так выглядит общая структура документа в HTML5 с использованием новых
тегов разметки.

Тег <header> позволяет определить заголовочный
блок сайта.

В заголовочном блоке обычно располагаются логотип, лозунг сайта, а
также поле поиска и ссылки на другие разделы сайта.

Тег <nav> позволяет создать навигационный
блок.

В навигационном блоке обычно содержаться ссылки на другие страницы
сайта.

Тег <footer> позволяет определить подвал для
документа или
сгруппированного (с помощью тэга article или section) содержимого.

В футере обычно располагается информация об авторском праве, авторе
документа и могут присутствовать ссылки на другие ресурсы.

С помощью тега <section> можно выделить на
странице логически связанное содержимое.

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

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

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

Пример содержимого, которое может быть выделено тэгом <article>:
газетная статья, комментарий пользователя, запись в блоге и т.д.

Структура (скелет) сайта на HTML5 . Основная структура сайта

Структура сайт на HTML5 немногим отличается от обычной структуры. В новой версии языка разметки введены новые семантические элементы которые позволяют лучше структурировать страницу сайта и придать каждому блоку определенный смысл.

Мы рассмотрим основные нововведения HTML5 которые облегчают разработку сайта.
Самая простая структура тела сайта имеет стандартные части (в большинстве случаев), это заголовок, меню, боковая панель, основное содержимое и подвал.

Семантические элементы HTML5 помогают упростить работу с этими частями. Итак давайте рассмотрим какие элементы HTML нам необходимы для создания структуры сайта

1. Основная стандартная структура сайта, которая имеет заголовок страницы и тело страницы:

<!DOCTYPE html>
<html>
<head>
   <title> Структура сайта на HTML5 </title>
</head>
<body>
</body>
</html>

2. Теперь добавим в тело страницы (внутрь тега BODY) элемент которые будет отвечать за заголовок страницы в новом HTML5 это тег HEADER

<body>
   <header> 
     <h2>Это структура сайта с использованием семантических тегов HTML5 </h2>
   </header>
</body>

3. Часть HEADER обычно включает в себя часть меню. Меню создается с помощью парного тега NAV

<body>
   <header> 
     <h2>Это структура сайта с использованием семантических тегов HTML5 </h2>
     <nav>
       <ul>
         <li> <a> Пункт меню 1 </a></li>
         <li> <a> Пункт меню 2 </a></li>
       </ul>
     </nav>
</header> </body>

4. Следующий элемент который используется для создания структуры сайта это ARTICLE. Он используется для группировки записей, статей и прочего на странице. В большинстве своем используется для разделения частей сайта на различные блоки. Может содержать внутри себя другие элементы ARTICLE.

<body>
 <article>
   <header> 
     <h2>Это структура сайта с использованием семантических тегов HTML5 </h2>
     <nav>
       <ul>
         <li> <a> Пункт меню 1 </a></li>
         <li> <a> Пункт меню 2 </a></li>
       </ul>
     </nav>
 </article>
</header> </body>

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

<aside> 
  <h4> Рекламные блоки </h3>
  <p> Какая то реклама </p>
</aside>

6. И последний часто используемый элемент это подвал FOOTER. Представляет собой нижнюю часть страницы сайта, обычно эта часть всегда одинакова на всех страницах сайта. Но каждая страницы или статья может иметь свой собственный footer.

<footer> 
  <adress> Ул.Новая д.43, г.Большой </adress>
  
</footer>

Подведя итог можно сделать окончательную структуру сайта на HTML5, который будет иметь следующий вид:

<!DOCTYPE html>
<html>
<head>
   <title> Структура сайта на HTML5 </title>
</head>
<body>
<header> 
     <h2>Это структура сайта с использованием семантических тегов HTML5 </h2>
     <nav>
       <ul>
         <li> <a> Пункт меню 1 </a></li>
         <li> <a> Пункт меню 2 </a></li>
       </ul>
     </nav>
</header>
<aside> 
  <h4> Рекламные блоки </h3>
  <p> Какая то реклама </p>
</aside>
<footer> 
  <adress> Ул.Новая д.43, г.Большой </adress>
  
</footer>
</body>
</html>

 

Использование разделов и схем HTML — Руководства разработчика

Важно : не существует реализации предложенного алгоритма структуры в веб-браузерах или вспомогательных технологиях; он никогда не входил в окончательную спецификацию W3C. Следовательно, алгоритм схемы не следует использовать для передачи структуры документа пользователям. Авторам рекомендуется использовать ранг заголовка ( h2 h6 ) для передачи структуры документа.

Спецификация HTML5 представила несколько элементов семантического разделения для помощи в организации структуры документов.Элементы семантического разделения специально разработаны для передачи структурного значения браузерам и другим технологиям, интерпретирующим документ от имени пользователей, таким как программы чтения с экрана и голосовые помощники.

Элементы семантического разделения поясняют крупномасштабные структуры в документе. Они предназначены для улучшения ограниченной семантики более ранних версий HTML, которые включали только тег

в качестве универсального механизма для группировки связанного содержимого.Например,

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

<статья> <заголовок>

Название статьи

содержание

<сторона>

Информация об авторе

<нижний колонтитул> Информация об авторских правах

Nav Element

Элемент