Свойство

display

Baseline: широко доступно

Задаёт, каким блоком элемент становится снаружи и по каким правилам раскладывает своих потомков внутри — обычным потоком, флексом или сеткой.

Пример

Карточки встают в ряд, если сделать их общего родителя флекс-контейнером:

Карточки в ряд
HTML
<ul class="cards">
  <li>Первая</li>
  <li>Вторая</li>
  <li>Третья</li>
</ul>
CSS
.cards {
  display: flex;
  gap: 1rem;
  padding: 0;
  list-style: none;
}

.cards li {
  flex: 1;
  padding: 1rem;
  border: 1px solid;
}

Результат

Синтаксис

Формальный синтаксис
display: [ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy> | grid-lanes | inline-grid-lanes | <display-outside> || [ <display-inside> | math ];
Начальное значение
inline
Применяется к
всем элементам
Наследуется
нет
Анимируется
дискретно; плавный переход — с transition-behavior: allow-discrete
Вычисляемое значение
пара ключевых слов внешнего и внутреннего типа (с list-item) либо одно ключевое слово

Значение можно записать одним ключевым словом (flex) или парой «внешний тип + внутренний тип» (block flex). Обе записи равнозначны.

Значения

block
Блочный элемент: начинается с новой строки и занимает всю доступную ширину. Так ведут себя div, p, заголовки.
inline
Строчный элемент: встаёт в строку текста, ширина и высота из CSS на него не действуют. Значение по умолчанию.
inline-block
Встаёт в строку, как inline, но внутри ведёт себя как блок: у него работают ширина, высота и вертикальные отступы.
flex и inline-flex
Флекс-контейнер: потомки раскладываются вдоль одной оси — в строку или в столбец.
grid и inline-grid
Грид-контейнер: потомки раскладываются по сетке из строк и колонок.
flow-root
Блок, который создаёт новый контекст форматирования: содержит плавающие элементы и не даёт отступам потомков «выпадать» наружу.
list-item
Блок с маркером, как у li.
contents
Блок самого элемента исчезает, а его потомки встают на его место в раскладке родителя.
none
Элемент не отображается и не занимает места.

Есть и табличные значения (table, table-row, table-cell и другие) — они повторяют поведение элементов таблицы.

Как понять

У любого блока два типа. Внешний отвечает за то, как блок ведёт себя среди соседей: начинает новую строку (block) или встаёт в строку текста (inline). Внутренний — за то, как он раскладывает своих детей: обычным потоком (flow), флексом (flex) или сеткой (grid).

Отсюда краткие записи: flex — это block flex, inline-grid — inline grid, а inline-block — inline flow-root. Когда вы пишете display: flex, вы меняете внутренний тип: сам элемент по-прежнему блочный, а его дети становятся флекс-элементами.

Примеры

Меню в строку

Пункты списка по умолчанию блочные и стоят столбиком. inline-block ставит их в строку и при этом позволяет задать отступы:

Пункты меню в строку
HTML
<ul class="menu">
  <li><a href="#">Главная</a></li>
  <li><a href="#">Статьи</a></li>
  <li><a href="#">Контакты</a></li>
</ul>
CSS
.menu {
  padding: 0;
  list-style: none;
}

.menu li {
  display: inline-block;
  padding: 0.5rem 1rem;
  border: 1px solid;
}

Результат

Строчный флекс-контейнер

Кнопка с иконкой остаётся в строке текста, а иконку и подпись выравнивает флекс:

Кнопка в строке текста
HTML
<p>
  Нажмите <button class="button" type="button"><span>★</span> В избранное</button>, чтобы сохранить.
</p>
CSS
.button {
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
}

Результат

Обёртка, которая не мешает сетке

display: contents убирает блок обёртки, и её дети становятся элементами сетки родителя:

display: contents
HTML
<div class="grid">
  <div>1</div>
  <div class="group">
    <div>2</div>
    <div>3</div>
  </div>
  <div>4</div>
</div>
CSS
.grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0.5rem;
}

.grid div:not(.group) {
  padding: 0.5rem;
  border: 1px solid;
}

.group {
  display: contents;
}

Результат

Подсказки

  • display: none убирает элемент и для программ экранного доступа. Чтобы спрятать только визуально, нужен другой приём — например, класс visually-hidden.
  • Атрибут hidden работает через display: none из стилей браузера. Если в вашем CSS у элемента есть display: flex, атрибут перестанет прятать его — добавьте правило [hidden] { display: none; }.
  • display: contents у кнопок, ссылок и других интерактивных элементов в старых версиях браузеров выкидывал их из дерева доступности. Не применяйте его к элементам, у которых есть своя роль.
  • Ширина и высота у inline-элемента не работают. Если нужно задать размер, используйте inline-block или inline-flex.

Поддержка браузерами

Значения и возможности: display
Возможность Chrome Edge Firefox Safari Chrome Android Safari iOS Samsung Internet Opera
display 1 12 1 1 18 1 1.0 7
block 1 12 1 1 18 1 1.0 7
contents 65 79 37 11.1 65 11.3 9.0 52
flex 29 1 12 20 2 9 3 29 4 9 5 2.0 6 16 7
flow-root 58 79 53 13 58 13 7.0 45
grid 57 16 8 52 10.1 57 10.3 6.0 9 44
grid-lanes нет нет нет 26.4 нет 26.4 нет нет
inline 1 12 1 1 18 1 1.0 7
inline-block 1 12 1 1 18 1 1.0 7
inline-flex 29 1 12 20 2 9 3 29 4 9 5 2.0 6 16 7
inline-grid 57 16 8 52 10.1 57 10.3 6.0 9 44
inline-grid-lanes нет нет нет 26.4 нет 26.4 нет нет
inline-table 1 12 3 1 18 1 1.0 7
Плавный переход (transition-behavior: allow-discrete) 117 117 нет 18 117 18 24.0 103
Анимация в @keyframes 116 116 нет 18 116 18 24.0 102
list-item 1 12 1 1 18 1 1.0 7
math 109 109 нет нет 109 нет 21.0 95
Значения из двух ключевых слов (block flex) 115 115 70 15 115 15 23.0 101
none 1 10 12 1 1 18 11 1 1.0 12 7 13
ruby 121 121 38 нет 121 нет 25.0 107
ruby-base нет нет удалено в 79 38 нет нет нет нет нет
ruby-base-container нет нет удалено в 79 38 нет нет нет нет нет
ruby-text 121 121 38 нет 121 нет 25.0 107
ruby-text-container нет нет удалено в 79 38 нет нет нет нет нет
table 1 12 1 1 18 1 1.0 7
table-caption 1 12 1 ≤4 18 ≤3.2 1.0 15
table-cell 1 12 1 1 18 1 1.0 7
table-column 1 12 1 1 18 1 1.0 7
table-column-group 1 12 1 1 18 1 1.0 7
table-footer-group 1 12 1 1 18 1 1.0 7
table-header-group 1 12 1 1 18 1 1.0 7
table-row 1 12 1 1 18 1 1.0 7
table-row-group 1 12 1 1 18 1 1.0 7

Примечания

  1. Chrome: С префиксом -webkit- — с версии 21.
  2. Firefox: С Firefox 28 поддерживаются многострочные флекс-контейнеры.
  3. Safari: С префиксом -webkit- — с версии 7.
  4. Chrome Android: С префиксом -webkit- — с версии 25.
  5. Safari iOS: С префиксом -webkit- — с версии 7.
  6. Samsung Internet: С префиксом -webkit- — с версии 1.5.
  7. Opera: С префиксом -webkit- — с версии 15.
  8. Edge: С префиксом -ms- — с версии 12.
  9. Samsung Internet: В Samsung Internet появилось раньше, чем в соответствующей версии Chrome.
  10. Chrome: С Chrome 65 браузер не раскладывает элементы внутри <iframe> с display:none.
  11. Chrome Android: С Chrome Android 65 браузер не раскладывает элементы внутри <iframe> с display:none.
  12. Samsung Internet: С Chrome 65 браузер не раскладывает элементы внутри <iframe> с display:none.
  13. Opera: С Opera 52 браузер не раскладывает элементы внутри <iframe> с display:none.

Яндекс Браузер работает на Chromium и поддерживает то же, что Chrome той же версии. Данные: MDN browser-compat-data 8.1.2, обновлено 17 сентября 2026 г.

Спецификация

См. также

Поиск

Название свойства, селектора или функции — можно по-английски и без двоеточий: hover, gap, clamp.

Меню