HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>4 сен 2025</li>
2 <ul><li>4 сен 2025</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Разбираем, для чего нужен тег &lt; body &gt; в HTML и как его использовать.</p>
4 </ul><p>Разбираем, для чего нужен тег &lt; body &gt; в HTML и как его использовать.</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
6 <p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6 <p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
7 <p>HTML-страница состоит из двух больших частей: "головы" и "тела". В "голове" (<em>&lt;head&gt;</em>) хранится служебная информация - например, название страницы и ссылки на стили. А в "теле" (&lt;body&gt;) находится всё, что видит пользователь: заголовки, тексты, картинки, кнопки, видео.</p>
7 <p>HTML-страница состоит из двух больших частей: "головы" и "тела". В "голове" (<em>&lt;head&gt;</em>) хранится служебная информация - например, название страницы и ссылки на стили. А в "теле" (&lt;body&gt;) находится всё, что видит пользователь: заголовки, тексты, картинки, кнопки, видео.</p>
8 <p>Без &lt;body&gt; сайт не сможет полноценно работать: браузеры, конечно, подставят его автоматически, но правильная и понятная разметка всегда должна содержать этот тег.</p>
8 <p>Без &lt;body&gt; сайт не сможет полноценно работать: браузеры, конечно, подставят его автоматически, но правильная и понятная разметка всегда должна содержать этот тег.</p>
9 <p>В этой статье мы разберём, что такое &lt;body&gt;, какие у него есть атрибуты, какие элементы можно размещать внутри и как он влияет на стили и работу скриптов.</p>
9 <p>В этой статье мы разберём, что такое &lt;body&gt;, какие у него есть атрибуты, какие элементы можно размещать внутри и как он влияет на стили и работу скриптов.</p>
10 <p><strong>Содержание</strong></p>
10 <p><strong>Содержание</strong></p>
11 <ul><li><a>Где находится тег &lt;body&gt;</a></li>
11 <ul><li><a>Где находится тег &lt;body&gt;</a></li>
12 <li><a>Какие элементы можно размещать в &lt;body&gt;</a></li>
12 <li><a>Какие элементы можно размещать в &lt;body&gt;</a></li>
13 <li><a>Атрибуты тега &lt;body&gt;</a></li>
13 <li><a>Атрибуты тега &lt;body&gt;</a></li>
14 <li><a>Что будет, если пропустить тег &lt;body&gt;</a></li>
14 <li><a>Что будет, если пропустить тег &lt;body&gt;</a></li>
15 <li><a>Как взаимодействуют скрипты внутри &lt;body&gt; взаимодействуют с DOM</a></li>
15 <li><a>Как взаимодействуют скрипты внутри &lt;body&gt; взаимодействуют с DOM</a></li>
16 <li><a>Как стилизовать &lt;body&gt; с помощью CSS</a></li>
16 <li><a>Как стилизовать &lt;body&gt; с помощью CSS</a></li>
17 <li><a>Доступность контента в &lt;body&gt;</a></li>
17 <li><a>Доступность контента в &lt;body&gt;</a></li>
18 </ul><p>Тег &lt;body&gt; всегда идёт после &lt;head&gt; и заканчивается перед закрывающим тегом &lt;/html&gt;. Всё, что вы хотите показать пользователю, нужно писать именно внутри него.</p>
18 </ul><p>Тег &lt;body&gt; всегда идёт после &lt;head&gt; и заканчивается перед закрывающим тегом &lt;/html&gt;. Всё, что вы хотите показать пользователю, нужно писать именно внутри него.</p>
19 <p>Простейшая страница с &lt;body&gt; выглядит так:</p>
19 <p>Простейшая страница с &lt;body&gt; выглядит так:</p>
20 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Пример страницы&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Заголовок страницы&lt;/h1&gt; &lt;p&gt;Это абзац текста.&lt;/p&gt; &lt;img src="photo.jpg" alt="Фото"&gt; &lt;/body&gt; &lt;/html&gt;<p>В этом примере в теле страницы находятся заголовок, абзац и картинка. Всё это браузер показывает пользователю.</p>
20 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Пример страницы&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Заголовок страницы&lt;/h1&gt; &lt;p&gt;Это абзац текста.&lt;/p&gt; &lt;img src="photo.jpg" alt="Фото"&gt; &lt;/body&gt; &lt;/html&gt;<p>В этом примере в теле страницы находятся заголовок, абзац и картинка. Всё это браузер показывает пользователю.</p>
21 <p>Важно помнить: в одном HTML-документе может быть только один &lt;body&gt;. Если поставить два и больше, браузер начнёт "путаться", и результат будет непредсказуемым.</p>
21 <p>Важно помнить: в одном HTML-документе может быть только один &lt;body&gt;. Если поставить два и больше, браузер начнёт "путаться", и результат будет непредсказуемым.</p>
22 <p>Внутри &lt;body&gt; можно размещать почти всё содержимое сайта. Именно здесь находятся тексты, картинки, видео, таблицы, формы и кнопки. То есть всё то, с чем взаимодействует пользователь.</p>
22 <p>Внутри &lt;body&gt; можно размещать почти всё содержимое сайта. Именно здесь находятся тексты, картинки, видео, таблицы, формы и кнопки. То есть всё то, с чем взаимодействует пользователь.</p>
23 <p>Есть только одно ограничение: теги, которые относятся к "голове" документа, - например, &lt;title&gt;, &lt;meta&gt;, &lt;link&gt; - внутри &lt;body&gt; использовать нельзя. Для них отведён &lt;head&gt;.</p>
23 <p>Есть только одно ограничение: теги, которые относятся к "голове" документа, - например, &lt;title&gt;, &lt;meta&gt;, &lt;link&gt; - внутри &lt;body&gt; использовать нельзя. Для них отведён &lt;head&gt;.</p>
24 <p>А вот что можно добавлять в тело страницы:</p>
24 <p>А вот что можно добавлять в тело страницы:</p>
25 <ul><li><strong>Тексты и заголовки</strong> - от &lt;h1&gt; до &lt;h6&gt;, абзацы &lt;p&gt;, цитаты &lt;blockquote&gt;.</li>
25 <ul><li><strong>Тексты и заголовки</strong> - от &lt;h1&gt; до &lt;h6&gt;, абзацы &lt;p&gt;, цитаты &lt;blockquote&gt;.</li>
26 <li><strong>Списки</strong> - нумерованные &lt;ol&gt;, маркированные &lt;ul&gt;, а также списки описаний &lt;dl&gt;.</li>
26 <li><strong>Списки</strong> - нумерованные &lt;ol&gt;, маркированные &lt;ul&gt;, а также списки описаний &lt;dl&gt;.</li>
27 <li><strong>Мультимедиа</strong> - изображения &lt;img&gt;, видео &lt;video&gt;, аудио &lt;audio&gt;, анимации и SVG-графику.</li>
27 <li><strong>Мультимедиа</strong> - изображения &lt;img&gt;, видео &lt;video&gt;, аудио &lt;audio&gt;, анимации и SVG-графику.</li>
28 <li><strong>Формы и таблицы</strong> - поля ввода, кнопки, таблицы, индикаторы загрузки, прогресс-бары.</li>
28 <li><strong>Формы и таблицы</strong> - поля ввода, кнопки, таблицы, индикаторы загрузки, прогресс-бары.</li>
29 <li><strong>Структурные блоки</strong> - контейнеры &lt;div&gt; и &lt;span&gt;, а также семантические элементы вроде &lt;header&gt;, &lt;nav&gt;, &lt;main&gt;, &lt;footer&gt;.</li>
29 <li><strong>Структурные блоки</strong> - контейнеры &lt;div&gt; и &lt;span&gt;, а также семантические элементы вроде &lt;header&gt;, &lt;nav&gt;, &lt;main&gt;, &lt;footer&gt;.</li>
30 <li><strong>Скрипты</strong> - с помощью тега &lt;script&gt; можно подключать JavaScript.</li>
30 <li><strong>Скрипты</strong> - с помощью тега &lt;script&gt; можно подключать JavaScript.</li>
31 </ul><p>Главное - соблюдать правила вложения. Допустим, тег &lt;li&gt; (пункт списка) должен находиться только внутри &lt;ul&gt; или &lt;ol&gt;, а не сам по себе.</p>
31 </ul><p>Главное - соблюдать правила вложения. Допустим, тег &lt;li&gt; (пункт списка) должен находиться только внутри &lt;ul&gt; или &lt;ol&gt;, а не сам по себе.</p>
32 <p>С помощью атрибутов можно задавать характеристики страницы: стили, язык текста и дополнительные данные или реакцию на действия пользователя.</p>
32 <p>С помощью атрибутов можно задавать характеристики страницы: стили, язык текста и дополнительные данные или реакцию на действия пользователя.</p>
33 <p>Атрибуты бывают трёх видов:</p>
33 <p>Атрибуты бывают трёх видов:</p>
34 <ul><li><strong>Глобальные</strong> - их можно использовать почти при любом HTML-теге.</li>
34 <ul><li><strong>Глобальные</strong> - их можно использовать почти при любом HTML-теге.</li>
35 <li><strong>Событийные</strong> - позволяют запускать JavaScript при действиях пользователя.</li>
35 <li><strong>Событийные</strong> - позволяют запускать JavaScript при действиях пользователя.</li>
36 <li><strong>Устаревшие</strong> - они сохранились со времён старого HTML, но сегодня их лучше не использовать, вместо них применяют CSS.</li>
36 <li><strong>Устаревшие</strong> - они сохранились со времён старого HTML, но сегодня их лучше не использовать, вместо них применяют CSS.</li>
37 </ul><p>Глобальные атрибуты (class, id, lang, style) описывают свойства элемента:</p>
37 </ul><p>Глобальные атрибуты (class, id, lang, style) описывают свойства элемента:</p>
38 <p><strong>id</strong> - уникальный идентификатор страницы (обычно у &lt;body&gt; он единственный).</p>
38 <p><strong>id</strong> - уникальный идентификатор страницы (обычно у &lt;body&gt; он единственный).</p>
39 &lt;body id="main-page"&gt; ... &lt;/body&gt;<p>С его помощью можно, например, легко находить body в JavaScript:</p>
39 &lt;body id="main-page"&gt; ... &lt;/body&gt;<p>С его помощью можно, например, легко находить body в JavaScript:</p>
40 <p><strong>HTML</strong></p>
40 <p><strong>HTML</strong></p>
41 &lt;body id="app"&gt;<p><strong>JS</strong></p>
41 &lt;body id="app"&gt;<p><strong>JS</strong></p>
42 const body = document.getElementById("app"); body.style.backgroundColor = "beige";<p>Или назначать стиль для конкретной страницы в многооконном сайте:</p>
42 const body = document.getElementById("app"); body.style.backgroundColor = "beige";<p>Или назначать стиль для конкретной страницы в многооконном сайте:</p>
43 <p><strong>CSS</strong></p>
43 <p><strong>CSS</strong></p>
44 body#app { background: lightblue; }<p>Здесь для страницы с идентификатором app назначается голубой фон, при этом другие страницы сайта могут иметь другой стиль.</p>
44 body#app { background: lightblue; }<p>Здесь для страницы с идентификатором app назначается голубой фон, при этом другие страницы сайта могут иметь другой стиль.</p>
45 <p>class - классы для стилизации и работы скриптов. Атрибут class задаёт имя (или несколько имён) класса элемента.</p>
45 <p>class - классы для стилизации и работы скриптов. Атрибут class задаёт имя (или несколько имён) класса элемента.</p>
46 <p>Например:</p>
46 <p>Например:</p>
47 &lt;body class="homepage dark-theme user-logged-in"&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Это пример, где у &amp;lt;body&amp;gt; сразу три класса.&lt;/p&gt; &lt;/body&gt;<p><strong>CSS</strong></p>
47 &lt;body class="homepage dark-theme user-logged-in"&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Это пример, где у &amp;lt;body&amp;gt; сразу три класса.&lt;/p&gt; &lt;/body&gt;<p><strong>CSS</strong></p>
48 body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } /* Класс homepage - оформление главной страницы */ body.homepage { background: lightblue; } /* Класс dark-theme - тёмная тема */ body.dark-theme { background: #111; color: #eee; } /* Класс user-logged-in - пользователь авторизован */ body.user-logged-in::before { content: "✔ Пользователь в системе"; display: block; margin-bottom: 15px; color: limegreen; font-weight: bold; }<p>В результате получим:</p>
48 body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } /* Класс homepage - оформление главной страницы */ body.homepage { background: lightblue; } /* Класс dark-theme - тёмная тема */ body.dark-theme { background: #111; color: #eee; } /* Класс user-logged-in - пользователь авторизован */ body.user-logged-in::before { content: "✔ Пользователь в системе"; display: block; margin-bottom: 15px; color: limegreen; font-weight: bold; }<p>В результате получим:</p>
49 <em>Скриншот: Google Chrome / Skillbox Media</em><p>style - встроенные стили (inline CSS). Это CSS-правила, которые записаны прямо в теге &lt;body&gt; с помощью атрибута style, а не во внешнем файле и не в блоке &lt;style&gt;. Они применяются ко всей видимой части документа.</p>
49 <em>Скриншот: Google Chrome / Skillbox Media</em><p>style - встроенные стили (inline CSS). Это CSS-правила, которые записаны прямо в теге &lt;body&gt; с помощью атрибута style, а не во внешнем файле и не в блоке &lt;style&gt;. Они применяются ко всей видимой части документа.</p>
50 &lt;body style="background-color: lightblue; color: darkblue; font-family: Arial, sans-serif;"&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Это пример использования атрибута style у &amp;lt;body&amp;gt;.&lt;/p&gt; &lt;/body&gt;<p>Здесь:</p>
50 &lt;body style="background-color: lightblue; color: darkblue; font-family: Arial, sans-serif;"&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Это пример использования атрибута style у &amp;lt;body&amp;gt;.&lt;/p&gt; &lt;/body&gt;<p>Здесь:</p>
51 <ul><li>background-color: lightblue; - фон страницы голубой;</li>
51 <ul><li>background-color: lightblue; - фон страницы голубой;</li>
52 <li>color: darkblue; - цвет текста тёмно-синий;</li>
52 <li>color: darkblue; - цвет текста тёмно-синий;</li>
53 <li>font-family: Arial, sans-serif; - весь текст будет набран гарнитурой Arial.</li>
53 <li>font-family: Arial, sans-serif; - весь текст будет набран гарнитурой Arial.</li>
54 </ul><p>Встроенные стили используют редко, в основном при тестах или для быстрых правок. В реальной разработке лучше подключать CSS с помощью тега &lt;style&gt; или отдельного файла - так код будет чище и гибче.</p>
54 </ul><p>Встроенные стили используют редко, в основном при тестах или для быстрых правок. В реальной разработке лучше подключать CSS с помощью тега &lt;style&gt; или отдельного файла - так код будет чище и гибче.</p>
55 <p>lang - указывает язык содержимого страницы. Обычно атрибут lang ставят в &lt;html&gt;, но иногда его нужно указать именно у &lt;body&gt; - например, если язык содержимого отличается от языка документа в целом:</p>
55 <p>lang - указывает язык содержимого страницы. Обычно атрибут lang ставят в &lt;html&gt;, но иногда его нужно указать именно у &lt;body&gt; - например, если язык содержимого отличается от языка документа в целом:</p>
56 &lt;html lang="en"&gt; &lt;head&gt; &lt;title&gt;Многоязычный сайт&lt;/title&gt; &lt;/head&gt; &lt;body lang="ru"&gt; &lt;h1&gt;Добро пожаловать!&lt;/h1&gt; &lt;/body&gt; &lt;/html&gt;<p>Здесь:</p>
56 &lt;html lang="en"&gt; &lt;head&gt; &lt;title&gt;Многоязычный сайт&lt;/title&gt; &lt;/head&gt; &lt;body lang="ru"&gt; &lt;h1&gt;Добро пожаловать!&lt;/h1&gt; &lt;/body&gt; &lt;/html&gt;<p>Здесь:</p>
57 <ul><li>&lt;html lang="en"&gt; - английский устанавливается как базовый (например, для метаданных и служебных частей).</li>
57 <ul><li>&lt;html lang="en"&gt; - английский устанавливается как базовый (например, для метаданных и служебных частей).</li>
58 <li>&lt;body lang="ru"&gt; - указывает на то, что страница русскоязычная.</li>
58 <li>&lt;body lang="ru"&gt; - указывает на то, что страница русскоязычная.</li>
59 </ul><p><strong>dir</strong> - направление текста:</p>
59 </ul><p><strong>dir</strong> - направление текста:</p>
60 <ul><li>ltr - слева направо (по умолчанию для русского, английского);</li>
60 <ul><li>ltr - слева направо (по умолчанию для русского, английского);</li>
61 <li>rtl - справа налево (арабский, иврит);</li>
61 <li>rtl - справа налево (арабский, иврит);</li>
62 <li>auto - браузер определяет автоматически.</li>
62 <li>auto - браузер определяет автоматически.</li>
63 </ul>&lt;body dir="rtl"&gt; &lt;h1&gt;مرحبا بالعالم&lt;/h1&gt; &lt;p&gt;Это пример текста, который идёт справа налево.&lt;/p&gt; &lt;/body&gt;<p>data-* - это специальные атрибуты, которые хранят дополнительные данные прямо в разметке. Эти данные не видно на странице, но к ним можно обращаться через JavaScript или CSS.</p>
63 </ul>&lt;body dir="rtl"&gt; &lt;h1&gt;مرحبا بالعالم&lt;/h1&gt; &lt;p&gt;Это пример текста, который идёт справа налево.&lt;/p&gt; &lt;/body&gt;<p>data-* - это специальные атрибуты, которые хранят дополнительные данные прямо в разметке. Эти данные не видно на странице, но к ним можно обращаться через JavaScript или CSS.</p>
64 <p>Например:</p>
64 <p>Например:</p>
65 <p><strong>HTML</strong></p>
65 <p><strong>HTML</strong></p>
66 &lt;body data-theme="dark" data-user="guest" data-page="home"&gt; &lt;h1&gt;Главная страница&lt;/h1&gt; &lt;/body&gt;<p>Доступ из JavaScript:</p>
66 &lt;body data-theme="dark" data-user="guest" data-page="home"&gt; &lt;h1&gt;Главная страница&lt;/h1&gt; &lt;/body&gt;<p>Доступ из JavaScript:</p>
67 &lt;script&gt; // Получаем body const body = document.body; // Читаем data-атрибуты console.log(body.dataset.theme); // "dark" console.log(body.dataset.user); // "guest" console.log(body.dataset.page); // "home" // Меняем тему body.dataset.theme = "light"; &lt;/script&gt;<p><strong>CSS:</strong></p>
67 &lt;script&gt; // Получаем body const body = document.body; // Читаем data-атрибуты console.log(body.dataset.theme); // "dark" console.log(body.dataset.user); // "guest" console.log(body.dataset.page); // "home" // Меняем тему body.dataset.theme = "light"; &lt;/script&gt;<p><strong>CSS:</strong></p>
68 /* Стили для темы */ body[data-theme="dark"] { background: #222; color: #fff; } body[data-theme="light"] { background: #fff; color: #000; }<p>Это специальные атрибуты HTML, которые запускают JavaScript-код, когда с элементом что-то происходит (например, клик, загрузка, ввод текста или закрытие страницы). Они задают обработчики событий прямо в HTML.</p>
68 /* Стили для темы */ body[data-theme="dark"] { background: #222; color: #fff; } body[data-theme="light"] { background: #fff; color: #000; }<p>Это специальные атрибуты HTML, которые запускают JavaScript-код, когда с элементом что-то происходит (например, клик, загрузка, ввод текста или закрытие страницы). Они задают обработчики событий прямо в HTML.</p>
69 <p>Событийные атрибуты чаще всего используются для простых примеров. В реальной разработке вместо них обычно применяют<strong>addEventListener</strong> - встроенный метод JavaScript, который "подписывается" на событие (клик, нажатие клавиши, прокрутку и так далее) и выполняет определённую функцию, когда оно произойдёт. Это считается современным и гибким способом работы с событиями.</p>
69 <p>Событийные атрибуты чаще всего используются для простых примеров. В реальной разработке вместо них обычно применяют<strong>addEventListener</strong> - встроенный метод JavaScript, который "подписывается" на событие (клик, нажатие клавиши, прокрутку и так далее) и выполняет определённую функцию, когда оно произойдёт. Это считается современным и гибким способом работы с событиями.</p>
70 <p>Вот часто используемые событийные атрибуты:</p>
70 <p>Вот часто используемые событийные атрибуты:</p>
71 <ul><li>onload - показывает сообщение, когда страница загрузилась;</li>
71 <ul><li>onload - показывает сообщение, когда страница загрузилась;</li>
72 <li>onresize - пишет в консоль, если изменяется размер окна;</li>
72 <li>onresize - пишет в консоль, если изменяется размер окна;</li>
73 <li>onkeydown - выводит сообщение при нажатии клавиши;</li>
73 <li>onkeydown - выводит сообщение при нажатии клавиши;</li>
74 <li>onclick - пишет в консоль при клике мышкой;</li>
74 <li>onclick - пишет в консоль при клике мышкой;</li>
75 <li>onbeforeunload - запрашивает подтверждение перед закрытием страницы.</li>
75 <li>onbeforeunload - запрашивает подтверждение перед закрытием страницы.</li>
76 </ul><p>Например:</p>
76 </ul><p>Например:</p>
77 &lt;!DOCTYPE html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Пример событийных атрибутов&lt;/title&gt; &lt;/head&gt; &lt;body onload="alert('Страница полностью загрузилась!')" onkeydown="alert('Вы нажали клавишу: ' + event.key)" onbeforeunload="return 'Вы уверены, что хотите покинуть страницу?'" &gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Попробуйте нажать клавишу.&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;<p>Перепишем тот же пример так, чтобы вместо событийных атрибутов в &lt;body&gt; использовать addEventListener.</p>
77 &lt;!DOCTYPE html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Пример событийных атрибутов&lt;/title&gt; &lt;/head&gt; &lt;body onload="alert('Страница полностью загрузилась!')" onkeydown="alert('Вы нажали клавишу: ' + event.key)" onbeforeunload="return 'Вы уверены, что хотите покинуть страницу?'" &gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Попробуйте нажать клавишу.&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;<p>Перепишем тот же пример так, чтобы вместо событийных атрибутов в &lt;body&gt; использовать addEventListener.</p>
78 &lt;!DOCTYPE html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Пример с addEventListener&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Попробуйте нажать клавишу.&lt;/p&gt; &lt;script&gt; // Когда страница загрузится window.addEventListener("load", () =&gt; { alert("Страница полностью загрузилась!"); }); // Нажатие клавиши window.addEventListener("keydown", (event) =&gt; { alert("Вы нажали клавишу: " + event.key); }); // Перед уходом со страницы window.addEventListener("beforeunload", (event) =&gt; { event.preventDefault(); // Нужно для некоторых браузеров event.returnValue = "Вы уверены, что хотите покинуть страницу?"; }); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;<p>Эти атрибуты использовались в HTML4 для оформления, но сейчас их заменяют CSS:</p>
78 &lt;!DOCTYPE html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Пример с addEventListener&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Привет!&lt;/h1&gt; &lt;p&gt;Попробуйте нажать клавишу.&lt;/p&gt; &lt;script&gt; // Когда страница загрузится window.addEventListener("load", () =&gt; { alert("Страница полностью загрузилась!"); }); // Нажатие клавиши window.addEventListener("keydown", (event) =&gt; { alert("Вы нажали клавишу: " + event.key); }); // Перед уходом со страницы window.addEventListener("beforeunload", (event) =&gt; { event.preventDefault(); // Нужно для некоторых браузеров event.returnValue = "Вы уверены, что хотите покинуть страницу?"; }); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt;<p>Эти атрибуты использовались в HTML4 для оформления, но сейчас их заменяют CSS:</p>
79 <ul><li>alink - цвет активной ссылки;</li>
79 <ul><li>alink - цвет активной ссылки;</li>
80 <li>background - URL фонового изображения;</li>
80 <li>background - URL фонового изображения;</li>
81 <li>bgcolor - цвет фона;</li>
81 <li>bgcolor - цвет фона;</li>
82 <li>link - цвет непосещённых ссылок;</li>
82 <li>link - цвет непосещённых ссылок;</li>
83 <li>text - цвет текста;</li>
83 <li>text - цвет текста;</li>
84 <li>vlink - цвет посещённых ссылок.</li>
84 <li>vlink - цвет посещённых ссылок.</li>
85 </ul><p>Пример:</p>
85 </ul><p>Пример:</p>
86 &lt;body bgcolor="#f0f0f0" text="#333" link="#0066cc" vlink="#660099"&gt; &lt;!-- Устаревший способ задавания стилей --&gt; &lt;/body&gt;<p>Современная альтернатива (CSS):</p>
86 &lt;body bgcolor="#f0f0f0" text="#333" link="#0066cc" vlink="#660099"&gt; &lt;!-- Устаревший способ задавания стилей --&gt; &lt;/body&gt;<p>Современная альтернатива (CSS):</p>
87 body { background-color: #f0f0f0; color: #333; } a:link { color: #0066cc; } a:visited { color: #660099; }<p>По правилам HTML тег &lt;body&gt; обязателен: без него страница считается неполной. Но современные браузеры умные и умеют подставлять его автоматически.</p>
87 body { background-color: #f0f0f0; color: #333; } a:link { color: #0066cc; } a:visited { color: #660099; }<p>По правилам HTML тег &lt;body&gt; обязателен: без него страница считается неполной. Но современные браузеры умные и умеют подставлять его автоматически.</p>
88 <p>Допустим, вы написали код без &lt;body&gt;:</p>
88 <p>Допустим, вы написали код без &lt;body&gt;:</p>
89 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Пример&lt;/title&gt; &lt;/head&gt; &lt;h1&gt;Заголовок&lt;/h1&gt; &lt;p&gt;Абзац текста.&lt;/p&gt; &lt;/html&gt;<p>Что делает браузер: он видит элементы &lt;h1&gt; и &lt;p&gt; после &lt;head&gt; и автоматически вставляет &lt;body&gt; ... &lt;/body&gt;. Фактически код будет таким:</p>
89 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Пример&lt;/title&gt; &lt;/head&gt; &lt;h1&gt;Заголовок&lt;/h1&gt; &lt;p&gt;Абзац текста.&lt;/p&gt; &lt;/html&gt;<p>Что делает браузер: он видит элементы &lt;h1&gt; и &lt;p&gt; после &lt;head&gt; и автоматически вставляет &lt;body&gt; ... &lt;/body&gt;. Фактически код будет таким:</p>
90 &lt;html&gt; &lt;head&gt; &lt;title&gt;Пример&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Заголовок&lt;/h1&gt; &lt;p&gt;Абзац текста.&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;<p>Даже если вы забудете и &lt;head&gt;, и &lt;body&gt;, браузер достроит их за вас. Но такая разметка будет невалидной - валидатор выдаст ошибку.</p>
90 &lt;html&gt; &lt;head&gt; &lt;title&gt;Пример&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Заголовок&lt;/h1&gt; &lt;p&gt;Абзац текста.&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;<p>Даже если вы забудете и &lt;head&gt;, и &lt;body&gt;, браузер достроит их за вас. Но такая разметка будет невалидной - валидатор выдаст ошибку.</p>
91 <p>Поэтому лучше всегда писать &lt;body&gt; вручную. Так код остаётся чистым, понятным другим разработчикам и не вызывает лишних проблем.</p>
91 <p>Поэтому лучше всегда писать &lt;body&gt; вручную. Так код остаётся чистым, понятным другим разработчикам и не вызывает лишних проблем.</p>
92 <p>Когда браузер загружает страницу, он идёт сверху вниз: сначала читает &lt;html&gt;, потом &lt;head&gt;, затем &lt;body&gt; и всё, что в нём находится. При этом параллельно строится структура документа -<strong>DOM</strong>(Document Object Model).</p>
92 <p>Когда браузер загружает страницу, он идёт сверху вниз: сначала читает &lt;html&gt;, потом &lt;head&gt;, затем &lt;body&gt; и всё, что в нём находится. При этом параллельно строится структура документа -<strong>DOM</strong>(Document Object Model).</p>
93 <p>JavaScript может обращаться только к элементам, которые уже есть в DOM. Поэтому, если скрипт запускается раньше, чем браузер успел создать нужный элемент, код работать не будет.</p>
93 <p>JavaScript может обращаться только к элементам, которые уже есть в DOM. Поэтому, если скрипт запускается раньше, чем браузер успел создать нужный элемент, код работать не будет.</p>
94 <p>Есть несколько способов решить эту проблему:</p>
94 <p>Есть несколько способов решить эту проблему:</p>
95 <p>Если разместить скрипт после разметки, то элементы уже будут загружены к тому моменту, когда браузер до него дойдёт.</p>
95 <p>Если разместить скрипт после разметки, то элементы уже будут загружены к тому моменту, когда браузер до него дойдёт.</p>
96 &lt;body&gt; &lt;button id="btn"&gt;OK&lt;/button&gt; &lt;script&gt; const button = document.getElementById("btn"); button.onclick = () =&gt; alert("Нажато!"); &lt;/script&gt; &lt;/body&gt;<p>Здесь кнопка создаётся первой, и только потом выполняется скрипт. Поэтому всё работает.</p>
96 &lt;body&gt; &lt;button id="btn"&gt;OK&lt;/button&gt; &lt;script&gt; const button = document.getElementById("btn"); button.onclick = () =&gt; alert("Нажато!"); &lt;/script&gt; &lt;/body&gt;<p>Здесь кнопка создаётся первой, и только потом выполняется скрипт. Поэтому всё работает.</p>
97 <p>Если подключать внешний JavaScript с помощью &lt;script src="..."&gt;, можно добавить атрибут defer. Тогда код загрузится параллельно, но выполнится только после того, как браузер соберёт весь DOM.</p>
97 <p>Если подключать внешний JavaScript с помощью &lt;script src="..."&gt;, можно добавить атрибут defer. Тогда код загрузится параллельно, но выполнится только после того, как браузер соберёт весь DOM.</p>
98 &lt;script src="app.js" defer&gt;&lt;/script&gt;<p>Именно этот способ чаще всего применяют в реальной разработке: страница загружается быстрее, а скрипты не спотыкаются о недостающие элементы.</p>
98 &lt;script src="app.js" defer&gt;&lt;/script&gt;<p>Именно этот способ чаще всего применяют в реальной разработке: страница загружается быстрее, а скрипты не спотыкаются о недостающие элементы.</p>
99 <p>Тег &lt;body&gt; часто используют, чтобы задать базовое оформление для всей страницы. Например, общий фон, цвет текста или шрифт. Все элементы внутри &lt;body&gt; наследуют эти стили, если у них не прописаны собственные.</p>
99 <p>Тег &lt;body&gt; часто используют, чтобы задать базовое оформление для всей страницы. Например, общий фон, цвет текста или шрифт. Все элементы внутри &lt;body&gt; наследуют эти стили, если у них не прописаны собственные.</p>
100 <p>Самый простой пример:</p>
100 <p>Самый простой пример:</p>
101 body { font-family: Arial, sans-serif; /* Общий шрифт */ color: #333; /* Цвет текста */ background-color: #f0f0f0; /* Фон */ }<p>Теперь весь текст будет набран шрифтом Arial, цвет станет тёмно-серым, а фон - светло-серым.</p>
101 body { font-family: Arial, sans-serif; /* Общий шрифт */ color: #333; /* Цвет текста */ background-color: #f0f0f0; /* Фон */ }<p>Теперь весь текст будет набран шрифтом Arial, цвет станет тёмно-серым, а фон - светло-серым.</p>
102 <p>Есть несколько моментов, о которых полезно знать:</p>
102 <p>Есть несколько моментов, о которых полезно знать:</p>
103 <ul><li><strong>Фон:</strong>цвет или картинку, указанные для &lt;body&gt;, будет видно за всеми элементами страницы.</li>
103 <ul><li><strong>Фон:</strong>цвет или картинку, указанные для &lt;body&gt;, будет видно за всеми элементами страницы.</li>
104 <li><strong>Отступы:</strong>почти все браузеры добавляют к &lt;body&gt; небольшой внешний отступ (margin). Поэтому разработчики часто обнуляют его в начале работы:</li>
104 <li><strong>Отступы:</strong>почти все браузеры добавляют к &lt;body&gt; небольшой внешний отступ (margin). Поэтому разработчики часто обнуляют его в начале работы:</li>
105 </ul>body { margin: 0; }<ul><li><strong>Высота и прокрутка:</strong>можно управлять тем, как страница растягивается и прокручивается.</li>
105 </ul>body { margin: 0; }<ul><li><strong>Высота и прокрутка:</strong>можно управлять тем, как страница растягивается и прокручивается.</li>
106 </ul>body { min-height: 100vh; /* Растянуть на всю высоту окна */ overflow-x: hidden; /* Убрать горизонтальную прокрутку */ }<ul><li><strong>Разница с</strong> <strong>&lt;html&gt;:</strong>стили в &lt;html&gt; обычно влияют на всё окно браузера (например, задают общий фон), а стили в &lt;body&gt; применяются к "листу" контента, который видит пользователь.</li>
106 </ul>body { min-height: 100vh; /* Растянуть на всю высоту окна */ overflow-x: hidden; /* Убрать горизонтальную прокрутку */ }<ul><li><strong>Разница с</strong> <strong>&lt;html&gt;:</strong>стили в &lt;html&gt; обычно влияют на всё окно браузера (например, задают общий фон), а стили в &lt;body&gt; применяются к "листу" контента, который видит пользователь.</li>
107 </ul><p>Вот пример, который показывает, чем стили в &lt;body&gt; отличаются от стилей в &lt;html&gt;:</p>
107 </ul><p>Вот пример, который показывает, чем стили в &lt;body&gt; отличаются от стилей в &lt;html&gt;:</p>
108 &lt;!DOCTYPE html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Космос&lt;/title&gt; &lt;style&gt; /* Фон всего окна браузера */ html { background: linear-gradient(to bottom, #0d1b2a, #000); height: 100%; } /* Белый "лист" контента */ body { margin: 40px; background-color: rgba(255, 255, 255, 0.1); color: #f1f1f1; font-family: "Trebuchet MS", sans-serif; text-align: center; border-radius: 20px; padding: 40px; backdrop-filter: blur(5px); /* Создаём эффект "стекла" */ } h1 { font-size: 3rem; margin-bottom: 20px; text-shadow: 0 0 10px #00f0ff; } p { font-size: 1.2rem; line-height: 1.6; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;???? Привет из космоса!&lt;/h1&gt; &lt;p&gt; Тег &lt;code&gt;html&lt;/code&gt; задаёт фон всей страницы, а тег &lt;code&gt;body&lt;/code&gt; создаёт полупрозрачное "окно", на котором читается текст. &lt;/p&gt; &lt;/body&gt; &lt;/html&gt;<p>Страница будет выглядеть так:</p>
108 &lt;!DOCTYPE html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Космос&lt;/title&gt; &lt;style&gt; /* Фон всего окна браузера */ html { background: linear-gradient(to bottom, #0d1b2a, #000); height: 100%; } /* Белый "лист" контента */ body { margin: 40px; background-color: rgba(255, 255, 255, 0.1); color: #f1f1f1; font-family: "Trebuchet MS", sans-serif; text-align: center; border-radius: 20px; padding: 40px; backdrop-filter: blur(5px); /* Создаём эффект "стекла" */ } h1 { font-size: 3rem; margin-bottom: 20px; text-shadow: 0 0 10px #00f0ff; } p { font-size: 1.2rem; line-height: 1.6; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;???? Привет из космоса!&lt;/h1&gt; &lt;p&gt; Тег &lt;code&gt;html&lt;/code&gt; задаёт фон всей страницы, а тег &lt;code&gt;body&lt;/code&gt; создаёт полупрозрачное "окно", на котором читается текст. &lt;/p&gt; &lt;/body&gt; &lt;/html&gt;<p>Страница будет выглядеть так:</p>
109 <em>Скриншот: Google Chrome / Skillbox Media</em><p>Чтобы страница была удобна для всех пользователей, включая людей с ограниченными возможностями здоровья, нужно правильно оформлять содержимое внутри &lt;body&gt;.</p>
109 <em>Скриншот: Google Chrome / Skillbox Media</em><p>Чтобы страница была удобна для всех пользователей, включая людей с ограниченными возможностями здоровья, нужно правильно оформлять содержимое внутри &lt;body&gt;.</p>
110 <p><strong>Используйте семантические теги:</strong>заголовки &lt;h1&gt; - &lt;h6&gt;, списки, абзацы и структурные элементы (&lt;header&gt;, &lt;main&gt;, &lt;footer&gt;). Это помогает экранным читалкам ориентироваться на странице.</p>
110 <p><strong>Используйте семантические теги:</strong>заголовки &lt;h1&gt; - &lt;h6&gt;, списки, абзацы и структурные элементы (&lt;header&gt;, &lt;main&gt;, &lt;footer&gt;). Это помогает экранным читалкам ориентироваться на странице.</p>
111 <p><strong>Добавляйте альтернативные тексты.</strong>Для изображений указывайте alt. Если картинка будет недоступна, останется хотя бы текст с её описанием, который смогут воспроизвести экранные читалки для людей с ограничениями зрения:</p>
111 <p><strong>Добавляйте альтернативные тексты.</strong>Для изображений указывайте alt. Если картинка будет недоступна, останется хотя бы текст с её описанием, который смогут воспроизвести экранные читалки для людей с ограничениями зрения:</p>
112 &lt;img src="cat.jpg" alt="Серый кот лежит на подоконнике"&gt;<p><strong>Следите за контрастом и читаемостью.</strong>Текст должен быть контрастным по отношению к фону и не слишком мелким - не менее 16 px.</p>
112 &lt;img src="cat.jpg" alt="Серый кот лежит на подоконнике"&gt;<p><strong>Следите за контрастом и читаемостью.</strong>Текст должен быть контрастным по отношению к фону и не слишком мелким - не менее 16 px.</p>
113 <p><strong>Доступность с клавиатуры.</strong>Все кнопки, ссылки и формы должны быть доступны через Tab. Используйте атрибуты tabindex, если нужно задать особое поведение некоторых элементов. Избегайте элементов, до которых можно добраться только с помощью мыши.</p>
113 <p><strong>Доступность с клавиатуры.</strong>Все кнопки, ссылки и формы должны быть доступны через Tab. Используйте атрибуты tabindex, если нужно задать особое поведение некоторых элементов. Избегайте элементов, до которых можно добраться только с помощью мыши.</p>
114 <p>Иногда стандартных тегов не хватает для доступности. Например, вы сделали кнопку с помощью &lt;div&gt;. Для глаз пользователя это кнопка, а для экранного диктора - просто блок. Чтобы исправить это, используют ARIA-атрибуты (Accessible Rich Internet Applications). Они помогают описать элемент более точно.</p>
114 <p>Иногда стандартных тегов не хватает для доступности. Например, вы сделали кнопку с помощью &lt;div&gt;. Для глаз пользователя это кнопка, а для экранного диктора - просто блок. Чтобы исправить это, используют ARIA-атрибуты (Accessible Rich Internet Applications). Они помогают описать элемент более точно.</p>
115 <ul><li>role - задаёт роль элемента.</li>
115 <ul><li>role - задаёт роль элемента.</li>
116 </ul>&lt;div role="button" tabindex="0"&gt;Отправить&lt;/div&gt;<p>Теперь диктор озвучит этот блок как кнопку, а tabindex="0" позволит выбрать её с клавиатуры.</p>
116 </ul>&lt;div role="button" tabindex="0"&gt;Отправить&lt;/div&gt;<p>Теперь диктор озвучит этот блок как кнопку, а tabindex="0" позволит выбрать её с клавиатуры.</p>
117 <ul><li>aria-label - даёт текстовое описание, если видимой подписи нет.</li>
117 <ul><li>aria-label - даёт текстовое описание, если видимой подписи нет.</li>
118 </ul>&lt;button aria-label="Закрыть окно"&gt;✖&lt;/button&gt;<p>Диктор озвучит "Закрыть окно", даже если на странице только символ ✖.</p>
118 </ul>&lt;button aria-label="Закрыть окно"&gt;✖&lt;/button&gt;<p>Диктор озвучит "Закрыть окно", даже если на странице только символ ✖.</p>
119 <ul><li>aria-hidden="true" - скрывает элемент от диктора.</li>
119 <ul><li>aria-hidden="true" - скрывает элемент от диктора.</li>
120 </ul>&lt;span aria-hidden="true"&gt;★&lt;/span&gt;<p>Звёздочка видна, но не читается вслух, это просто декоративный элемент</p>
120 </ul>&lt;span aria-hidden="true"&gt;★&lt;/span&gt;<p>Звёздочка видна, но не читается вслух, это просто декоративный элемент</p>
121 <p>ARIA - не замена семантической разметки. Если есть подходящий тег (&lt;button&gt;, &lt;nav&gt;, &lt;header&gt;), используйте его. ARIA-атрибуты нужны только в случаях, когда обычных средств не хватает.</p>
121 <p>ARIA - не замена семантической разметки. Если есть подходящий тег (&lt;button&gt;, &lt;nav&gt;, &lt;header&gt;), используйте его. ARIA-атрибуты нужны только в случаях, когда обычных средств не хватает.</p>
122 <a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
122 <a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>