Тег div в HTML: как сделать блок и оформить его через CSS

Тег div создаёт в HTML пустой блок, а вид ему задают через CSS.

Собираем карточку с нуля, считаем её реальную ширину, ставим блоки в ряд через flex и grid и разбираем пять ошибок, из-за которых div ведёт себя не так, как ждали.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3139 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3793 экспертных мнения Подписаться на Телеграм-канал
Обложка: Тег div в HTML: как сделать блок и оформить его через CSS

Тег div в HTML создаёт пустой блок-контейнер: всё, что лежит между <div> и </div>, браузер выводит с новой строки на всю ширину родителя. Чтобы сделать блок на странице, оберните заголовок, текст или картинку в <div class="card">, а потом опишите класс .card в CSS: ширину, отступы, рамку и фон.

Сам по себе div ничего не меняет во внешнем виде. По справке MDN, он не влияет на контент или макет, пока его не стилизуют через CSS. Где div стоит среди остальных тегов, видно в нашем списке основных тегов HTML.

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

CheckroiCheckroiПодборка курсов по CSS181 курс • 37 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как сделать блок в HTML: пошаговая инструкция

Рой собирает карточку сайта из блоков

Соберём карточку тарифа: заголовок, строку описания, рамку и скруглённые углы. Понадобится обычный HTML-файл, если его ещё нет, создайте по инструкции про index.html.

  1. Оберните содержимое в div. Всё, что относится к одному блоку, кладите между открывающим и закрывающим тегом.
  2. Дайте блоку класс. Атрибут class="card" нужен, чтобы стиль нашёл именно этот div, а не все блоки страницы.
  3. Опишите класс в CSS. Стили лучше вынести в отдельный файл. Как это сделать, разобрано в статье про подключение CSS к HTML.
  4. Откройте страницу в браузере и проверьте размер блока в инструментах разработчика (клавиша F12).

Разметка карточки:

<div class="card">
  <h2>Тариф «Старт»</h2>
  <p>10 уроков и проверка домашних заданий</p>
</div>

Стили для неё:

.card {
  width: 300px;
  padding: 20px;
  border: 2px solid #3b82f6;
  border-radius: 12px;
  background: #eff6ff;
}

Получится голубая карточка с синей рамкой. Обратите внимание на ширину: инструменты разработчика покажут 344 пикселя, а не 300. Откуда берутся лишние 44 пикселя, объясняем ниже, в разделе про блочную модель.

Атрибуты div: class, id и style

Собственных атрибутов у div нет, только глобальные, общие для всех тегов. На практике нужны три.

Атрибут Зачем Пример
class Общий стиль для нескольких блоков. Классов может быть несколько через пробел <div class="card card--sale">
id Уникальное имя одного блока: якорная ссылка, обращение из JavaScript <div id="tariffs">
style Стиль прямо в теге, только для этого блока <div style="padding: 12px;">

Запись div style удобна, когда надо быстро проверить идею. Например, подсветить блок жёлтым фоном:

<div style="background: #fef3c7; padding: 12px;">
  Набор закрывается 15 ноября
</div>

В рабочей вёрстке от style лучше уходить к классам. Двадцать одинаковых карточек с инлайн-стилями придётся править двадцать раз, а класс меняется в одной строке. Подробнее о том, как устроены селекторы и каскад, рассказываем в статье «Что такое CSS».

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Вложенные блоки и контейнер страницы

Div можно класть друг в друга на любую глубину. Так собирают каркас страницы: внешний блок-контейнер ограничивает ширину, внутри него лежат шапка, колонки и подвал.

<div class="container">
  <div class="header">Логотип и меню</div>
  <div class="content">
    <div class="card">Тариф «Старт»</div>
    <div class="card">Тариф «Про»</div>
  </div>
</div>

Класс container часто встречается в шаблонах сайтов, в том числе в Bootstrap. Обычно это div с ограниченной шириной и автоматическими отступами по бокам, как в примере с центрированием ниже.

Глубокая вложенность читается тяжело. Если блоков больше трёх уровней, проверьте, нельзя ли убрать лишнюю обёртку: часто её свойства можно перенести на соседний div.

Чем div отличается от span

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

div span
Отображение по умолчанию display: block display: inline
С новой строки да нет, продолжает текст
Ширина вся ширина родителя по содержимому
Для чего секции, карточки, колонки слово или фраза внутри абзаца

Span берут, когда надо выделить кусок строки и не разорвать её. Типичный случай: цена внутри абзаца.

<p>Цена: <span class="price">4 900 ₽</span></p>

Если просто нужно сделать слово жирным, span не обязателен, хватит <strong>. Чем они различаются, мы разбирали в статье про жирный текст в HTML.

Блочная модель: из чего складывается размер блока

Слои блока: содержимое, отступы, рамка

Каждый div браузер рисует как прямоугольник из четырёх слоёв: содержимое, внутренний отступ padding, рамка border и внешний отступ margin. Это и называют блочной моделью, подробный урок есть в учебнике MDN.

По умолчанию width задаёт ширину только содержимого. Отсюда 344 пикселя у нашей карточки:

  • 300 пикселей содержимого;
  • 20 + 20 пикселей внутреннего отступа слева и справа;
  • 2 + 2 пикселя рамки.

Чтобы width: 300px означало «300 пикселей вместе с отступами и рамкой», добавьте свойство box-sizing:

.card {
  box-sizing: border-box;
  width: 300px;
  padding: 20px;
  border: 2px solid #3b82f6;
}

С этой строкой блок займёт ровно 300 пикселей. Часто box-sizing: border-box задают сразу всем элементам через селектор *, чтобы не пересчитывать ширину в каждом блоке.

Ещё одна особенность касается вертикальных отступов. Если у верхнего блока margin-bottom: 20px, а у нижнего margin-top: 30px, расстояние между ними будет 30 пикселей, а не 50. MDN называет это схлопыванием внешних отступов: из двух соседних отступов остаётся больший.

Как поставить блоки рядом: flex и grid

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

Ряд карточек на flex

<div class="cards">
  <div>Старт</div>
  <div>Про</div>
  <div>Команда</div>
</div>
.cards {
  display: flex;
  gap: 16px;
}
.cards > div {
  flex: 1;
}

flex: 1 делит свободное место поровну. В контейнере шириной 900 пикселей получатся три колонки примерно по 289 пикселей: из 900 вычитаются два промежутка по 16, остаток делится на три.

Готовую сетку из flex-колонок даёт и фреймворк Bootstrap, как сверстать на нём первую страницу, мы показывали в статье про Bootstrap. Для одной карточки фреймворк избыточен, а для сайта из десятка однотипных блоков экономит время.

Сетка на grid

Если карточек много и они должны переноситься рядами, удобнее grid:

.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

Четвёртая карточка сама уйдёт во второй ряд под первую. Разобрать flex и grid на практике с проверкой заданий можно на курсах по CSS из нашего каталога. На телефоне три колонки будут слишком узкими, поэтому число колонок обычно меняют через медиа-запросы в CSS.

Блок по центру страницы

Обёртку с контентом центрируют так:

.wrap {
  max-width: 600px;
  margin: 0 auto;
}

На странице шириной 1000 пикселей блок встанет в 200 пикселях от левого края: браузер поделил оставшиеся 400 пикселей поровну между левым и правым отступом.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Когда вместо div нужен семантический тег

Спецификация HTML прямо советует считать div «элементом последней надежды» (в оригинале «element of last resort»): его берут, когда другой подходящий тег не находится. Причина в доступности: программа экранного доступа понимает, где навигация и где основной текст, только если это размечено тегами со смыслом.

Что на странице Вместо div
Шапка сайта или раздела <header>
Меню <nav>
Основное содержимое страницы <main>
Статья, пост, карточка товара <article>
Тематический раздел с заголовком <section>
Боковая колонка <aside>
Подвал <footer>

Эти теги появились в HTML5, подробнее о них в статье про HTML5.

Div остаётся там, где смысла нет, а нужна только обёртка для стилей: колонка сетки, контейнер flex, фон под группой блоков. В карточках из примера выше div уместен. А вот страницу, где шапка, меню и подвал сделаны одними div, мы бы переделали: разметка займёт столько же строк, а читать её станет проще и людям, и программам.

Частые ошибки

Рой уверенно обходит ошибки вёрстки

На этих пяти ошибках чаще всего ломается первая вёрстка.

  1. Div внутри абзаца. Код <p><div>текст</div></p> браузер разберёт по-своему: закроет абзац перед div и создаст ещё один пустой абзац после. По спецификации абзац закрывается сам, как только за ним идёт div. Стили для p к тексту не применятся. Решение: внутри абзаца используйте span, а абзацы кладите в div, а не наоборот. Как размечать абзацы, разобрано в статье про тег p.
  2. Пустой блок не видно. У div без содержимого высота 0, поэтому фон и рамка не появятся. Задайте height или min-height.
  3. Блок шире, чем задумано. Ширина складывается с padding и border, как в нашей карточке. Лечится строкой box-sizing: border-box.
  4. Div вместо кнопки. Кликабельный <div onclick="…"> не получает фокус по клавише Tab, так что с клавиатуры его не нажать. Для действий есть button, примеры в статье про кнопки в HTML.
  5. Потерянный закрывающий тег. Пропущенный </div> затягивает в блок всё, что идёт ниже, и вёрстка разъезжается. Помогает форматирование кода с отступами и пометка закрывающих тегов комментарием вроде <!-- /.card -->.

Где научиться вёрстке системно

Карточку из div и CSS можно собрать по этой инструкции за полчаса. Адаптивная страница из десятков блоков, которая одинаково выглядит на телефоне и мониторе, требует практики: флексы, сетки, медиа-запросы и проверка в разных браузерах. Что входит в работу целиком, описано в статье о вёрстке и в обзоре профессии HTML-верстальщика.

Если хочется пройти путь с проверкой домашних заданий, вот курсы по CSS из нашего каталога:

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
HTML и CSS с нуля
Перейти на сайт курса
SkillboxSkillbox91 626 ₽7635 ₽/мес.11 месяцевОбзор курса
HTML и CSS. Адаптивная вёрстка и автоматизация
Перейти на сайт курса
HTMLAcademyHTML Academy23 400 ₽3900 ₽/мес.2 месяцаОбзор курса
Основы вёрстки HTML и CSS
Перейти на сайт курса
Академия СинергияАкадемия Синергия32 676 ₽2723 ₽/мес.3 месяцаОбзор курса
HTML и CSS с нуляSkyproSkypro195 160 ₽7972 ₽/мес.12 месяцевОбзор курса
Онлайн-курс Вёрстка на HTML и CSS
Перейти на сайт курса
БруноямБруноям36 900 ₽2491 ₽/мес.3 месяцаОбзор курса

Больше программ — в полном каталоге курсов по CSS

Часто задаваемые вопросы

Что такое div в HTML?

Div (от английского division, «раздел») это универсальный блочный контейнер. Сам по себе он ничего не значит и не меняет вид страницы, его используют, чтобы сгруппировать элементы и оформить их через CSS.

Чем div отличается от span?

Div блочный: начинается с новой строки и занимает всю ширину родителя. Span строчный: продолжает текст и занимает ровно столько места, сколько его содержимое. Div берут для карточек и колонок, span для слова или фразы внутри абзаца.

Как поставить блоки div в ряд?

Задайте общему родителю display: flex и промежуток gap, а дочерним блокам flex: 1, чтобы они поделили ширину поровну. Для сетки из нескольких рядов удобнее display: grid с grid-template-columns.

Как выровнять div по центру страницы?

Дайте блоку ограниченную ширину и автоматические боковые отступы: max-width: 600px; margin: 0 auto;. Браузер поделит свободное место поровну между левым и правым отступом.

Можно ли вложить div в тег p?

Нет. Встретив div внутри абзаца, браузер закроет абзац перед ним и добавит пустой абзац после, так что стили p к тексту не применятся. Наоборот можно: абзацы спокойно кладут внутрь div.

Что такое контейнер в HTML?

Так обычно называют div-обёртку, которая ограничивает ширину содержимого и выравнивает его по центру. Класс container часто встречается в шаблонах сайтов, например в Bootstrap.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!