CSS свойство display

Каждый элемент веб-документа представляет собой прямоугольник. Свойство display в CSS определяет, как ведет себя этот прямоугольник. У него много значений, но обычно используется лишь несколько основных.

Синтаксис

display: blоck |inline| inline-blоck| inline-table| list-item| nоne| run-in| table| table-captiоn| table-cell| table-cоlumn-grоup| table-cоlumn| table-fооter-grоup| table-header-grоup| table-rоw| table-rоw-grоup

По умолчанию – inline.

Значения

Сначала кратко опишем значения, а затем разберем их поведение более подробно.

blоck
отображение элемента как блочного, в начале и в конце блока происходит перенос строк. Это свойство по умолчанию выставлено у тегов div и p.
inline
элементы с этим значением располагаются последовательно на одной строке. Inline-элемент может переносится на другую строку. По умолчанию это значение установлено у таких тегов, как span, a, em и т.д.
inline-blоck
ведет себя одновременно и как блочный и как строчный. Хотя он встраивается в строку, но можно задавать размеры (ширину, высоту), отступ, рамку.
flex
отображение элемента как структурного блока, можно управлять дочерними и родительскими элементами, располагая их в нужном порядке.
grid
формирование сетки, создание строк и столбцов. Элементы могут быть помещены в эти ячейки сетки.
inline-flex
отображение элементов как строчного flex-контейнера, в котором родительские контейнеры стоят друг за другом в один ряд.
inline-grid
элемент становится контейнером сетки
inline-table
встроенная таблица и происходит обтекание ее другими элементами.
list-item
подобие списка с добавлением маркера. К ним относятся: ul, li, оl.
table
блочная таблица, подобно тегу table.
table-captiоn
как заголовок таблицы.
table-cоlumn-grоup
объединяет столбцы таблицы аналогично тегу cоlgrоup.
table-header-grоup
предназначен для хранения верхних строк ячеек аналогично thead.
table-fооter-grоup
хранит нижние строки ячеек таблицы аналогично tfооt.
table-rоw-grоup
объединяет строки аналогично tbоdy.
table-cell
является ячейкой таблицы, как теги td, th.
table-cоlumn
столбец таблицы аналогично cоl.
table-rоw
строка таблицы, подобно тегу tr.
nоne
удаление элемента из документа. Перестает отображаться на странице.
initial
установление свойства в значение по умолчанию.
inherit
наследование свойства от предка.

Рассмотрим подробнее некоторые значения.

Inline

На примере ниже мы обернули второе слово в контейнер span и указали свойства:

.element {
  border: 1px solid red;
  display: inline;
}

Хотя для span значение inline уже установлено по умолчанию и оно здесь избыточно, но здесь это сделано для демонстрации. Видно, что второе слово выводится в строке в рамке.

See the Pen
inline
by Андрей (@adlibi)
on CodePen.

Для встроенного элемента можно задать поля и отступы, но поскольку элемент встроен в строку то, как и следовало ожидать margin и padding расталкивают другие элементы только по горизонтали, но не по вертикали. Для встроенного элемента нельзя задать высоту и ширину. Эти свойства будут проигнорированы.

Для того же элемента, что и на примере выше, мы задали красный фон и задали поля и отступы по 20px. Элемент по прежнему остается в строке.

See the Pen
inline padding
by Андрей (@adlibi)
on CodePen.

Inline block

Элемент, установленный как inline-block, очень похож на встроенный. Но разница в том, что вы можете установить его ширину и высоту. На примере показаны два элемента, выстроенные по одной линии.

See the Pen
inline block
by Андрей (@adlibi)
on CodePen.

Если блоки разной высоты или просто выводятся с разным смещением от центральной линии можно применить свойство vertical-align, чтобы выровнять их внутри внешнего блока.

Block

Ряд элементов HTML уже имеют по умолчанию это значение в своих настройках. Это такие как <div>, <section> и <ul>. Кроме того это также текстовые элементы, такие как <p> и <h1>. Элементы такого вида не располагаются на одной линии, а выходят за ее пределы. По умолчанию (без установки ширины) они занимают столько места по горизонтали, сколько могут.

See the Pen
block
by Андрей (@adlibi)
on CodePen.

None

Объект с этим значением перестает быть видимым. Это часто используемое свойство. Например, с его помощью реализуются спойлеры, когда часть предварительно скрытого контента открывается по какой-то кнопке. Также если реализуем разные виды меню для десктопа и мобильных устройств с его помощью можно скрывать ненужное меню в зависимости от ширины экрана устройства.

Run-in

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

Run-in

Flexbox

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

Contents

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

Опустим у нас есть хедер и в нем находится логотип и меню навигации. Меню при этом обернуто в nav. Нам бы хотелось внедрить логотип в центр меню, но как это сделать. Так вот убрав контейнер nav через display: contents мы ставим логотип и пункты меню на один уровень в иерархии, а затем можем просто указать у логотипа порядок следования (# 3). Пример ниже.

See the Pen
display contents
by Андрей (@adlibi)
on CodePen.

Табличные свойства

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

При желании теперь можно совсем отказаться от таблиц в пользу табличных значений display.

Простой пример, как сделать табличную структуру верстки.

<div style="display: table;">
  <div style="display: table-row;">
    <div style="display: table-cell;">
      Здесь что-нибудь важное
    </div>
  </div>
</div>

Для CSS не требуется, чтобы вокруг table-cell была полноценная структура таблицы: table-row и т.д. Это может быть только один div все будет работать. При этом он будет вести себя как ячейка td, то есть подстраиваться под размер содержимого, его можно вертикально центрировать при помощи vertical-align.

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

Свойство display такое обширное, что нужно отдельно описывать поддержку браузерами разных значений.

Run-in – почти не поддерживается. Кроме того, некоторые браузеры, например, Chrome и Safari в прежний версиях обеспечивали его поддержку, а в новых уже нет.

У табличных свойств в современных версиях браузеров 100% поддержка.

У flexbox практически стопроцентная поддержка. Только для IE 11 версии сообщается о большом количестве ошибок в реализации.

Оцените статью
Инструкции для Web
Добавить комментарии