Свойство
display
Задаёт, каким блоком элемент становится снаружи и по каким правилам раскладывает своих потомков внутри — обычным потоком, флексом или сеткой.
Пример
Карточки встают в ряд, если сделать их общего родителя флекс-контейнером:
<ul class="cards">
<li>Первая</li>
<li>Вторая</li>
<li>Третья</li>
</ul>.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 ставит их в строку и при этом позволяет задать отступы:
<ul class="menu">
<li><a href="#">Главная</a></li>
<li><a href="#">Статьи</a></li>
<li><a href="#">Контакты</a></li>
</ul>.menu {
padding: 0;
list-style: none;
}
.menu li {
display: inline-block;
padding: 0.5rem 1rem;
border: 1px solid;
}Результат
Строчный флекс-контейнер
Кнопка с иконкой остаётся в строке текста, а иконку и подпись выравнивает флекс:
<p>
Нажмите <button class="button" type="button"><span>★</span> В избранное</button>, чтобы сохранить.
</p>.button {
display: inline-flex;
align-items: center;
gap: 0.4em;
}Результат
Обёртка, которая не мешает сетке
display: contents убирает блок обёртки, и её дети становятся элементами сетки родителя:
<div class="grid">
<div>1</div>
<div class="group">
<div>2</div>
<div>3</div>
</div>
<div>4</div>
</div>.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.
Поддержка браузерами
| Возможность | 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 |
Примечания
- Chrome: С префиксом -webkit- — с версии 21.
- Firefox: С Firefox 28 поддерживаются многострочные флекс-контейнеры.
- Safari: С префиксом -webkit- — с версии 7.
- Chrome Android: С префиксом -webkit- — с версии 25.
- Safari iOS: С префиксом -webkit- — с версии 7.
- Samsung Internet: С префиксом -webkit- — с версии 1.5.
- Opera: С префиксом -webkit- — с версии 15.
- Edge: С префиксом -ms- — с версии 12.
- Samsung Internet: В Samsung Internet появилось раньше, чем в соответствующей версии Chrome.
- Chrome: С Chrome 65 браузер не раскладывает элементы внутри
<iframe>сdisplay:none. - Chrome Android: С Chrome Android 65 браузер не раскладывает элементы внутри
<iframe>сdisplay:none. - Samsung Internet: С Chrome 65 браузер не раскладывает элементы внутри
<iframe>сdisplay:none. - Opera: С Opera 52 браузер не раскладывает элементы внутри
<iframe>сdisplay:none.
Яндекс Браузер работает на Chromium и поддерживает то же, что Chrome той же версии. Данные: MDN browser-compat-data 8.1.2, обновлено 17 сентября 2026 г.
Спецификация
См. также
- position Задаёт, как элемент позиционируется — в обычном потоке, со сдвигом, относительно предка, окна или прилипая при прокрутке.
- flex Задаёт, как флекс-элемент делит свободное место с соседями — растёт, сжимается и с какого размера начинает.
- gap Задаёт промежутки между элементами флекс- и грид-контейнера и между колонками текста — только между ними, без лишних отступов по краям.
- grid-template-columns Задаёт колонки грид-контейнера — сколько их и какой они ширины.