display
Базовая Широкодоступная
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Свойство display CSS задаёт, как элемент обрабатывается как блочный или инлайновый бокс и макет, используемый для его потомков, такой как потоковый макет, сетка или гибкая компоновка.
Формально, свойство display задаёт внутренние и внешние типы отображения элемента. Внешний тип задаёт участие элемента в потоковом макете; внутренний тип задаёт макет потомков. Некоторые значения display полностью определены в своих отдельных спецификациях; например, детали того, что происходит при объявлении display: flex, определены в спецификации CSS гибкой компоновки.
Попробовать
Синтаксис
/* precomposed values */ display: block; display: inline; display: inline-block; display: flex; display: inline-flex; display: grid; display: inline-grid; display: flow-root; /* box generation */ display: none; display: contents; /* multi-keyword syntax */ display: block flex; display: block flow; display: block flow-root; display: block grid; display: inline flex; display: inline flow; display: inline flow-root; display: inline grid; /* other values */ display: table; display: table-row; /* all table elements have an equivalent CSS display value */ display: list-item; /* 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>-
Эти ключевые слова определяют внутренний тип отображения элемента, который определяет тип контекста форматирования, в котором его содержимое выводится (при условии, что это не заменённый элемент):
flow-
Элемент выводит своё содержимое с использованием потокового макета (блочно-инлайновый макет).
Если его внешний тип отображения
inline, и он участвует в блочном или инлайновом контексте форматирования, то он генерирует инлайновый бокс. В противном случае он генерирует блочный бокс.В зависимости от значения других свойств (таких как
position,floatилиoverflow) и того, участвует ли он сам в блочном или инлайновом контексте форматирования, он либо устанавливает новый контекст форматирования блоков (BFC) для своего содержимого, либо интегрирует своё содержимое в контекст форматирования родителя. flow-root-
Элемент генерирует блочный бокс, который устанавливает новый контекст форматирования блоков, определяя, где находится корень форматирования.
table-
Эти элементы ведут себя как HTML-элементы
<table>. Определяет блочный бокс. flex-
Элемент ведёт себя как блочный элемент и выводит своё содержимое в соответствии с моделью гибкой компоновки.
grid-
Элемент ведёт себя как блочный элемент и выводит своё содержимое в соответствии с моделью сетки.
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имеют сложную внутреннюю структуру с несколькими различными ролями, которые могут выполнять их потомки и наследники. Этот раздел определяет эти «внутренние» значения отображения, которые имеют смысл только в рамках конкретной модели макета.table-row-group-
Эти элементы ведут себя как HTML-элементы
<tbody>. table-header-group-
Эти элементы ведут себя как HTML-элементы
<thead>. -
Эти элементы ведут себя как 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.
Глобальные
/* Global values */ display: inherit; display: initial; display: unset;
Описание
На отдельных страницах для различных типов значений, которые может иметь display , представлены многочисленные примеры этих значений в действии — см. раздел Синтаксис. Кроме того, ознакомьтесь со следующими материалами, которые подробно описывают различные значения отображения.
Значения с несколькими ключевыми словами
CSS Потоковый макет (display: block, display: inline)
display: flex
display: grid
- Основные понятия сетки
- Взаимосвязь с другими методами макета
- Размещение, основанное на линиях
- Области шаблона сетки
- Макет с именованными линиями сетки
- Автоматическое размещение в сетке
- Выравнивание блоков в сетке
- Сетки, логические значения и режимы написания
- Макет сетки и доступность
- Макет сетки и поэтапное улучшение
- Реализация общих макетов с помощью сеток
Анимация отображения
Поддерживаемые браузеры анимируют display с помощью типа дискретной анимации. Это обычно означает, что свойство будет переключаться между двумя значениями на 50% во время анимации между двумя значениями.
Существует одно исключение, когда анимация выполняется до или из 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
Использование значения display none для элемента удалит его из дерева доступности. Это приведет к тому, что экранная читалка больше не будет объявлять элемент и все его дочерние элементы.
Если вы хотите скрыть элемент визуально, более доступной альтернативой является использование комбинации свойств для визуального скрытия элемента на экране, но при этом сохранения его доступности для вспомогательных технологий, таких как экранные читалки.
В то время как display: none скрывает контент из дерева доступности, элементы, которые скрыты, но на которые ссылаются видимые элементы aria-describedby или aria-labelledby атрибутов, доступны для вспомогательных технологий.
display: contents
Текущие реализации в некоторых браузерах удалят из дерева доступности любой элемент со значением display равным contents (но потомки останутся). Это приведет к тому, что сам элемент больше не будет объявляться технологией чтения с экрана. Это некорректное поведение согласно спецификации CSS.
Таблицы
В некоторых браузерах изменение значения display элемента <table> на block, grid, или flex изменит его представление в дереве доступности. Это приведет к тому, что таблица больше не будет правильно объявляться технологией чтения с экрана.
Формальное определение
| Начальное значение | inline |
|---|---|
| Применимо к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как указанное значение, за исключением позиционированных и плавающих элементов, а также корневого элемента. В обоих случаях вычисленное значение может быть другим ключевым словом, отличным от указанного. |
| Тип анимации | Дискретное поведение, за исключением анимации к или от none — видимое на протяжении всего времени анимации |
Формальный синтаксис
display =
[ <display-outside> || <display-inside> ] |
<display-listitem> |
<display-internal> |
<display-box> |
<display-legacy> |
<display-outside> || [ <display-inside> | math ]
<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-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
Дополнительные примеры можно найти на страницах для каждого отдельного типа отображения в разделе Сгруппированные значения.
Спецификации
| Спецификация |
|---|
| CSS Display Module Level 3 # the-display-properties |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
display |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
|---|---|---|---|---|---|---|---|---|---|---|---|
block |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
contents |
65 | 79 | 37 | 52 | 11.1 | 65 | 37 | 47 | 11.3 | 9.0 | 65 |
flex |
2921 | 12 | 20Firefox 28 added multi-line flexbox support. |
161512.1–15 | 97 | 2925 | 20Firefox 28 added multi-line flexbox support. |
161412.1–14 | 97 | 2.01.5 | 4.44.4 |
flow-root |
58 | 79 | 53 | 45 | 13 | 58 | 53 | 43 | 13 | 7.0 | 58 |
grid |
57 | 1612 | 52 | 44 | 10.1 | 57 | 52 | 43 | 10.3 | 6.0Samsung Internet added this earlier than the corresponding Chrome version would indicate. |
57 |
inline |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
inline-block |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
inline-flex |
2921 | 12 | 20Firefox 28 added multi-line flexbox support. |
1615 | 97 | 2925 | 20Firefox 28 added multi-line flexbox support. |
1614 | 97 | 2.01.5 | 4.44.4 |
inline-grid |
57 | 1612 | 52 | 44 | 10.1 | 57 | 52 | 43 | 10.3 | 6.0Samsung Internet added this earlier than the corresponding Chrome version would indicate. |
57 |
inline-table |
1 | 12 | 3 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
is_transitionable |
117 | 117 | Нет | 103 | 18 | 117 | Нет | 78 | 18 | 24.0 | 117 |
keyframe_animatable |
116 | 116 | Нет | 102 | 18 | 116 | Нет | 78 | 18 | 24.0 | 116 |
list-item |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
math |
109 | 109 | Нет | 95 | Нет | 109 | Нет | 74 | Нет | 21.0 | 109 |
multi-keyword_values |
115 | 115 | 70 | 101 | 15 | 115 | 79 | 77 | 15 | 23.0 | 115 |
none |
1Chrome 65 stopped creating layout objects for elements inside an<iframe> with display:none applied. |
12 | 1 | 7Opera 52 stopped creating layout objects for elements inside an<iframe> with display:none applied. |
1 | 18Chrome 65 stopped creating layout objects for elements inside an<iframe> with display:none applied. |
4 | 10.1Opera Android 47 stopped creating layout objects for elements inside an<iframe> with display:none applied. |
1 | 1.0Chrome 65 stopped creating layout objects for elements inside an<iframe> with display:none applied. |
4.4Chrome 65 stopped creating layout objects for elements inside an<iframe> with display:none applied. |
ruby |
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 | 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 |
table-caption |
≤80 | 80 | ≤72 | 67 | ≤13.1 | 80 | 79 | 57 | ≤13.4 | 13.0 | 80 |
|---|---|---|---|---|---|---|---|---|---|---|---|
table-cell |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
table-column |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
table-column-group |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
table-footer-group |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
table-header-group |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
table-row |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
table-row-group |
1 | 12 | 1 | 7 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/display