HTML
HTML(HyperText Markup Language) - язык гипертектовой разметки веб-страниц. Он соединяет между собой страницы средствами гипертекста, имеет определенный стиль написания и является языком.
Содержание
- Структура документа
- Семантическая верстка
- Текстовые теги
- Ссылки и навигация
- Изображения и медиа
- Формы
- Тблицы
- Доступность (a11y)
- SEO-основы
- Валидация и чистая семантика
- Контрольный список
Структура документа
Пример простой страницы:
Чтобы увидеть результат кода разметки, необходимо создать файл index.html и открыть его в веб-браузере.
Файл index.html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="description" content="Template of html document" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Моя первая веб-страница</title>
</head>
<body>
<h1>Привет, мир!</h1>
<p>Это мой первый абзац.</p>
<ul>
<li>Первый пункт списка</li>
<li>Второй пункт с вложенным элементом</li>
<li>Третий пункт</li>
</ul>
<!-- Изображение и ссылка -->
<img src="example.jpg" alt="Пример изображения" width="300" height="200">
<a href="https://example.com" target="_blank">Перейти на сайт</a>
</body>
</html>- Код разметки состоит из элементов, из которых строится страница:
<h1>Привет, мир!</h1><p>Это мой первый абзац.</p>
- Элементы могут быть вложены в другие элементы:
meta,titleвheadh1,p,ulвbody
- Элементы состоят из тега или двух тегов и контента:
<meta charset="UTF-8">- элемент из отного тега пустой элемент, void-элемент<p>Это мой первый абзац.</p>- элемент из<p>- открывающий тегЭто мой первый абзац.- контент</p>- закрывающий тег
- Элементы могут содержать атрибуты, которые содержат дополнительную информацию о элементе:
href="https://example.com"- атрибут содержит адрес на который указывает ссылкаsrc="example.jpg"- атрибут содержит путь к изображению
- Код может содержать комментарии:
<!-- Изображение и ссылка -->- этот текст будет проигнорирован
Основные элементы
<!DOCTYPE html>- объявление типа документа. Типы документа стали историческим артефактом, которые должны быть включены. Это пример самого короткого типа документа.<html></html>- элемент содержит в себе всё содержимое на всей странице, и иногда его называют корневой элемент<head></head>- содержит в себе служебную информацию, подключаемые файлы и т. д. Как правило информация из этого тега не видна пользователю<meta>- содержит в себе метаданные, которые нельзя представить другими тегаи<title></title>- содержит в себе заголовок документа, отображаемый в заголовке браузера
<body></body>- содержит в себе контент, который виден пользователю<h1></h1>- заголовок<p></p>- абзац<ul></ul>- ненумерованный список<li></li>- элемент списка
<img>- изображение<a></a>- ссылка
Подробнее о <meta>
Тег meta для определения метаданных содержит атрибуты:
charset- определяет кодировку документаnameиcontent- атрибуты, работающие как ключ занчение.nameопределяет какие метаданные содержаться в теге, аcontentсодержит непосредственно данные
Пример
<meta name="description" content="Template of html document" /> Мета-тег description содержит описание страницы. (используется поисковыми системами)
<meta name="viewport" content="width=device-width, initial-scale=1.0">Meta-тег viewport сообщает браузеру о том, как именно обрабатывать размеры страницы, и изменять её масштаб.
content может содержать следующие параметры для отображения страницы:
- width - задает ширину просмотра
- initial-scale - определяет начальный маштаб страницы
- maximum-scale и minimum-scale - позволяют ограничить максимальный и минимальный масштаб
- user-scalable - указывает, может ли пользователь менять маштаб (yes/no)
Из примера
content="width=device-width, initial-scale=1.0" - устанавливается ширина страницы в соответствии с шириной экрана и определяет маштаб 1:1.
Примечание:
- для сайтов с адаптивным дизайном рекомендуется использовать:
width=device-width. - если указан атрибут width, указывать атрибут height не обязательно
initial-scale=1.0лучше указывать, так как без этого параметра при перевороте экрана контент будет маштабироваться а не перераспределяться.
Семантическая верстка
Семантическая вёрстка — это подход к написанию HTML-кода, при котором каждый элемент используется строго по своему смысловому назначению, а не только для визуального оформления.
Плюсы:
- Улучшение SEO
- Повышение доступности. (используется скринридерами)
- Упрощенная поддержка кода
- Соответствие стандартам
- Оптимизация производителдьности (меньшая вложенность)
Таблица тегов
| Тег | Описание |
|---|---|
<header> |
Вводная часть страницы (логотипб меню), шапка |
<nav> |
Навигационный блок (меню, хлебные крошки или цепочка ссылок) |
<main> |
Основное содержимое страницы с уникальным контентом |
<article> |
Самодостаточный блок контента (статьяб новостьб карточка товара) |
<section> |
Тематический раздел внутри страницы |
<aside> |
Вспомогательный, дополнительный контент (боковая колонка, цитаты, пояснения, реклама, примечания) |
<footer> |
Заключительная часть, подвал (копирайт, контакты, ссылки) |
<address> |
Контактные данные (например, в подвале) |
| Пример семантической верстки |
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Семантическая страница</title>
</head>
<body>
<!-- Шапка сайта -->
<header>
<h1>Мой блог</h1>
<p>Добро пожаловать!</p>
</header>
<!-- Навигационное меню -->
<nav>
<ul>
<li><a href="/">Главная</a></li>
<li><a href="/about">Обо мне</a></li>
<li><a href="/contacts">Контакты</a></li>
</ul>
</nav>
<!-- Основное содержимое страницы -->
<main>
<!-- Отдельная статья -->
<article>
<h2>Заголовок статьи</h2>
<p>Текст статьи. Здесь может быть полезный контент.</p>
<time datetime="2026-08-23">23 августа 2026</time>
</article>
<!-- Дополнительный раздел (например, последние записи) -->
<section>
<h3>Последние записи</h3>
<ul>
<li><a href="#">Запись 1</a></li>
<li><a href="#">Запись 2</a></li>
</ul>
</section>
</main>
<!-- Боковая панель -->
<aside>
<h4>О блоге</h4>
<p>Краткая информация о блоге и авторе.</p>
</aside>
<!-- Подвал -->
<footer>
<p>© 2026 Мой блог. Все права защищены.</p>
</footer>
</body>
</html>Элемент <div>
Элемент <div> - нужен для того, чтобы выделять элементы в отдельные блоки, и используется, как правило, для стилизации
Пример без семантической верстки (не делайте так)
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Верстка на div</title>
</head>
<body>
<!-- Шапка -->
<div class="header">
<h1>Мой блог</h1>
<p>Добро пожаловать!</p>
</div>
<!-- Навигация -->
<div class="nav">
<ul>
<li><a href="/">Главная</a></li>
<li><a href="/about">Обо мне</a></li>
<li><a href="/contacts">Контакты</a></li>
</ul>
</div>
<!-- Основной контент -->
<div class="main">
<!-- Статья -->
<div class="article">
<h2>Заголовок статьи</h2>
<p>Текст статьи. Здесь может быть полезный контент.</p>
<div class="time">23 августа 2026</div>
</div>
<!-- Раздел -->
<div class="section">
<h3>Последние записи</h3>
<ul>
<li><a href="#">Запись 1</a></li>
<li><a href="#">Запись 2</a></li>
</ul>
</div>
</div>
<!-- Боковая панель -->
<div class="aside">
<h4>О блоге</h4>
<p>Краткая информация о блоге и авторе.</p>
</div>
<!-- Подвал -->
<div class="footer">
<p>© 2026 Мой блог. Все права защищены.</p>
</div>
</body>
</html>Такой код ухудшает читаемость, доступность и SEO, поэтому везде, где это возможно, лучше использовать семантическую верстку.
Текстовые теги
| Тэг | Описание |
|---|---|
<h1></h1> - <h6></h6> |
Используется для заголовков разных уровней |
<p></p> |
Параграф |
<ul></ul><ol></ol><li></li> |
<ul> - маркеровочный список<ol> - нумерованный список<li> - элемент списка (заключается в <ul> или <ol>) |
<dl></dl><dt></dt><dd></dd> |
<dl> - список определений, который включает в себя:<dt> - термин<dd> - определение |
<span></span> |
Используется для стилизации текста |
<em></em> |
Семантический тег для акцента. По умолчанию выделяет текст курсивом |
<strong></strong> |
Семантический тег для важного значения. По умолчанию делает текст жирным |
<i></i>**<b></b>**<u></u> |
Курсив, жирный шрифт, подчеркиание. Не являются семантическими |
<q></q><blockquote></blockquote> |
Цитаты. Встраиваемые в текст и отдельным блоком соответственно. Используют атрибут cite для указания источника. |
<time></time> |
Используется для семантической разметки дат. Может собержать атрибут datetime, в котором указыватеся дата или время в машиночитаемом формате (по стандарту ISO 8601). |
Пример цитаты:
<div>
<blockquote cite="https://www.huxley.net/bnw/four.html">
<p>
Words can be like X-rays, if you use them properly—they’ll go through
anything. You read and you’re pierced.
</p>
</blockquote>
<p>—Aldous Huxley, <cite>Brave New World</cite></p>
</div>Атрибут cite указывает на источник цитаты, а элемент <cite> - строковое представление источника.
Ссылки и навигация
HTML-элемент <a> (от anchor — «якорь»), с атрибутом href определяет гиперссылку на страницу в Интернете, файл, адрес электронной почты, определённое место на странице или на что-либо ещё, на что может указывать URL-адрес.
Виды ссылок
<a href="https://example.com/">Ссылка на сайт</a><a href="ftp://example.com/file.zip">Скачать файл по FTP</a<a href="file:///C:/Users/User/Documents/file.txt">Открыть локальный файл</a><a href="https://site.com/file.pdf" download="Название файла">Скачать PDF</a><a href="">Открыть эту же страницу</a><a href="#Отзывы">Якорная ссылка. Ссылка на раздел на странице с id="Отзывы"</a><a href="docs.html#installation">Якорная ссылка на раздел на другой странице</a><a href="mailto:user@example.com">Написать на почту</a>><a href="tel:+78005553535">Позвонить</a>Атрибут target
<a href="https://www.ru" target="_self">Открыть в этой вкладке (по умолчанию)</a><a href="https://google.ru" target="_blank">Открыть в новой вкладке</a>Атрибут target с фреймами
Значения:
- _self — открывает ссылку в том же фрейме, где была нажата. Это значение используется по умолчанию.
- _parent — открывает ссылку в родительском окне, которое содержит фрейм.
- _top — покидает фрейм и открывает ссылку во всём окне браузера.
Атрибут rel
Атрибут rel задает отношения между старой и новой страницей и используется только в связке с target.
Значения:
- noopener — блокирует доступ новой вкладке к вашей странице. Это защита от потенциальных атак.
- noreferrer — скрывает адрес вашей страницы от сайта, на который ведёт ссылка.
- nofollow — говорит поисковым системам не учитывать эту ссылку при ранжировании сайтов (например, если это реклама или внешний ресурс без доверия).
<a href="https://google.com" target="_blank" rel="noopener noreferrer">Безопасная ссылка</a>Изображения и медиа
| Элемент | Описание |
|---|---|
<img> |
встраивает изображение в документ |
<picture> |
служит контейнером для одного или более элементов <source> и одного элемента <img> для обеспечения оптимальной версии изображения для различных размеров экрана |
<audio> |
используется для встраивания звукового контента в документ |
<video> |
используется для встраивания видео контента в документ используйте |
Атрибуты <img>
alt- текстовое описание изображенияsrc- URL изображенияdecoding- рекомендации браузеру по декодированию изображения (sync, async, auto)height- высота изображенияwidth- ширина изображенияloading- указывает на то, когда загружать картинку.- eager - загружает при загрузке страницы
- lazy — откладывает загрузку до момента, когда изображение появится в области видимости пользователя
title- всплывающая подсказка при наведенииsrcsetиsizes- используются для адаптивных изображений (см. пример)
Картинка в той же директории:
<img src="photo.jpg" alt="Описание фото" width="300" height="200">Картинка на другом сервере:
`<img src="https://example.com/image.jpg" alt="Описание фото" loading="lazy">`Адаптивное изображение:
<img src="default.jpg" alt="Адаптивное изображение"
srcset="small.jpg 320w, medium.jpg 480w, large.jpg 800w"
sizes="(max-width: 320px) 280px, (max-width: 480px) 440px, 800px">Примечание:
- Поддерживаемые форматы: JPEG, PNG, WebP, GIF, SVG
- Всегда заполняйте атрибут alt. Пустая строка означает, что изображение декоративное и его можно пропустить при рендеринге
- Атрибут
loading="lazy"помогает ускорить загрузку страницы, откладывая загрузку изображений, которые не видны сразу.
Атрибуты <picture>
media- позволяет определить медиавыражение, которое веб-браузер будет анализировать для выбора элемента<source>type- позволяет вам обозначить MIME-тип данных, указанных в атрибуте srcset элемента<source>
Примеры:
<picture>
<source srcset="mdn-logo-wide.png" media="(min-width: 600px)" />
<img src="mdn-logo-narrow.png" alt="MDN" />
</picture><picture>
<source srcset="mdn-logo.svg" type="image/svg+xml" />
<img src="mdn-logo.png" alt="MDN" />
</picture>Атрибуты <audio>
src- URL аудио для встраивания.autoplay- атрибут логического типа (атрибут присутствует или отсутствует). Если он указан, аудио начнёт автоматически воспроизводитьсяcontrols- если этот атрибут присутствует, браузер предложит элементы управления, позволяющие пользователю управлять воспроизведением аудиоloop- атрибут логического типа. Если он указан, проигрыватель будет автоматически возвращаться в начало при достижении конца аудиоmute- атрибут логического типа, который указывает, будет ли звук изначально отключёнpreload- указывает как загружать аудио- none - указывает, что аудио не должно предварительно загружаться
- metadata - указывает, что предварительно загружаются только метаданные аудио
- auto - указывает, что весь файл аудио может быть предварительно загружен
Атрибуты <video>
src- URL видео для встраивания.autoplay- атрибут логического типа (атрибут присутствует или отсутствует). Если он указан, видео начнёт автоматически воспроизводитьсяcontrols- если этот атрибут присутствует, браузер предложит элементы управления, позволяющие пользователю управлять воспроизведением видеоheight- высота области отображения видео в пикселяхwidth- ширина области отображения видео в пикселяхloop- атрибут логического типа. Если он указан, проигрыватель будет автоматически возвращаться в начало при достижении конца видеоmute- атрибут логического типа, который указывает, будет ли звук изначально отключёнpreload- указывает как загружать аудио- none - указывает, что аудио не должно предварительно загружаться
- metadata - указывает, что предварительно загружаются только метаданные аудио
- auto - указывает, что весь файл аудио может быть предварительно загружен
poster- URL-адрес, указывающий на постера, которое будет использовано, пока загружается видео или пока пользователь не нажмёт на кнопку воспроизведения. Если не указан, отображается первый кадр (после загрузки)
Формы
Элемент <form> нужен для сбора и отправки данных от пользователя. Внутри тега <form> размещаются элементы, с которыми пользователь будет взаимодействовать.
Атрибуты <form>
action- URL-адрес, куда будут переданы данные. Если не указать, отправятся на ту же страницуmethod- HTTP-метод. Как правилоGETиPOSTnovalidate- указывает на то, что форма не проверяется на валидностьtarget- указывает где будет отображаться ответenctype- используется вместе с методом POST, MIME-тип содержимого, которое используется, что бы передать форму на сервер- application/x-www-form-urlencoded - значение по умолчанию
- multipart/form-data - используется, если есть есть элемент
<input>с атрибутомtype="file"
Элементы внутри фрмы
| Элемент | Описание |
|---|---|
<input> |
универсальный элемнт, вид которого определяется атрибутом type |
<textarea> |
многострочное текстовое поле |
<select> |
выпадающий список |
<button> |
кнопка, вид определяется атрибутом type: submit (отправить), reset (очистить форму), button (обычная кнопка) |
<label> |
подпись (лейбл) к элементу ввода |
<fieldset> и <legend> |
помогают логически сгруппировать поля |
Значения атрибута type в <input>
- text - однострочное текстовое поле
- password - то же, что и text, но скрывает символы
- email - поле со встроенной проверкой формата email
- number - поле для ввода числе (можно задать min, max, step)
- radio - переключаль
- checkbox - флажок
- submit - кнопка отправки
Примеры:
<form action="/submit" method="POST">
<!-- Текстовое поле (имя) -->
<div class="form-group">
<label for="name">Имя *</label>
<input type="text" id="name" name="name" placeholder="Введите ваше имя" required>
</div>
<!-- Поле email -->
<div class="form-group">
<label for="email">Email *</label>
<input type="email" id="email" name="email" placeholder="example@mail.ru" required>
</div>
<!-- Поле телефон -->
<div class="form-group">
<label for="phone">Телефон</label>
<input type="tel" id="phone" name="phone" placeholder="+7 (999) 123-45-67">
</div>
<!-- Выпадающий список (пол) -->
<div class="form-group">
<label for="gender">Пол</label>
<select id="gender" name="gender">
<option value="">Не выбрано</option>
<option value="male">Мужской</option>
<option value="female">Женский</option>
</select>
</div>
<!-- Радиокнопки (предпочтения) -->
<div class="form-group">
<label>Способ связи</label>
<div class="radio-group">
<label><input type="radio" name="contact" value="email" checked> Email</label>
<label><input type="radio" name="contact" value="phone"> Телефон</label>
<label><input type="radio" name="contact" value="messenger"> Мессенджер</label>
</div>
</div>
<!-- Чекбоксы (интересы) -->
<div class="form-group">
<label>Интересы</label>
<div class="checkbox-group">
<label><input type="checkbox" name="interests" value="sport"> Спорт</label>
<label><input type="checkbox" name="interests" value="music"> Музыка</label>
<label><input type="checkbox" name="interests" value="books"> Книги</label>
</div>
</div>
<!-- Текстовая область (комментарий) -->
<div class="form-group">
<label for="comment">Комментарий</label>
<textarea id="comment" name="comment" rows="4" placeholder="Ваши пожелания..."></textarea>
</div>
<!-- Кнопка отправки -->
<button type="submit">Отправить</button>
<!-- Кнопка сброса -->
<button type="reset" style="background: #6c757d; margin-left: 10px;">Сбросить</button>
</form>Примечание:
- У каждого элемента внутри формы обязателен атрибут
name. Именно по нему на сервере будут идентифицировать введённые данные - Для подсказок используйте атрибут
placeholder - Для обязательной проверки (например, поле не должно быть пустым) добавьте атрибут
required - Для более сложной валидации часто подключают JavaScript
Тблицы
| Тег | Описание |
|---|---|
<table> |
Контейнер для всей таблицы. |
<tr> (table row) |
Строка таблицы. |
<td> (table data) |
Ячейка с данными. |
<th> (table header) |
Ячейка-заголовок (обычно выделяется жирным и центрируется). |
Пример простой таблицы:
<table>
<tr>
<th>Имя</th>
<th>Возраст</th>
</tr>
<tr>
<td>Анна</td>
<td>28</td>
</tr>
</table>Заголовок таблицы
Тег <caption> добавляет подпись к таблице (располагается сверху или снизу с помощью CSS).
<table>
<caption>Список сотрудников</caption>
...
</table>Структурные секции
Для улучшения семантики и удобства стилизации используют:
<thead>– группа заголовочных строк (шапка);<tbody>– основное тело данных (может быть несколько);<tfoot>– итоговая строка (нижний колонтитул).
Порядок: <thead>, затем <tbody>, затем <tfoot> — браузер отрендерит tfoot внизу даже при прокрутке тела.
Объединение ячеек
colspan="N"– объединяет N ячеек по горизонтали.rowspan="N"– объединяет N ячеек по вертикали.
<tr>
<td colspan="2">Объединённая ячейка на два столбца</td>
</tr>Пример таблицы:
<table>
<caption>Отчёт по продажам</caption>
<thead>
<tr>
<th scope="col">Месяц</th>
<th scope="col">Выручка</th>
<th scope="col">Прибыль</th>
</tr>
</thead>
<tbody>
<tr>
<td>Январь</td>
<td>100 000</td>
<td rowspan="2">25 000</td> <!-- объединены две строки -->
</tr>
<tr>
<td>Февраль</td>
<td>120 000</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">Итого</td>
<td>50 000</td>
</tr>
</tfoot>
</table>Доступность (a11y)
Доступность — создание интерфейсов, которыми могут пользоваться люди с различными особенностями зрения, слуха, моторики и восприятия.
Главное правило: сначала используйте нативный HTML, затем при необходимости ARIA.
<!-- Правильно -->
<button type="button">Открыть меню</button>
<!-- role не добавляет клавиатурное поведение кнопки -->
<div role="button">Открыть меню</div>ARIA
| Атрибут | Назначение |
|---|---|
aria-label |
Доступное имя без видимой подписи |
aria-labelledby |
Связь с элементом-названием |
aria-describedby |
Связь с пояснением |
aria-expanded |
Состояние раскрытого блока |
aria-controls |
Управляемый элемент |
aria-current="page" |
Текущая страница |
aria-invalid="true" |
Ошибочное значение |
aria-live |
Объявление динамических изменений |
aria-hidden="true" |
Скрытие декоративного элемента от скринридера |
<button type="button" aria-expanded="false" aria-controls="menu">Меню</button>
<nav id="menu" aria-label="Основная навигация" hidden>...</nav>JavaScript должен синхронно менять hidden и aria-expanded. Не дублируйте встроенные роли: <nav role="navigation"> избыточен.
Формы и ошибки
<label for="password">Пароль</label>
<input type="password" id="password" name="password"
aria-describedby="password-hint" minlength="8" required>
<p id="password-hint">Минимум 8 символов.</p>Для ошибочного поля после проверки можно установить aria-invalid="true" и связать понятное сообщение через aria-describedby. Ошибка должна объяснять способ исправления.
Клавиатура и фокус
Естественный порядок Tab определяется порядком HTML. tabindex="0" включает нестандартно фокусируемый элемент в порядок, tabindex="-1" позволяет сфокусировать его программно, но исключает из Tab. Положительные значения обычно не используют.
:focus-visible {
outline: 3px solid #005fcc;
outline-offset: 3px;
}Не удаляйте видимый фокус. Добавьте ссылку пропуска повторяющейся навигации:
<a href="#main-content">Перейти к основному содержимому</a>
<main id="main-content" tabindex="-1">...</main>Смысл нельзя передавать только цветом. Обеспечьте достаточный контраст, работу при увеличении масштаба, субтитры и расшифровки. Проверяйте страницу клавиатурой и, по возможности, скринридером.
SEO-основы
<title>Основы HTML — структура, формы и доступность</title>
<meta name="description"
content="Справочник по структуре, семантике, формам и доступности HTML.">
<link rel="canonical" href="https://example.com/html-guide/"><title> должен быть содержательным и уникальным. meta description кратко описывает страницу и может попасть в поисковый сниппет. canonical указывает предпочтительный абсолютный URL для дублирующегося содержимого; это подсказка, а не перенаправление.
Open Graph
<meta property="og:type" content="article">
<meta property="og:locale" content="ru_RU">
<meta property="og:site_name" content="Веб-справочник">
<meta property="og:title" content="Основы HTML">
<meta property="og:description" content="Краткая справка по HTML.">
<meta property="og:url" content="https://example.com/html-guide/">
<meta property="og:image" content="https://example.com/images/cover.jpg">
<meta property="og:image:alt" content="Обложка справочника по HTML">Open Graph управляет карточкой ссылки в поддерживающих его сервисах. Для og:url и og:image используйте абсолютные URL.
Favicon
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">Для SEO также важны логичная иерархия заголовков, обычные ссылки на важные страницы, осмысленный текст ссылок, семантика и полезное содержимое. Валидный HTML и метаданные помогают, но сами по себе не гарантируют высокую позицию.
Валидация и чистая семантика
Проверить документ можно в W3C Nu HTML Checker: https://validator.w3.org/nu/. Доступна проверка URL, файла или вставленного кода. Сначала исправляйте ошибки, затем предупреждения и проверяйте повторно.
Валидатор находит незакрытые теги, неправильную вложенность, недопустимые атрибуты, повторяющиеся id и устаревшие конструкции. Он не гарантирует удобство, безопасность и полную доступность.
Частые ошибки:
<!-- Повторяющийся id — неправильно -->
<section id="news">...</section>
<section id="news">...</section>
<!-- Вложенные интерактивные элементы — неправильно -->
<a href="/catalog"><button type="button">Каталог</button></a>
<!-- Правильно: ссылка для перехода -->
<a class="button" href="/catalog">Каталог</a>Элемент выбирают по смыслу: <button> — действие, <a> — переход, <table> — табличные данные, <blockquote> — цитата, <br> — смысловой перенос, а не отступ.
<!-- Div-суп -->
<div class="header">
<div class="title">Новости</div>
<div class="navigation"><div class="link">Главная</div></div>
</div>
<!-- Семантический вариант -->
<header>
<h1>Новости</h1>
<nav aria-label="Основная навигация"><a href="/">Главная</a></nav>
</header>Перед добавлением <div> спросите, есть ли более точный элемент и действительно ли контейнер нужен для структуры или стилизации.
Контрольный список
- есть
<!DOCTYPE html>,lang, UTF-8 иviewport; - заголовки образуют логичную структуру;
- элементы выбраны по смыслу, нет лишней вложенности;
- ссылки имеют понятный текст и корректные адреса;
- у содержательных изображений есть
alt, у декоративных —alt=""; - полям назначены
nameи связанные<label>; - кнопкам формы явно задан
type; - данные форм повторно проверяются на сервере;
- страница полностью управляется клавиатурой, фокус виден;
- смысл не передаётся только цветом;
- добавлены субтитры и расшифровки медиа;
- настроены
<title>,description, Open Graph и favicon; - разметка проверена валидатором и протестирована в браузерах.