HTML — язык разметки веб-страниц

HTML (HyperText Markup Language) — это язык гипертекстовой разметки, на котором строится каждая страница в интернете. Он описывает структуру и содержание страницы, а CSS отвечает за её внешний вид.

Уровень: начальный 25 разделов 2–3 часа

1. Что такое HTML

HTML — это язык разметки, который описывает, из каких элементов состоит веб-страница и как эти элементы связаны между собой. Он не является языком программирования в полном смысле слова: в нём нет переменных, циклов и логики — только структура.

Первая версия HTML была создана Тимом Бернерсом-Ли в начале 1990-х годов. Современный стандарт называется HTML5 — он появился в 2014 году и добавил семантические теги, встроенную поддержку видео и аудио, а также множество других возможностей.

Как работают HTML, CSS и JavaScript вместе

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

2. Структура документа

Любая HTML-страница начинается с объявления типа документа и корневого элемента <html>, внутри которого находятся две основные части: <head> (служебная информация) и <body> (видимое содержимое).

<!DOCTYPE html>           <!-- тип документа: HTML5 -->
<html lang="ru">          <!-- корневой элемент, язык страницы -->
<head>                    <!-- служебные данные -->
  <meta charset="UTF-8">  <!-- кодировка текста -->
  <title>Моя страница</title>  <!-- название вкладки -->
</head>
<body>                    <!-- видимое содержимое -->
  <h1>Привет, мир!</h1>   <!-- заголовок -->
</body>
</html>
Скелет страницы — <!DOCTYPE html>, <html>, <head>, <body>.

Назначение элементов head

ЭлементНазначение
<meta charset>указывает кодировку текста (обычно UTF-8)
<meta name="viewport">адаптация под мобильные устройства
<meta name="description">краткое описание для поисковых систем
<title>заголовок вкладки браузера и поиска
<link rel="stylesheet">подключение файла стилей CSS

3. Текстовая разметка

Заголовки

Заголовки обозначаются тегами от <h1> до <h6>. Первый отвечает за главный заголовок страницы, следующие — за подзаголовки и логические уровни вложенности.

<h1>Главный заголовок</h1>
<h2>Раздел 1</h2>
<h3>Подраздел 1.1</h3>
<h2>Раздел 2</h2>
На странице должен быть только один тег <h1>. Не пропускай уровни (например, с h2 сразу на h4) — это нарушает логическую иерархию и вредит доступности.

Абзацы и выделение текста

<p>Обычный абзац текста.</p>
<p>Слово <strong>важное</strong> и <em>выделенное</em>.</p>
<p>Можно сделать <mark>отметку маркером</mark>.</p>

strong — это смысловое выделение важности, em — смысловое акцентирование. Их стоит отличать от визуальных <b> и <i>, которые не несут смысла.

Переносы и разделители

<p>Первая строка<br>вторая строка</p>
<hr>   <!-- горизонтальная линия-разделитель -->
Тег <br> стоит использовать редко — только для переносов внутри одного блока, например в стихах или адресах. Для разделения абзацев всегда используй <p>.

4. Ссылки и изображения

Ссылки

<a href="https://example.com">Внешняя ссылка</a>
<a href="about.html">Относительная ссылка</a>
<a href="page.html" target="_blank">Открыть в новой вкладке</a>

Атрибут target="_blank" открывает ссылку в новом окне. Чтобы перейти к нужному месту страницы, используют якоря — ссылку на идентификатор элемента.

<a href="#section2">Перейти ко второму разделу</a>

<h2 id="section2">Второй раздел</h2>

Абсолютные пути содержат полный адрес с доменом (https://site.ru/page.html), а относительные указывают путь от текущего файла (img/photo.jpg, ../css/style.css).

Изображения

<img src="images/cat.jpg" alt="Рыжий кот на диване">
<img src="logo.png" alt="Логотип компании" width="200" height="100">
Атрибут alt обязателен: он описывает изображение, если оно не загрузилось, и озвучивается программами чтения с экрана. Не используй alt для картинок-декораций — оставь его пустым (alt="").

5. Списки и таблицы

Списки

Маркированный список <ul>, нумерованный — <ol>. Каждый пункт — <li>.

<ul>
  <li>Молоко</li>
  <li>Хлеб</li>
  <li>Яблоки</li>
</ul>

<ol>
  <li>Открыть файл</li>
  <li>Внести правки</li>
  <li>Сохранить</li>
</ol>

Таблицы

<table>
  <thead>
    <tr><th>Имя</th><th>Возраст</th></tr>
  </thead>
  <tbody>
    <tr><td>Иван</td><td>25</td></tr>
    <tr><td>Мария</td><td>30</td></tr>
  </tbody>
</table>

Секции <thead>, <tbody> и <tfoot> помогают браузеру и скринридерам понять структуру таблицы. Для объединения ячеек применяются атрибуты colspan (по горизонтали) и rowspan (по вертикали).

<tr>
  <td colspan="2">Ячейка на две колонки</td>
</tr>
Таблицы предназначены для табличных данных, а не для вёрстки страниц. Для раскладки макета используй flexbox и grid — об этом в курсе по CSS.

6. Формы

Формы собирают данные от пользователя. Основные элементы: <form>, <input>, <textarea>, <select> и кнопки.

<form action="/register" method="post">
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" placeholder="you@mail.ru" required>

  <label for="pass">Пароль:</label>
  <input type="password" id="pass" name="pass" required>

  <p>
    <input type="checkbox" id="agree" name="agree">
    <label for="agree">Согласен с условиями</label>
  </p>

  <p>
    <input type="radio" id="male" name="gender" value="m">
    <label for="male">Мужской</label>
    <input type="radio" id="female" name="gender" value="f">
    <label for="female">Женский</label>
  </p>

  <select name="city">
    <option value="msk">Москва</option>
    <option value="spb">Санкт-Петербург</option>
  </select>

  <textarea name="message" rows="4"></textarea>

  <input type="submit" value="Отправить">
</form>

Основные типы поля input

ТипНазначение
textодна строка текста
emailадрес электронной почты (с проверкой)
passwordпароль, символы скрыты
checkboxодин или несколько флажков
radioвыбор одного из нескольких вариантов
submitкнопка отправки формы
Атрибут required делает поле обязательным, а placeholder показывает подсказку. Атрибут for в <label> связывает подпись с полем по id — клик по подписи активирует поле.

7. Семантические теги HTML5

Семантика означает «смысл». Семантические теги описывают, что именно находится внутри, а не только как это выглядит.

<header>   Шапка страницы или раздела
<nav>      Навигация
<main>     Основное содержимое (одно на странице)
<section>  Логический раздел
<article>  Самодостаточная статья или запись
<aside>    Боковая панель / сопутствующий контент
<footer>   Подвал страницы или раздела
<figure>   Иллюстрация с подписью
<figure>
  <img src="chart.png" alt="График роста продаж">
  <figcaption>Рост продаж в 2026 году</figcaption>
</figure>
Семантические теги не дают визуальных различий (для этого всё равно нужен CSS), но делают страницу понятной для поисковых систем, браузеров и программ чтения с экрана.

8. Медиа

Видео и аудио

<video src="movie.mp4" controls width="640">
  Ваш браузер не поддерживает видео.
</video>

<audio src="song.mp3" controls loop></audio>

Атрибут controls показывает панель управления, autoplay — автозапуск, loop — зацикливание, muted — звук без громкости.

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

Встраивание видео с YouTube

Любое видео на YouTube можно встроить через <iframe>:

<iframe width="560" height="315"
  src="https://www.youtube.com/embed/VIDEO_ID"
  title="Урок по HTML" frameborder="0"
  allowfullscreen></iframe>

<iframe> позволяет встроить на страницу любой другой документ или сервис: карты, виджеты, онлайн-редакторы.

9. Атрибуты и валидация

Глобальные атрибуты

АтрибутНазначение
idуникальный идентификатор элемента
classкласс для стилизации (может повторяться)
titleвсплывающая подсказка
langязык содержимого элемента
data-*произвольные данные для JavaScript
hiddenскрыть элемент
<div id="header" class="container" lang="ru">
  <button data-action="save">Сохранить</button>
</div>

<!-- в JavaScript: -->
// document.querySelector('[data-action]')

Проверка кода

Один элемент может иметь несколько классов через пробел: class="card card--big". Важно, чтобы у элемента был только один id, и он не повторялся на странице.

Проверяй разметку на официальном валидаторе — validator.w3.org. Он найдёт пропущенные закрывающие теги, ошибки в атрибутах и нарушения стандартов.
Неправильно закрытые теги и повторяющиеся id могут сломать вёрстку и JavaScript. Иерархия тегов должна быть строго вложенной: <p><strong>текст</strong></p>, а не наоборот.

10. Комментарии и основы доступности

Комментарии

Комментарии в HTML не отображаются на странице, но видны в коде. Они помогают разобраться в структуре.

<!-- Это комментарий -->

<!--
  Многострочный
  комментарий
-->
Комментарии — это не документ. Не пиши в них данные пользователей и не храни секреты: весь код страницы доступен любому посетителю через «Просмотр кода».

Основы доступности

Доступность (a11y) помогает людям с ограниченными возможностями пользоваться сайтом. Основные принципы:

<button aria-label="Закрыть окно">&times;</button>

<div aria-hidden="true">декоративная иконка</div>
Простая проверка доступности: закрой глаза или выключи монитор и попробуй понять страницу с помощью скринридера. Хорошая семантика из раздела 7 — уже половина пути к доступности.

11. Спецсимволы и HTML-сущности

Символы <, > и & имеют специальное значение в HTML. Чтобы показать их как текст, используют сущности — именованные или числовые коды.

&lt;    —  <
&gt;    —  >
&amp;   —  &
&nbsp;  —  неразрывный пробел
&copy;   —  ©
&times; —  ×

Числовой вариант записывается так: &#169; — тоже знак ©.

Амперсанд в query-строках ссылок и внутри текста тоже приходится экранировать: ?lang=ru&amp;mode=dark.
СущностьСимволПрименение
&trade;™знак торговой марки
&mdash;—длинное тире
&laquo;«кавычка ёлочка
Во вложенных в разметку примерах сущности удваиваются: если внутри code стоит <b>, в исходнике это &lt;b&gt;.

12. Метатеги и базовое SEO

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

<meta name="description" content="Курс HTML: основы разметки">
<meta name="keywords" content="HTML, разметка">
<meta property="og:title" content="HTML для начинающих">
<meta property="og:image" content="cover.png">
<link rel="canonical" href="https://site.ru/html/">
Один title на страницу, уникальный и начинающийся с главной сути: «HTML — полный курс | IT Уроки».
Полное SEO-руководство — в курсе SEO. В HTML важно лишь подложить правильную семантику и мета-поля.

13. Графика: Canvas и SVG

Рисовать прямо на странице можно двумя способами: SVG — векторная разметка, Canvas — программное рисование через JavaScript.

SVG остаётся частью HTML и масштабируется без потерь:

<svg width="100" height="100" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="40" fill="gold" stroke="orange"/>
</svg>

Canvas — область, где пиксели рисует JavaScript:

<canvas id="chart" width="400" height="200"></canvas>
<script>
  const ctx = document.getElementById("chart").getContext("2d");
  ctx.fillStyle = "steelblue";
  ctx.fillRect(10, 10, 380, 180);
</script>
ЗадачаИнструмент
иконки и логотипыSVG
графики с анимациейCanvas
видео-эффектыCanvas + WebGL
Canvas не хранит «фигуры» — только пиксели. Сохраняй спрайты и прозрачность программно, иначе после правки придётся перерисовывать.

14. Структура многостраничного сайта

Настоящий сайт обычно состоит из нескольких страниц. Порядок в папках упрощает обновление и работу в команде.

site/
├── index.html
├── about.html
├── css/
│   └── style.css
├── js/
│   └── main.js
└── img/
    ├── logo.svg
    └── hero.webp
Следите за регистром имён файлов: About.html и about.html на разных хостингах ведут себя по-разному. Договаривайтесь на нижний регистр.
Когда страниц станет много, собери проект на фреймворке — Vue, React (курсы Vue и React).

15. Viewport и адаптивная вёрстка

Сайт должен одинаково читаться на телефоне и мониторе. Ключ адаптивности — метатег viewport в <head>:

<meta name="viewport" content="width=device-width, initial-scale=1">

Без него браузер телефона включает «режим совместимости» и уменьшает страницу как картинку. После добавления тега верстка начинает реагировать на ширину экрана.

Держите «целевую» ширину 360–1400 px: это самые массовые девайсы.
Не задавайте жёсткие фиксированные размеры контейнеров в пикселях — на мобильном они вылезут за экран.
Оформление адаптива относится к CSS — курс CSS.

16. Продвинутая доступность: ARIA и фокус

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

<div role="button" tabindex="0" aria-pressed="false">Вкл</div>
<nav aria-label="Основная навигация">...</nav>
АтрибутНазначение
roleроль элемента (button, dialog, alert)
aria-labelимя для тех, кто не видит текст
aria-expandedоткрыто/закрыто меню
aria-liveобъявлять динамические изменения
Сначала используйте настоящие теги (<button>, <nav>) — ARIA нужен только там, где наполнение нельзя выразить стандартными элементами.
«ARIA — как пилюля: полезен в малых дозах, опасен в больших». Перегруженная разметка путает скринридеры хуже отсутствия ролей.

17. Встраиваемый контент: iframe и сторонние виджеты

Карты, видео, виджеты — всё это встраивается через <iframe>. Это «окно» на чужую страницу внутри вашей.

<iframe src="https://maps.example/embed" 
        width="600" height="450" 
        loading="lazy" title="Карта проезда"></iframe>
<iframe sandbox="allow-scripts" src="widget.html"></iframe>
Без атрибута sandbox чужой iframe может подгружать скрипты с доступом к cookie. Ограничивайте права встраиваемого контента.
Безопасность внешнего кода — курс OWASP.

18. Оптимизация разметки для парсеров и индексации

Поисковики и парсеры читают HTML как документ: чистый порядок заголовков и логичная иерархия страницы работают на SEO лучше любой магии.

<table>
  <caption>Расходы по кварталам</caption>
  <thead>...</thead>
</table>
Прогоните страницу через валидатор (раздел 9) и проверьте в Search Console, какие элементы поисковик не распознал.
Бессмысленные div#wrapper вместо семантических тегов читаемы, но не дают парсеру подсказок о структуре. Стройте на <main>, <article>, <nav>.
Метатеги, Open Graph и микроразметка — в курсе SEO.

19. Микроразметка Schema.org: понятные данные поисковикам

Микроразметка структурирует контент: рецепты, товары, статьи и отзывы превращаются в расширенные сниппеты — звёзды, цены и другие элементы прямо в выдаче поисковика.

<div itemscope itemtype="https://schema.org/Article">
  <h2 itemprop="headline">Как настроить Nginx</h2>
  <meta itemprop="datePublished" content="2026-09-19"/>
  <span itemprop="author">IT Уроки</span>
</div>
Начинайте с FAQ и Article: они дают заметный визуальный эффект и проще всего проверяются инструментами.
Не размечайте скрытый или дублирующий контент: поисковик считает это обманом и может убрать сайт из сниппетов.

20. Предзагрузка ресурсов: preload, prefetch и defer

Подсказки браузеру, какие файлы важны, — современная замена «скриптам в конце страницы». Атрибуты preload и prefetch управляют приоритетами загрузки ресурсов.

<link rel="preload" href="fonts.woff2" as="font">
<link rel="prefetch" href="next-page.html">
<script src="app.js" defer></script>
Проверяйте эффект в Lighthouse: подсказка «Preload key requests» прямо указывает, что стоит подгрузить заранее.
Переусердствуйте с preload — и он съест трафик и память пользователя. Подгружайте только то, что реально нужно первой «краске» страницы.

21. Web Components: свои HTML-теги

Web Components позволяют инкапсулировать разметку, стили и логику в переиспользуемый тег — например <my-rating>, который работает без фреймворка.

class MyRating extends HTMLElement {
  connectedCallback() {
    this.innerHTML = `Рейтинг: ${this.getAttribute('value')} из 5`;
  }
}
customElements.define('my-rating', MyRating);
Web Components подходят для виджетов на чужих сайтах: shadow DOM не сломает CSS соседнего проекта, а интеграция занимает пару строк.
Компоненты требуют JavaScript: не закладывайте критичный для SEO контент только внутрь компонента без дубля в HTML.

22. Вёрстка писем: HTML для email-рассылок

Письма — это HTML с ограничениями 15-летней давности: табличная вёрстка, инлайновые стили и никакого JavaScript. Почтовые клиенты строже любых браузеров.

<table role="presentation" width="600" cellpadding="0">
  <tr>
    <td style="font-family:Arial; padding:20px;">
      Привет! Это наша рассылка.
    </td>
  </tr>
</table>
Держите вёрстку в одном шаблоне и подставляйте контент сервером — ручное копирование писем ненадёжно и медленно.
Медиазапросы и <style> в шапке понимают лишь часть клиентов: для мобильных делайте одноколоночную вложенную таблицу, а не надейтесь на media queries.

23. Продвинутые элементы форм

Раздел 6 знакомит с базовыми полями. В реальных формах пригодятся ещё несколько полезных элементов — от выбора файла до подсказок при вводе.

<input type="file" accept="image/*">   <!-- загрузка файла -->
<input type="date" min="2026-01-01">   <!-- календарь -->

<input list="cities" placeholder="Начните печатать">
<datalist id="cities">
  <option value="Москва">
  <option value="Санкт-Петербург">
  <option value="Казань">
</datalist>

Элемент <datalist> даёт текстовому полю список подсказок: пользователь может выбрать готовый вариант или ввести свой. <fieldset> и <legend> группируют связанные поля — это и структура, и доступность.

<fieldset>
  <legend>Способ доставки</legend>
  <label><input type="radio" name="delivery" value="courier"> Курьер</label>
  <label><input type="radio" name="delivery" value="pickup"> Самовывоз</label>
</fieldset>

Чтобы проверять ввод, которого нет в типах браузера, используй атрибут pattern с регулярным выражением и title для подсказки:

<input type="text" name="phone" pattern="[0-9+]{11,}" 
       title="Телефон: только цифры, 11+ символов" required>
Если форма не отправляется и поле подсвечено красным — открой DevTools и посмотри сообщение валидации под полем. Чаще всего дело в pattern или отсутствии required.
Не полагайся только на валидацию браузера: данные с формы проверяет и сервер. Клиентская проверка — это удобство, серверная — безопасность (курс OWASP).

24. Интерактив без JavaScript: details, dialog и popover

Часть интерактива HTML умеет из коробки. Раскрывающийся блок <details> с заголовком <summary> работает без единой строчки скриптов:

<details>
  <summary>Как вернуть товар?</summary>
  <p>Вернуть можно в течение 14 дней с чеком и упаковкой.</p>
</details>

<!-- атрибут open делает блок раскрытым по умолчанию -->
<details open>
  <summary>Гарантия</summary>
  <p>Официальная гарантия — 12 месяцев.</p>
</details>

Модальное окно <dialog> вызывается методом showModal() и закрывается кнопкой Esc — фокус и фон уже продуманы браузером:

<dialog id="modal">
  <h3>Подтверждение</h3>
  <p>Удалить этот файл?</p>
  <form method="dialog">
    <button value="cancel">Отмена</button>
    <button value="ok">Удалить</button>
  </form>
</dialog>

Атрибут popover превращает любой элемент во всплывающую подсказку или меню без JavaScript — браузер управляет показом и кликом мимо:

<button popovertarget="menu">Меню</button>
<ul id="menu" popover>
  <li>Профиль</li>
  <li>Настройки</li>
  <li>Выйти</li>
</ul>
Все три конструкции — прогрессивное улучшение: если браузер старше, контент показывается статично, но ничего не ломается.
Модальное окно с фокусами и закрытием по фону — в курсе JavaScript; здесь достаточно родных возможностей HTML.
popover и dialog по умолчанию «всплывают» поверх страницы — не вкладывай в них критичный для SEO контент, дубль остаётся в обычном HTML.

25. Favicon и оформление вкладки

Значок сайта — это не только favicon.ico. Хороший набор покрывает вкладку десктопа, мобильные закладки и рабочие столы:

<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#2563eb">
<meta name="theme-color" content="#2563eb">
Самый простой рабочий минимум: favicon.svg (или PNG) + apple-touch-icon. Проверить результат проще всего, открыв сайт на телефоне через закладку.

Что дальше

Ты изучил основы HTML: структуру документа, текстовую разметку, ссылки, изображения, списки, таблицы, формы, семантику, медиа и атрибуты. Теперь страница имеет структуру, но ещё выглядит некрасиво и «голой». Следующий логичный шаг — изучение CSS, чтобы превратить каркас в аккуратный и привлекательный дизайн. Когда закончишь, проверьте себя в тестах по HTML и CSS и соберите первый проект в Практике: лендинг.

← Вернуться к курсам