Что делает тег div
<div> (сокращение от division, «раздел») это универсальный контейнер. Он группирует элементы, чтобы стилизовать, располагать или обрабатывать их скриптом как единое целое. Сам по себе он никак не выглядит: ни отступов, ни рамки, ни особого шрифта. Это блочный элемент, поэтому он начинается с новой строки и растягивается на всю доступную ширину.
Удалите строку с border в стилях, и div станут невидимыми: так div выглядит по умолчанию. Весь его внешний вид задает CSS.
div class и id
Обычно div получает class, то есть имя, на которое нацелен ваш CSS. У div с одним классом одинаковый стиль:
.card стилизует оба блока, а .card.highlight добавляет синюю обводку div, у которого есть оба класса. Используйте id, когда нужно указать на один конкретный div, например как на цель ссылки (href="#pro"). Подробное сравнение class и id есть на странице про атрибуты.
div в ряд
Div это блоки, поэтому они выстраиваются друг под другом. Чтобы поставить их в ряд, сделайте родителя flex-контейнером:
display: flex у .row выстраивает дочерние элементы в линию, gap задает промежутки, а значения flex делят ширину (здесь 1 : 2 : 1). Схема «родитель и дочерние элементы» это самое частое применение div на реальных сайтах. Про центрирование читайте на странице как отцентрировать div.
Вложенные div
Div может содержать другие div на любую глубину. Каждый уровень это блок внутри блока, и это видно, если дать каждому div рамку и внутренний отступ:
Делайте вложенность настолько неглубокой, насколько позволяет раскладка. Каждая лишняя обертка это еще один блок, о котором придется думать, когда отступ или ширина ведут себя не так, как вы ожидали.
div или семантический тег?
Div ничего не говорит о своем содержимом. В HTML есть теги, которые так же группируют элементы, но еще и сообщают, что это за группа:
| Вместо | Используйте | Для чего |
|---|---|---|
<div class="header"> | <header> | Вступление или верхняя панель страницы или раздела |
<div class="nav"> | <nav> | Блок навигационных ссылок |
<div class="main"> | <main> | Основное содержимое, один раз на странице |
<div class="post"> | <article> | Самостоятельный элемент: пост, комментарий, карточка товара |
<div class="footer"> | <footer> | Подвал страницы или раздела |
Пока вы их не стилизуете, эти теги выглядят в точности как div, но программы чтения с экрана их объявляют и позволяют переходить между ними, а поисковики читают структуру. Используйте div для блоков, которые нужны только для раскладки или стилей, как обертка .row выше. Весь набор описан на странице семантическая верстка.
div не кнопка
Div с обработчиком клика выглядит кликабельным для пользователя мыши, но пользователь клавиатуры не может до него добраться по Tab или нажать Enter, а программа чтения с экрана не объявляет его как кнопку:
Используйте <button> для действий и <a href> для навигации. Оба получают фокус и работают с клавиатурой без дополнительного кода.
Частые ошибки
- div внутри
<p>. Абзац закрывается перед div. Сделайте div внешним элементом или используйте<span>внутри абзаца. - «Суп» из div. Страница только из div не имеет структуры для программ чтения с экрана. Замените div на
<header>,<nav>,<main>и<footer>там, где они подходят. - Кликабельные div. Используйте
<button>или ссылку. - Ожидание, что div будет шириной с текст. Div занимает всю ширину. Если нужно, чтобы он сжимался, используйте
display: inline-block,width: fit-contentили<span>. - Один id на нескольких div. Для всего повторяющегося используйте класс.
Часто задаваемые вопросы
Что такое div в HTML?
<div> это универсальный контейнер. Он группирует другие элементы, чтобы стилизовать или располагать их вместе, и собственного смысла у него нет: браузер показывает его как блок, который начинается с новой строки и занимает всю доступную ширину.
Что означает div class?
<div class="card"> это div с атрибутом class. Класс это имя, по которому CSS задает стиль (.card { ... }), а JavaScript находит элемент. Один класс может быть у многих div, а у одного div может быть несколько классов: class="card featured".
Как поставить два div рядом?
Оберните их в родительский div и задайте ему display: flex. Дочерние элементы встанут в ряд. Добавьте gap для промежутка между ними и flex: 1 дочерним элементам, чтобы они поделили ширину поровну.
Что использовать: div или section?
Используйте <section>, <header>, <nav>, <main>, <article> или <footer>, когда у содержимого есть такая роль: их понимают программы чтения с экрана и поисковики. Используйте <div>, когда нужен просто блок для стилей или раскладки.
Можно ли вложить div в тег p?
Нет. Абзац может содержать только строчное содержимое. Браузер закрывает <p>, как только встречает <div>, и стили ломаются. Сделайте div внешним элементом или используйте <span> внутри абзаца.