display

Властивість CSS display (зображувати) встановлює, як розглядається елемент: як блоковий чи рядковий елемент, і яке компонування буде застосовано до його нащадків: потокове, сіткове чи гнучке.

Формально кажучи, властивість display встановлює для елемента внутрішній та зовнішній типи відображення. Зовнішній тип визначає участь елемента у потоковому компонуванні; внутрішній тип визначає компонування нащадків. Деякі значення display повністю описані у власних специфікаціях; до прикладу, деталі того, що відбувається при встановленні display: flex визначено у специфікації Гнучкої блокової моделі CSS.

Спробуйте його в дії

Синтаксис

Властивість CSS display вказується за допомогою ключових слів.

/* складені значення */
display: block;
display: inline;
display: inline-block;
display: flex;
display: inline-flex;
display: grid;
display: inline-grid;
display: flow-root;

/* створення блока */
display: none;
display: contents;

/* синтаксис із багатьма значеннями – ключовими словами */
display: block flow;
display: inline flow;
display: inline flow-root;
display: block flex;
display: inline flex;
display: block grid;
display: inline grid;
display: block flow-root;

/* інші значення */
display: table;
display: table-row; /* усі табличні елементи мають еквівалентне значення CSS-властивості display */
display: list-item;

/* Глобальні значення */
display: inherit;
display: initial;
display: revert;
display: revert-layer;
display: unset;

Згруповані значення

Ключові значення можуть бути згруповані у шість категорій значень.

Спрямовані назовні

<display-outside>

Ці ключові слова вказують зовнішній тип представлення елемента, що по суті є його роллю у потоковому компонуванні:

block

Елемент створює рамки блока, додаючи розрив рядка до та після елемента у звичайному потоці.

inline

Елемент утворює одну або більше рядкових рамок, що не утворюють розривів рядка до або після них. У нормальному потоці наступний елемент буде розташований на тому ж самому рядку, що й попередній, якщо в рядку достатньо місця для нього.

Примітка: У випадку отримання виключно зовнішнього значення (наприклад, display: block, чи display: inline) ті браузери, що підтримують синтаксис із кількома значеннями – ключовими словами, встановлюють внутрішнє значення у flow. Така логіка призводить до очікуваної поведінки, наприклад: описавши елемент як block, очікуємо, що нащадки такого елемента братимуть участь у блоковій та рядковій звичайних потокових розкладках.

Спрямовані всередину

<display-inside>

Ці ключові слова вказують внутрішній тип представлення елемента, що визначає тип форматування контексту, в якому його вміст розташовано (припускаючи, що елемент не заміщується):

flow

Елемент розміщує свій вміст за допомогою потокової розкладки (комбінації блокової та рядкової). Якщо його зовнішній тип представлення – inline чи run-in, і він бере участь у блоковому чи рядковому контексті форматування, то генерує рядкові рамки. Інакше – утворює рамки блокового контейнера. Залежно від значень інших властивостей (наприклад, position, float чи overflow) та від того, чи він бере участь у блоковому чи рядковому контексті форматування, він або створює новий блоковий контекст форматування (БКФ) для свого вмісту, або інтегрує свій вміст у батьківський контекст форматування.

flow-root

Елемент породжує рамки блокового елемента, що утворює новий блоковий контекст форматування, визначаючи розташування кореня форматування.

table

Такі елементи поводяться неначе HTML-елементи <table>. Вони визначають рамки блокового рівня.

flex

Елемент поводиться як блоковий, і розкладає свій вміст згідно з моделлю flexbox.

grid

Елемент поводиться як блоковий, і розглядає свій вміст згідно з сітковою моделлю

ruby

Елемент поводиться як рядковий, і розкладає свій вміст згідно з рубіновою моделлю форматування. Він поводиться як відповідний елемент HTML <ruby>.

Примітка: Браузери, що підтримують синтаксис із кількома значеннями – ключовими словами, отримуючи виключно внутрішнє значення, наприклад, display: flex, чи display: grid, встановлюють внутрішнє значення у block. Така логіка призводить до очікуваної поведінки, наприклад: описавши елемент як grid, очікуємо, що для сіткового контейнера буде створено рамки блокового рівня.

Пункт списку

<display-listitem>

Елемент генерує блок для вмісту та окремий рядковий блок для пункту списку.

Окреме значення list-item змусить елемент поводити себе як елемент списку. Це можна використовувати разом з властивостями list-style-type і list-style-position.

list-item також може бути скомбінований з будь-яким ключовим значенням <display-outside>, а також із ключовими словами <display-inside> flow чи flow-root.

Примітка: У браузерах, що підтримують синтаксис із кількома значеннями – ключовими словами, якщо внутрішнє значення не вказане, то воно вважається рівним flow. Якщо не вказане зовнішнє значення, головні рамки елемента матимуть тип зовнішнього представлення block.

Внутрішні

<display-internal>

Деякі моделі компонування, наприклад, table та ruby, мають складну внутрішню структуру, з багатьма різними ролями, що можуть бути заповнені їх нащадками.

Ця секція визначає ці "внутрішні" значення display, котрі мають зміст лише всередині такого особливого режиму компонування.

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, рівень 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.

Який синтаксис слід використовувати сьогодні?

Специфікація рівня 3 вимагає два значення для властивості display, аби дати змогу вказати зовнішній та внутрішній типи представлення явно, — однак це поки не підтримується браузерами як слід.

Складені методи <display-legacy> дають змогу досягнути тих самих результатів з одним ключовим значенням, і розробники повинні надавати йому перевагу, поки двослівний синтаксис не отримає більшої підтримки. Наприклад, при використанні двох значень можна було б описати рядковий flex-контейнер наступним чином:

.container {
  display: inline flex;
}

Те саме наразі може бути описано з використанням єдиного значення.

.container {
  display: inline-flex;
}

Аби отримати більше інформації про ці зміни до специфікації, перегляньте статтю Пристосування до нового синтаксису display із кількома ключовими словами.

Глобальні

/* Глобальні значення */
display: inherit;
display: initial;
display: unset;

Опис

Окремі сторінки для різних типів значень, котрі може прийняти властивість display, містять численні приклади цих значень в дії — дивіться розділ Синтаксис. На додачу — перегляньте наступний матеріал, що поглиблено описує різні значення display.

Потокове компонування CSS (display: block, display: inline)

display: flex

display: grid

Занепокоєння щодо доступності

display: none

Використання display значення none на елементі прибере його із дерева доступності. Це призведе до того, що елемент та його нащадки більше не будуть оголошені технологією зчитування з екрана.

Якщо потрібно візуально приховати елемент, більш доступною альтернативою є використання комбінації властивостей для видимого усунення з екрана, але збереження для розбору допоміжними технологіями, наприклад, читачами екрана.

display: contents

Поточні реалізації у частині браузерів приберуть із дерева доступності будь-який елемент зі значенням contents властивості display (залишивши у дереві його нащадків). Це призведе до того, що сам елемент більше не буде оголошений технологією читання екрана. Це некоректна поведінка згідно зі специфікацією CSS.

Таблиці

Зміна значення display для елемента <table> на block, grid чи flex змінить його представлення у дереві доступності. Це спричинить до того, що таблиця не буде оголошена як слід технологією читання екрана.

Формальне визначення

Початкове значенняinline
Успадковуєтьсяні
Обчислене значенняas the specified value, except for positioned and floating elements and the root element. In both cases the computed value may be a keyword other than the one specified.

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

[ <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>Перший</span>
  <span>Другий</span>
  <span>Третій</span>
</article>

<article class="container">
  <span>Перший</span>
  <span>Другий</span>
  <span>Третій</span>
</article>

<div>
  <label for="display">Оберіть значення display:</label>
  <select id="display">
    <option selected>block</option>
    <option>inline</option>
    <option>inline-block</option>
    <option>none</option>
    <option>flex</option>
    <option>inline-flex</option>
    <option>grid</option>
    <option>inline-grid</option>
    <option>table</option>
    <option>list-item</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();

Результат

Примітка: Більше прикладів можна знайти на сторінках кожного окремого типу представлення даних, посилання — вище.

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

Специфікація
Unknown specification
              <br />
              <small>
                  # the-display-properties
                </small>
            </a>
          </td>
        </tr>
      </tbody>
    </table>

Сумісність із браузерами

desktop mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet
display
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 7
Safari Full support 1
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
contents
Chrome Full support 65
Edge Full support 79
Firefox Full support 37
Internet Explorer No support No
Opera Full support 52
Safari Full support 11.1
WebView Android Full support 65
Chrome Android Full support 65
Firefox for Android Full support 37
Opera Android Full support 47
Safari on iOS Full support 11.3
Samsung Internet Full support 9.0
Specific behavior of unusual elements when display: contents is applied to them
Chrome Full support 65
Edge Full support 79
Firefox Full support 59
Internet Explorer No support No
Opera Full support 52
Safari No support No
WebView Android Full support 65
Chrome Android Full support 65
Firefox for Android Full support 59
Opera Android Full support 47
Safari on iOS No support No
Samsung Internet Full support 9.0
<display-outside> Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 7
Safari Full support 1
WebView Android Full support 4.4
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
flex
Chrome Full support 29
Edge Full support 12
Firefox Full support 20
footnote
Internet Explorer Partial support 11
footnote
Opera Full support 16
Safari Full support 9
WebView Android Full support 4.4
Chrome Android Full support 29
Firefox for Android Full support 20
footnote
Opera Android Full support 16
Safari on iOS Full support 9
Samsung Internet Full support 2.0
flow-root
Chrome Full support 58
Edge Full support 79
Firefox Full support 53
Internet Explorer No support No
Opera Full support 45
Safari Full support 13
WebView Android Full support 58
Chrome Android Full support 58
Firefox for Android Full support 53
Opera Android Full support 43
Safari on iOS Full support 13
Samsung Internet Full support 7.0
grid
Chrome Full support 57
Edge Full support 16
Firefox Full support 52
Internet Explorer Partial support 10
prefix footnote
Opera Full support 44
Safari Full support 10.1
WebView Android Full support 57
Chrome Android Full support 57
Firefox for Android Full support 52
Opera Android Full support 43
Safari on iOS Full support 10.3
Samsung Internet Full support 6.0
footnote
inline-block
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 8
Opera Full support 7
Safari Full support 1
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 14
Safari on iOS Full support 1
Samsung Internet Full support 1.0
inline-flex
Chrome Full support 29
Edge Full support 12
Firefox Full support 20
footnote
Internet Explorer Full support 11
Opera Full support 16
Safari Full support 9
WebView Android Full support 4.4
Chrome Android Full support 29
Firefox for Android Full support 20
footnote
Opera Android Full support 16
Safari on iOS Full support 9
Samsung Internet Full support 2.0
inline-grid
Chrome Full support 57
Edge Full support 16
Firefox Full support 52
Internet Explorer Partial support 10
prefix footnote
Opera Full support 44
Safari Full support 10.1
WebView Android Full support 57
Chrome Android Full support 57
Firefox for Android Full support 52
Opera Android Full support 43
Safari on iOS Full support 10.3
Samsung Internet Full support 6.0
footnote
inline-table
Chrome Full support 1
Edge Full support 12
Firefox Full support 3
Internet Explorer Full support 8
Opera Full support 7
Safari Full support 1
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 14
Safari on iOS Full support 1
Samsung Internet Full support 1.0
list-item Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 6
Opera Full support 7
Safari Full support 1
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 14
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Supported on <legend>
Chrome Full support 71
Edge Full support 79
Firefox Full support 64
Internet Explorer No support No
Opera Full support 58
Safari No support No
WebView Android Full support 71
Chrome Android Full support 71
Firefox for Android Full support 64
Opera Android Full support 50
Safari on iOS No support No
Samsung Internet Full support 10.0
math
Experimental
Chrome Full support 87
disabled
Edge Full support 87
disabled
Firefox No support No
Internet Explorer No support No
Opera Full support 73
disabled
Safari No support No
WebView Android No support No
Chrome Android Full support 87
disabled
Firefox for Android No support No
Opera Android No support No
Safari on iOS No support No
Samsung Internet No support No
Multi-keyword values
Chrome No support No
Edge No support No
Firefox Full support 70
Internet Explorer No support No
Opera No support No
Safari Full support 15
WebView Android No support No
Chrome Android No support No
Firefox for Android No support No
Opera Android No support No
Safari on iOS Full support 15
Samsung Internet No support No
none
Chrome Full support 1
footnote
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 4
Opera Full support 7
footnote
Safari Full support 1
WebView Android Full support 37
footnote
Chrome Android Full support 18
footnote
Firefox for Android Full support 4
Opera Android Full support 10.1
footnote
Safari on iOS Full support 1
Samsung Internet Full support 1.0
footnote
ruby, ruby-base, ruby-base-container, ruby-text, and ruby-text-container
Chrome No support No
Edge No support 12 –  79
Firefox Full support 38
Internet Explorer Full support 7
Opera No support No
Safari No support No
WebView Android No support No
Chrome Android No support No
Firefox for Android Full support 38
Opera Android No support No
Safari on iOS No support No
Samsung Internet No support No
table, table-cell, table-column, table-column-group, table-footer-group, table-header-group, table-row, and table-row-group
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 8
Opera Full support 7
Safari Full support 1
WebView Android Full support 37
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 14
Safari on iOS Full support 1
Samsung Internet Full support 1.0

Дивіться також