Spec-Zone.ru › CSS

CSS-свойство `display`

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Свойство display CSS определяет, считается ли элемент блочным или строчным блоком, а также задаёт способ размещения его дочерних элементов, например потоковую раскладку, сетку или flex.

Формально свойство display задаёт внутренний и внешний типы отображения элемента. Внешний тип определяет участие элемента в потоковой раскладке; внутренний тип задаёт раскладку дочерних элементов. Некоторые значения display полностью описаны в отдельных спецификациях; например, подробное описание того, что происходит при объявлении display: flex, содержится в спецификации CSS Flexible Box Model.

Попробуйте

display: block;
display: inline flow-root;
display: none;
display: flex;
display: grid;
<p>
  Apply different <code>display</code> values on the dashed orange-bordered
  <code>div</code>, which contains three child elements.
</p>
<section class="default-example" id="default-example">
  <div class="example-container">
    Some text A.
    <div id="example-element">
      <div class="child">Child 1</div>
      <div class="child">Child 2</div>
      <div class="child">Child 3</div>
    </div>
    Some text B.
  </div>
</section>
.example-container {
  width: 100%;
  height: 100%;
}

code {
  background: #88888888;
}

#example-element {
  border: 3px dashed orange;
}

.child {
  display: inline-block;
  padding: 0.5em 1em;
  background-color: #ccccff;
  border: 1px solid #ababab;
  color: black;
}

Синтаксис

/* short display */
display: none;
display: contents;
display: block;
display: flow-root;
display: inline;
display: inline-block;
display: list-item;
display: inline list-item;
display: flex;
display: inline-flex;
display: grid;
display: inline-grid;
display: grid-lanes;
display: inline-grid-lanes;
display: table;
display: inline-table;

/* full display */
display: block flow;
display: block flow-root;
display: inline flow;
display: inline flow-root;
display: block flow list-item;
display: inline flow list-item;
display: block flex;
display: inline flex;
display: block grid;
display: inline grid;
display: block table;
display: inline table;

/* global values */
display: inherit;
display: initial;
display: revert;
display: revert-layer;
display: unset;

Для свойства CSS display используются ключевые слова.

Группы значений

Ключевые слова можно разделить на шесть групп значений.

Внешний тип

<display-outside>
Эти ключевые слова задают внешний тип отображения элемента, то есть его роль в потоковой раскладке:
block
Элемент создаёт блочный блок, перед которым и после которого в обычном потоке создаются разрывы строк.
inline
Элемент создаёт один или несколько строчных блоков, которые не создают разрывов строк перед собой и после себя. В обычном потоке следующий элемент располагается на той же строке, если для него есть место.

Примечание: Если для свойства display указано только внешнее значение (например, display: block или display: inline), внутренним значением по умолчанию будет flow (например, display: block flow и display: inline flow).

Примечание: Однозначный синтаксис можно использовать как резервный вариант для многоключевого синтаксиса. Например, для display: inline flex можно задать следующий резервный вариант:

.container {
  display: inline-flex;
  display: inline flex;
}

Подробнее см. в статье Использование многоключевого синтаксиса со свойством CSS display.

Внутренний тип

<display-inside>
Эти ключевые слова задают внутренний тип отображения элемента, который определяет тип контекста форматирования для размещения его содержимого (если элемент не является замещаемым). Если одно из этих ключевых слов используется само по себе как единственное значение, внешний тип отображения элемента по умолчанию будет block (за исключением ruby, для которого значением по умолчанию будет inline).
flow

Элемент размещает содержимое с помощью потоковой раскладки (блочной и строчной раскладки).

Если его внешний тип отображения — inline и он участвует в блочном или строчном контексте форматирования, элемент создаёт строчный блок. В противном случае он создаёт блочный блок.

В зависимости от значения других свойств (например, position, float или overflow), а также от того, участвует ли сам элемент в блочном или строчном контексте форматирования, он либо создаёт новый блочный контекст форматирования (BFC) для своего содержимого, либо включает содержимое в родительский контекст форматирования.

flow-root
Элемент создаёт блочный блок, который формирует новый блочный контекст форматирования, определяя расположение корня форматирования.
table
Эти элементы ведут себя как элементы HTML <table>. Они определяют блочный блок.
flex
Элемент ведёт себя как блочный элемент и размещает содержимое в соответствии с моделью flexbox.
grid
Элемент ведёт себя как блочный элемент и размещает содержимое в соответствии с моделью сетки.
grid-lanes
Элемент ведёт себя как блочный элемент и размещает содержимое с помощью раскладки по дорожкам сетки. Столбцы задаются свойством grid-template-columns и ведут себя как в обычной сетке, а элементы упаковываются в блочном направлении, чтобы заполнить промежутки между элементами разного размера. Подробнее см. в статье Раскладка по дорожкам сетки.
inline-grid-lanes
Элемент ведёт себя как строчный элемент и размещает содержимое с помощью раскладки по дорожкам сетки. Строки задаются свойством grid-template-rows и ведут себя как в обычной сетке, а элементы упаковываются в строчном направлении, чтобы заполнить промежутки между элементами разного размера. Подробнее см. в статье Раскладка по дорожкам сетки.
ruby
Элемент ведёт себя как строчный элемент и размещает содержимое в соответствии с моделью форматирования ruby. Он ведёт себя как соответствующие элементы HTML <ruby>.

Примечание: Если для свойства display указано только внутреннее значение (например, display: flex или display: grid), внешним значением по умолчанию будет block (например, display: block flex и display: block grid).

Элемент списка

<display-listitem>
Элемент создаёт блочный блок для содержимого и отдельный строчный блок элемента списка.

Единственное значение list-item заставляет элемент вести себя как элемент списка. Его можно использовать вместе со свойствами list-style-type и list-style-position.

Значение list-item также можно сочетать с любым ключевым словом <display-outside> и ключевым словом flow или flow-root из группы <display-inside>.

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

Внутренние значения

<display-internal>
Некоторые модели раскладки, например table и ruby, имеют сложную внутреннюю структуру с несколькими ролями, которые могут выполнять их дочерние элементы и потомки. В этом разделе описаны такие «внутренние» значения display, имеющие смысл только в рамках соответствующего режима раскладки.
table-row-group
Эти элементы ведут себя как элементы HTML <tbody>.
table-header-group
Эти элементы ведут себя как элементы HTML <thead>.
table-footer-group
Эти элементы ведут себя как элементы HTML <tfoot>.
table-row
Эти элементы ведут себя как элементы HTML <tr>.
table-cell
Эти элементы ведут себя как элементы HTML <td>.
table-column-group
Эти элементы ведут себя как элементы HTML <colgroup>.
table-column
Эти элементы ведут себя как элементы HTML <col>.
table-caption
Эти элементы ведут себя как элементы HTML <caption>.
ruby-base
Эти элементы ведут себя как элементы HTML <rb>.
ruby-text
Эти элементы ведут себя как элементы HTML <rt>.
ruby-base-container
Эти элементы создаются как анонимные блоки.
ruby-text-container
Эти элементы ведут себя как элементы HTML <rtc>.

Блок

<display-box>
Эти значения определяют, создаёт ли элемент блоки отображения.
contents
Эти элементы сами по себе не создают отдельный блок. Их заменяют псевдоблок и дочерние блоки. Обратите внимание: спецификация CSS Display Level 3 определяет, как значение contents должно влиять на «необычные элементы» — элементы, которые отображаются не только с помощью концепций CSS-блоков, например замещаемые элементы. Подробнее см. в Приложении B: влияние display: contents на необычные элементы.
none
Отключает отображение элемента, чтобы он не влиял на раскладку (документ отображается так, как будто элемента не существует). Отображение всех дочерних элементов также отключается. Чтобы элемент занимал обычное место, но при этом ничего не отображал, используйте свойство visibility.

Составные значения

<display-legacy>
В CSS 2 для свойства display использовался составной синтаксис с одним ключевым словом, требовавший отдельных ключевых слов для блочного и строчного вариантов одного режима раскладки.
inline-block

Элемент создаёт блочный блок, который располагается среди окружающего содержимого так, как если бы он был единственным строчным блоком (то есть ведёт себя во многом как замещаемый элемент).

Эквивалент: inline flow-root.

inline-table

Значение inline-table не имеет прямого соответствия в HTML. Оно ведёт себя как элемент HTML <table>, но как строчный блок, а не блочный. Внутри блока таблицы находится блочный контекст.

Эквивалент: inline table.

inline-flex

Элемент ведёт себя как строчный элемент и размещает содержимое в соответствии с моделью flexbox.

Эквивалент: inline flex.

inline-grid

Элемент ведёт себя как строчный элемент и размещает содержимое в соответствии с моделью сетки.

Эквивалент: inline grid.

Какой синтаксис использовать?

Модуль CSS display описывает многоключевой синтаксис для значений свойства display, с помощью которого можно явно задать внешний и внутренний типы отображения. Одноключевые значения (составные значения <display-legacy>) поддерживаются для обратной совместимости.

Например, с помощью двух значений можно задать строчный flex-контейнер следующим образом:

.container {
  display: inline flex;
}

То же самое можно указать с помощью устаревшего одноключевого значения:

.container {
  display: inline-flex;
}

Подробнее об этих изменениях см. в руководстве Использование многоключевого синтаксиса со свойством CSS display.

Описание

На отдельных страницах, посвящённых различным типам значений свойства display, приведено несколько примеров их использования — см. раздел Синтаксис. Кроме того, следующие материалы подробно рассматривают различные значения display.

Многоключевые значения

  • Использование многоключевого синтаксиса со свойством CSS display

Потоковая раскладка CSS (display: block, display: inline)

  • Блочная и строчная раскладка в обычном потоке
  • Потоковая раскладка и переполнение
  • Потоковая раскладка и режимы письма
  • Введение в контексты форматирования
  • В потоке и вне потока

display: flex

  • Основные понятия flexbox
  • Выравнивание элементов во flex-контейнере
  • Управление пропорциями flex-элементов вдоль главной оси
  • Подробно о переносе flex-элементов
  • Упорядочивание flex-элементов
  • Связь flexbox с другими способами раскладки
  • Типичные сценарии использования flexbox

display: grid

  • Основные понятия раскладки сетки
  • Связь с другими способами раскладки
  • Размещение по линиям
  • Области шаблона сетки
  • Раскладка с именованными линиями сетки
  • Автоматическое размещение в сетке
  • Выравнивание элементов в раскладке CSS Grid
  • Сетки, логические значения и режимы письма
  • Раскладка CSS Grid и доступность
  • Реализация типичных макетов с помощью сеток
  • Раскладка по дорожкам сетки

Анимация display

Поддерживающие браузеры анимируют display с помощью дискретного типа анимации. Как правило, это означает, что в середине анимации между двумя значениями свойство переключается с одного значения на другое.

Есть одно исключение: анимация к display: none или от него. В этом случае браузер переключает значение так, чтобы анимируемое содержимое отображалось в течение всей длительности анимации. Например:

  • При анимации display от none до block (или другого видимого значения display) значение переключится на block в момент 0% длительности анимации, поэтому содержимое будет видно всё это время.
  • При анимации display от block (или другого видимого значения display) до none значение переключится на none в момент 100% длительности анимации, поэтому содержимое будет видно всё это время.

Такое поведение полезно для создания анимаций появления и исчезновения, например когда нужно удалить контейнер из DOM с помощью display: none, но при этом дать ему плавно исчезнуть посредством opacity, а не скрывать его сразу.

При анимации display с помощью CSS-анимаций начальное значение display нужно задать в явном ключевом кадре (например, с помощью 0% или from). Пример см. в статье Использование CSS-анимаций.

Для анимации display с помощью CSS-переходов требуются две дополнительные возможности:

  • @starting-style задаёт начальные значения свойств, от которых запускается переход при первом отображении анимируемого элемента. Это необходимо, чтобы избежать неожиданного поведения. По умолчанию CSS-переходы не запускаются при первом обновлении стилей элемента или при изменении типа display с none на другой тип.
  • transition-behavior: allow-discrete нужно указать в объявлении transition-property (или в сокращённом свойстве transition), чтобы включить переходы display.

Примеры переходов для свойства display см. на страницах @starting-style и transition-behavior.

Доступность

display: none

Использование значения none свойства display удаляет элемент из дерева доступности. В результате программы экранного доступа перестанут объявлять этот элемент и все его дочерние элементы.

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

Хотя display: none скрывает содержимое от дерева доступности, скрытые элементы, на которые ссылаются атрибуты aria-describedby или aria-labelledby видимых элементов, остаются доступны вспомогательным технологиям.

display: contents

В некоторых браузерах текущие реализации удаляют из дерева доступности любой элемент со значением contents свойства display (но его потомки остаются в дереве). В результате программы экранного доступа перестают объявлять сам элемент. Согласно спецификации CSS, такое поведение неверно.

  • [Более доступная разметка с display: contents Хидде де Врис](https://hidde.blog/more-accessible-markup-with-display-contents/)
  • [Display: Contents — это не сброс CSS Эдриан Росселли](https://adrianroselli.com/2018/05/display-contents-is-not-a-css-reset.html)

Таблицы

В некоторых браузерах изменение значения display элемента <table> на block, grid или flex меняет его представление в дереве доступности. В результате программы экранного доступа перестают правильно объявлять таблицу.

  • [Скрытый контент для повышения доступности Go Make Things](https://gomakethings.com/articles/hidden-content-for-better-a11y/)
  • Пояснения MDN к рекомендациям WCAG, пункт 1.3
  • [Понимание критерия успеха 1.3.1 Руководство W3C по WCAG 2.0](https://www.w3.org/TR/UNDERSTANDING-WCAG20/content-structure-separation-programmatic.html)

Формальное определение

Исходное значение inline
Применяется к всем элементам
Наследуется нет
Вычисленное значение как указанное значение, за исключением позиционированных и плавающих элементов, а также корневого элемента. В обоих случаях вычисленное значение может быть ключевым словом, отличным от указанного.
Тип анимации Дискретное поведение, кроме анимации к <code>none</code> или от него: значение остаётся видимым в течение всей длительности анимации

Формальный синтаксис

display = 
  [ <display-outside> || <display-inside> ] |
  <display-listitem> |
  <display-internal> |
  <display-box> |
  <display-legacy>

<display-outside> = 
  block |
  inline |
  run-in

<display-inside> = 
  flow |
  flow-root |
  table |
  flex |
  grid |
  ruby

<display-listitem> = 
  <display-outside>? &&
  [ flow | flow-root ]? &&
  list-item

<display-internal> = 
  table-row-group |
  table-header-group |
  table-footer-group |
  table-row |
  table-cell |
  table-column-group |
  table-column |
  table-caption |
  ruby-base |
  ruby-text |
  ruby-base-container |
  ruby-text-container

<display-box> = 
  contents |
  none

<display-legacy> = 
  inline-block |
  inline-list-item |
  inline-table |
  inline-flex |
  inline-grid

Примеры

Сравнение значений display

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

Для контейнеров и их дочерних элементов заданы свойства padding и background-color, чтобы было проще увидеть влияние значений display.

HTML

<article class="container">
  <span>First</span>
  <span>Second</span>
  <span>Third</span>
</article>

<article class="container">
  <span>First</span>
  <span>Second</span>
  <span>Third</span>
</article>

<div>
  <label for="display">Choose a display value:</label>
  <select id="display">
    <option selected>block</option>
    <option>block flow</option>
    <option>inline</option>
    <option>inline flow</option>
    <option>flow</option>
    <option>flow-root</option>
    <option>block flow-root</option>
    <option>table</option>
    <option>block table</option>
    <option>flex</option>
    <option>block flex</option>
    <option>grid</option>
    <option>block grid</option>
    <option>list-item</option>
    <option>block flow list-item</option>
    <option>inline flow list-item</option>
    <option>block flow-root list-item</option>
    <option>inline flow-root list-item</option>
    <option>contents</option>
    <option>none</option>
    <option>inline-block</option>
    <option>inline flow-root</option>
    <option>inline-table</option>
    <option>inline table</option>
    <option>inline-flex</option>
    <option>inline flex</option>
    <option>inline-grid</option>
    <option>inline grid</option>
  </select>
</div>

CSS

html {
  font-family: "Helvetica", "Arial", sans-serif;
  letter-spacing: 1px;
  padding-top: 10px;
}

article {
  background-color: red;
}

article span {
  background-color: black;
  color: white;
  margin: 1px;
}

article,
span {
  padding: 10px;
  border-radius: 7px;
}

article,
div {
  margin: 20px;
}

JavaScript

const articles = document.querySelectorAll(".container");
const select = document.querySelector("select");

function updateDisplay() {
  articles.forEach((article) => {
    article.style.display = select.value;
  });
}

select.addEventListener("change", updateDisplay);

updateDisplay();

Результат

Обратите внимание: некоторые многоключевые значения добавлены для наглядности и эквивалентны следующим значениям:

  • block = block flow
  • inline = inline flow
  • flow = block flow
  • flow-root = block flow-root
  • table = block table
  • flex = block flex
  • grid = block grid
  • list-item = block flow list-item
  • inline-block = inline flow-root
  • inline-table = inline table
  • inline-flex = inline flex
  • inline-grid = inline grid

Дополнительные примеры для каждого типа display приведены в разделе Группы значений.

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

Спецификация
Модуль CSS Display, уровень 3
# свойства display
Масштабируемая векторная графика (SVG) 2
# управление видимостью

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari в iOS Samsung Internet WebView для Android WebView в iOS
display
1
12
1
7
1
18
4
10.1
1
1.0
4.4
1
block
1
12
1
7
1
18
4
10.1
1
1.0
4.4
1
contents
65
79
37
52
11.1
65
37
47
11.3
9.0
65
11.3
flex
29
21
12
20В Firefox 28 появилась поддержка многострочного flexbox.
16
15
12.1–15
9
7
29
25
20В Firefox для Android 28 появилась поддержка многострочного flexbox.
16
14
12.1–14
9
7
2.0
1.5
4.4
4.4
9
7
flow-root
58
79
53
45
13
58
53
43
13
7.0
58
13
grid
57
16
12
52
44
10.1
57
52
43
10.3
6.0В Samsung Browser эта функция появилась раньше, чем можно было бы предположить по соответствующей версии Chrome.
57
10.3
grid-lanes
Нет
Нет
Нет
Нет
26.4
Нет
Нет
Нет
26.4
Нет
Нет
26.4
inline
1
12
1
7
1
18
4
10.1
1
1.0
4.4
1
inline-block
1
12
1
7
1
18
4
14
1
1.0
4.4
1
inline-flex
29
21
12
20В Firefox 28 появилась поддержка многострочного flexbox.
16
15
9
7
29
25
20В Firefox для Android 28 появилась поддержка многострочного flexbox.
16
14
9
7
2.0
1.5
4.4
4.4
9
7
inline-grid
57
16
12
52
44
10.1
57
52
43
10.3
6.0В Samsung Browser эта функция появилась раньше, чем можно было бы предположить по соответствующей версии Chrome.
57
10.3
inline-grid-lanes
Нет
Нет
Нет
Нет
26.4
Нет
Нет
Нет
26.4
Нет
Нет
26.4
inline-table
1
12
3
7
1
18
4
14
1
1.0
4.4
1
is_transitionable
117
117
Нет
103
18
117
Нет
78
18
24.0
117
18
keyframe_animatable
116
116
Нет
102
18
116
Нет
78
18
24.0
116
18
list-item
1
12
1
7
1
18
4
14
1
1.0
4.4
1
math
109
109
Нет
95
Нет
109
Нет
74
Нет
21.0
109
Нет
multi-keyword_values
115
115
70
101
15
115
79
77
15
23.0
115
15
none
1В Chrome 65 перестали создаваться объекты макета для элементов внутри <iframe>, к которому применено display:none.
12
1
7В Opera 52 перестали создаваться объекты макета для элементов внутри <iframe>, к которому применено display:none.
1
18В Chrome для Android 65 перестали создаваться объекты макета для элементов внутри <iframe>, к которому применено display:none.
4
10.1В Opera для Android 47 перестали создаваться объекты макета для элементов внутри <iframe>, к которому применено display:none.
1
1.0В Chrome 65 перестали создаваться объекты макета для элементов внутри <iframe>, к которому применено display:none.
4.4В WebView для Android 65 перестали создаваться объекты макета для элементов внутри <iframe>, к которому применено display:none.
1
ruby
121
121
12–79
38
107
Нет
121
38
81
Нет
25.0
121
Нет
ruby-base
Нет
12–79
38
Нет
Нет
Нет
38
Нет
Нет
Нет
Нет
Нет
ruby-base-container
Нет
12–79
38
Нет
Нет
Нет
38
Нет
Нет
Нет
Нет
Нет
ruby-text
121
121
12–79
38
107
Нет
121
38
81
Нет
25.0
121
Нет
ruby-text-container
Нет
12–79
38
Нет
Нет
Нет
38
Нет
Нет
Нет
Нет
Нет
table
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-caption
1
12
1
15
≤4
18
4
14
≤3.2
1.0
4.4
≤3.2
table-cell
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-column
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-column-group
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-footer-group
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-header-group
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-row
1
12
1
7
1
18
4
14
1
1.0
4.4
1
table-row-group
1
12
1
7
1
18
4
14
1
1.0
4.4
1

См. также

  • visibility, float, position
  • grid, flex
  • Компоновка руби CSS module
  • SVG display attribute
  • Блочная и строчная компоновка в нормальном потоке
  • Введение в контексты форматирования
  • Компоновка дорожек сетки

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/display

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API