К содержанию

Теги и структура HTML-страницы

Как устроены HTML-теги, элементы, атрибуты и вложенность.

На этой странице

HTML описывает структуру страницы: где находятся заголовки, абзацы, ссылки, изображения и другие части. Браузер читает эту разметку и показывает страницу.

  • HTML задаёт структуру и содержание.
  • CSS задаёт внешний вид и расположение.
  • JavaScript добавляет поведение, например реакцию на нажатие.

Тег и элемент

Тег - запись в угловых скобках. Он сообщает браузеру, что за элемент начинается или заканчивается. Например, p - сокращение от английского paragraph, «абзац».

У обычного элемента есть открывающий тег, содержимое и закрывающий тег:

index.html
<p>Я учусь создавать веб-страницы.</p>
  • <p> - открывающий тег: здесь начинается абзац.
  • Я учусь создавать веб-страницы. - содержимое.
  • </p> - закрывающий тег: здесь абзац заканчивается. Символ / отличает его от открывающего.
  • Весь фрагмент целиком - HTML-элемент абзаца.

Поэтому тег и элемент - не одно и то же: тег обозначает границу, а элемент включает границы и содержимое.

Так браузер показывает этот элемент:

Я учусь создавать веб-страницы.

Вложенность и форматирование

Элементы можно помещать друг в друга. Внешний элемент называют родителем, внутренний - дочерним элементом. Закрывайте их в обратном порядке: первым закрывается тот, который открыли последним.

strong (английское strong - «сильный») выделяет важный фрагмент текста. В примере он вложен в абзац:

index.html
<p>Я изучаю <strong>HTML</strong> с нуля.</p>

Сначала открывается p, затем strong. Поэтому закрывающие теги идут в обратном порядке: сначала </strong>, затем </p>.

Переносы и отступы помогают увидеть эту структуру. Тот же фрагмент можно записать в несколько строк:

index.html
<p>
  Я изучаю
  <strong>HTML</strong>
  с нуля.
</p>

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

Я изучаю HTML с нуля.

ul (сокращение от unordered list) создаёт маркированный список, ol (от ordered list) - нумерованный, а li (от list item) обозначает один пункт. У каждого списка свои дочерние элементы li:

index.html
<ul>
  <li>Разметка</li>
  <li>Стили</li>
</ul>
 
<ol>
  <li>Создать HTML-файл</li>
  <li>Добавить содержимое</li>
</ol>

Маркированный список: ul

  • Разметка
  • Стили

Нумерованный список: ol

  1. Создать HTML-файл
  2. Добавить содержимое

ul или ol - родитель всего списка. Каждый li - отдельный дочерний элемент. Тег li используют внутри списка, а не вместо ul или ol.

Параметры элемента: атрибуты

В открывающем теге можно задать параметры элемента. Они называются атрибутами. Одни атрибуты относятся к конкретным элементам, например href у ссылки. Другие подходят многим элементам, например id и class.

index.html
<a id="course-link" class="link" href="/learn">Материалы курса</a>

Большинство атрибутов с текстовым значением записывают по схеме имя="значение": сначала имя, затем знак =, затем значение в одинарных или двойных кавычках. Несколько атрибутов разделяют пробелами; их порядок обычно не важен. В проекте лучше придерживаться одного стиля кавычек. Некоторые логические атрибуты включаются самим присутствием, например <input required />. Здесь href задаёт адрес перехода, id - уникальное имя элемента, а class - имя класса, которое можно назначить нескольким элементам.

Пустые элементы и слэш

У некоторых элементов записывают только один тег: у них нет содержимого и отдельного закрывающего тега. В HTML их называют пустыми элементами (англ. void elements). В учебных материалах их также часто называют самозакрывающимися, но это название может запутать: завершающий слэш сам по себе ничего не закрывает. Например, запись </br> неверна.

br - сокращение от английского break, «разрыв». Элемент <br /> переносит текст на следующую строку внутри того же абзаца. Он не начинает новый абзац:

index.html
<p>МИЭТ<br />Москва</p>

МИЭТ


Москва

В HTML можно написать <br> или <br />: браузер обработает их одинаково, а завершающий слэш в HTML не закрывает элемент. Валидатор HTML не требует слэш. В этом курсе мы будем писать пустые элементы со слэшем, чтобы сразу видеть, что у них нет пары.

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

Например, img (сокращение от image, «изображение») показывает картинку. Это пустой элемент, поэтому закрывающего тега у него нет. Атрибут src задаёт путь к файлу, а alt - текстовую замену изображения:

index.html
<img
  src="/learn/course-doc/html-01/window-plant.svg"
  alt="Растение на подоконнике у окна"
  width="640"
  height="400"
/>
Растение на подоконнике у окна

Браузер загружает файл из src, а alt описывает его смысл.

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

Каркас HTML-документа

Страница состоит не только из того, что видно в окне браузера. <html> - корневой элемент всего документа. В <head> находятся настройки и сведения о документе, а в <body> - содержимое страницы.

index.html
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Моя страница</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <h1>Моя первая страница</h1>
    <p>Этот текст виден на странице.</p>
  </body>
</html>
  • <!doctype html> - декларация, а не тег. Она включает современный режим отображения страницы.
  • <html lang="ru"> - корневой элемент документа. Атрибут lang указывает язык содержимого.
  • <head> содержит настройки и сведения о странице, которые обычно не видны в её основном содержимом.
  • <meta charset="utf-8" /> задаёт кодировку текста.
  • <meta name="viewport" ... /> помогает браузеру правильно отображать страницу на мобильном экране.
  • <title> задаёт название вкладки браузера.
  • <body> содержит видимую часть страницы.

Заметьте: у meta и link тоже нет закрывающих тегов. Это пустые элементы. В примерах курса мы записываем их с завершающим слэшем.

Заголовки, абзацы и смысловые элементы

h1-h6 обозначают заголовки разных уровней. Выбирайте уровень по структуре текста, а не по желаемому размеру: внешний вид позже можно задать через CSS. p обозначает абзац, em (англ. emphasis) выделяет смысловое ударение.

index.html
<h1>Путеводитель по городу</h1>
<h2>Исторический центр</h2>
<p>Начните прогулку с <strong>главной площади</strong>.</p>

ul создаёт маркированный список, ol - нумерованный, а li обозначает пункт. Элемент a создаёт ссылку, а адрес перехода задаёт атрибут href:

index.html
<ol>
  <li>Создайте HTML-файл.</li>
  <li>Добавьте структуру страницы.</li>
</ol>
 
<a href="https://example.com">Открыть сайт</a>

Семантические теги

Название семантического элемента подсказывает его роль. Например, header обозначает вводную область, nav - область навигации, main - основное содержимое, а footer - нижнюю часть страницы или раздела.

index.html
<header>
  <nav aria-label="Основная навигация">
    <a href="/">Главная</a>
  </nav>
</header>
 
<main>
  <article>
    <h1>Как устроен HTML</h1>
    <p>HTML описывает структуру страницы.</p>
  </article>
</main>
 
<footer>Материалы курса</footer>

Семантическая разметка помогает:

  • разработчику - быстрее находить нужную область страницы в коде и DevTools;
  • вспомогательным технологиям, например скринридерам, - распознавать области страницы и помогать переходить между ними;
  • поисковым системам - лучше понимать назначение содержимого. Это не гарантирует более высокое место в поиске.

section подходит для тематической части страницы, обычно со своим заголовком. article - для самостоятельного материала, который имеет смысл отдельно от соседних частей. div и span - нейтральные контейнеры: используйте их, когда нужно сгруппировать содержимое или оформить его, а подходящего по смыслу элемента нет.

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

Подробнее: основной синтаксис HTML на MDN, пустые элементы на MDN и запись разметки в JSX на React.dev.

Для семантики и доступности: семантический HTML на MDN, ориентиры страницы в материалах W3C и руководство Google по SEO.