В Уроке 1 мы разобрали основы: тег — это команда браузеру в угловых скобках, у большинства тегов есть открывающая и закрывающая часть (<p>...</p>), у некоторых — только самозакрывающаяся форма (<img>). Мы познакомились с первыми тегами — h1–h6, p, a, img — и с тем, как подключается CSS (внешний файл, <style> в <head>, inline через атрибут style), а также с базовой структурой CSS-правила: селектор → свойство → значение.
Сегодня разберём, почему эти теги на странице ведут себя по-разному — одни выстраиваются друг под другом, другие остаются в строке текста, — и познакомимся с <div>, универсальным контейнером, без которого не обходится ни одна веб-страница.
Блочный элемент — элемент, который браузер по умолчанию выводит как отдельный «блок»: занимает всю доступную ширину родителя и всегда начинается с новой строки. Из уже знакомых тегов блочными являются h1–h6 и p.
Строчный (inline) элемент — элемент, который «встраивается» в текущую строку текста, занимает ровно столько места, сколько нужно его содержимому, и не создаёт разрыва строки сам по себе. Из знакомых тегов строчным является a. Тег img занимает особое положение — технически это «замещаемый» строчный элемент: он остаётся в строке текста, но при этом (в отличие от обычных строчных элементов вроде a) у него работают свойства width/height.
Понимать эту разницу важно по одной простой причине: она напрямую определяет, как будет выглядеть страница. Заголовки и абзацы всегда идут вертикально, один под другим — это блочное поведение. Ссылки и мелкие изображения остаются частью текста в строке — это строчное поведение.
Представь веб-страницу как книжную полку. Блочные элементы — это коробки: каждая занимает отдельное место по вертикали, ставится одна под другой, и если коробка широкая — она займёт всю ширину полки. Строчные элементы — это книги или фигурки, которые ставятся рядом друг с другом на одной полке: можно поставить несколько книг подряд, пока не закончится место, — тогда следующие автоматически «переедут» на новую полку.
<h1>Заголовок: блочный элемент</h1>
<p>Это абзац — ещё один блочный элемент. Обрати внимание, что он начинается с новой строки.</p>h1 {
color: white;
background-color: #2b6cb0;
}
p {
color: #222;
background-color: #f0f0f0;
}Оба фона растянутся на всю ширину страницы, и p окажется строго под h1, даже если текста в нём совсем немного, — именно так ведёт себя «коробка» на полке.
Познакомимся ещё с одним тегом — <span>. Это строчный аналог div: сам по себе он ничего не значит, просто позволяет выделить кусок текста внутри строки, чтобы стилизовать именно его.
<p>Текст перед <span>встроенным span</span> и <a href="#">ссылкой</a> в одной строке.</p>span {
background-color: yellow;
color: black;
}
a {
background-color: yellow;
color: red;
}Фон здесь охватывает только сам текст внутри span и a — «жёлтый кусочек» посреди строки, а не всю ширину страницы, как было с h1/p.
<p>Текст слева <img src="https://picsum.photos/100" alt="Картинка" /> и текст справа.</p>Картинка встанет прямо в строку между двумя кусками текста — как и положено строчному элементу. Но если задать ей width/height, размер реально изменится — обычный строчный элемент (например, span) так себя не ведёт, у него width/height попросту не работают, пока он остаётся строчным.
<div> — блочный контейнер общего назначения. Он не несёт никакого смысла сам по себе (в отличие от h1 или p, которые сообщают браузеру и поисковым системам, что перед ними заголовок или абзац) — зато он идеально подходит для того, чтобы сгруппировать несколько элементов вместе и применить стили ко всей группе разом.
Представь карточку профиля: фотография, имя, короткое описание. Обернув всё это в один div, можно задать этому div фон, отступы, размеры — и вся карточка получит единое оформление, как цельный блок, а не набор разрозненных элементов.
<div>
<h1>Имя</h1>
<p>Описание</p>
</div>div — блочный элемент, поэтому к нему применимы width и height. Если width не задан явно, div растянется на всю ширину родителя.
<div>Это мой div</div>div {
width: 400px;
height: 200px;
background-color: #f7c6c6;
color: #222;
}Результат — прямоугольник 400×200px с заданным фоном. Если ширина окна браузера меньше 400px, блок будет выходить за границы экрана — это нормально, про адаптивность мы поговорим в отдельном уроке позже.
Вложенность — когда один элемент находится внутри другого. Вся структура HTML-документа устроена как дерево: у элементов есть родители и дети. div очень часто выступает именно родителем — контейнером для группы дочерних элементов.
<div>
<h1>Иван Иванов</h1>
<p>Короткое описание: студент, изучаю веб.</p>
<img src="https://picsum.photos/120" alt="avatar" />
</div>div {
width: 360px;
background-color: #e6f7ff;
padding: 10px;
}
h1 {
color: #1a3d6b;
}
p {
color: #333;
}
img {
display: block;
margin-top: 10px;
}Две новые детали здесь заслуживают отдельного объяснения:
padding— внутренний отступ элемента, расстояние между границей блока и его содержимым внутри. Подробно свойства блочной модели (padding,margin,border) разберём в следующем уроке — здесь достаточно знать, что без него содержимоеdivприжималось бы вплотную к его краям.display: blockуimg— картинка по умолчанию строчная (см. предыдущий раздел), и если рядом с ней есть текст, она встанет прямо в строку.display: blockменяет её поведение на блочное — картинка переходит на новую строку и ведёт себя как отдельный блок, а не часть текстовой строки.
Важный нюанс, который легко упустить: не все свойства, заданные родителю, автоматически применяются к вложенным элементам.
| Свойство | Наследуется от родителя? |
|---|---|
color |
Да |
font-size, font-family |
Да |
text-align |
Да |
background-color |
Нет |
width, height |
Нет |
padding, margin, border |
Нет |
Например, если задать div цвет текста (color) — все вложенные h1 и p унаследуют этот цвет текста, если не переопределят его собственным правилом. Но если задать div background-color — это не «прольётся» на дочерние элементы, фон останется только у самого div как у контейнера. Это разделение полезно держать в голове с самого начала — оно объясняет неожиданное на первый взгляд поведение стилей, с которым вы ещё не раз столкнётесь.
- Чем блочный элемент отличается от строчного?
- Приведи два примера блочных элементов из уже пройденных тегов.
- Приведи два примера строчных элементов из уже пройденных тегов.
- Почему важно понимать разницу между блочными и строчными элементами?
- Какой тег используют как универсальный контейнер для группировки элементов?
- Что делает тег
<div>сам по себе, без каких-либо стилей? - Какое CSS-свойство меняет цвет фона у элемента?
- Какие три простых свойства можно задать
div, чтобы увидеть его на странице? - Можно ли вставить картинку внутрь
div? Изменится ли при этом её поведение как элемента? - Что означает «вложенность элементов», и какое свойство наследуется от родителя к потомку, а какое — нет?
Создай два блока <div>:
- Первый — шириной
200px, высотой200px, цвет фонаlightblue. - Второй — шириной
200px, высотой200px, цвет фонаlightcoral.
Создай div шириной 360px с фоном antiquewhite, и помести внутрь него:
- Заголовок
<h1>с именем — выровняй по центру. - Абзац
<p>с коротким описанием, внутри которого есть ссылка<a>наhttps://example.com. - Картинку
<img src="https://picsum.photos/200" alt="avatar">.
Стилизуй: заголовку задай свой цвет текста, абзацу — цвет фона (отличный от фона div), ссылке — отдельный цвет текста.
Создай div с заголовком <h2>«Основные теги HTML» (выровненным по центру), а под ним — три абзаца, в каждом из которых название тега выделено через <span>, например:
<p><span>div</span> — контейнер для других элементов.</p>Для всех абзацев задай размер шрифта 16px. Для текста внутри span — размер 18px и жирное начертание (font-weight: bold).
Создай три блока <div> шириной 500px каждый — например, карточки о животных. В каждом блоке размести:
- заголовок
<h2>с названием животного (по центру); - картинку
<img>шириной300px(по центру); - абзац
<p>с кратким описанием (по левому краю); - ссылку
<a>на статью об этом животном в Википедии (по центру).
Задай карточкам разные фоны: lightgreen, lightyellow, lightpink.