Это очень редко используемое свойство в CSS Flexbox и про него в принципе мало чего подробного написано в интернете. Но это не беда. В этой статье вы узнаете о том что же такое display:inline-flex и какие преимущества он даёт при вёрстке, а также про его отличия от display: flex.
Но в начале полезный перевод двух статей:
I Used CSS Inline Flex For The First Time
И
display: flex vs display: inline-flex
Как фронт-энд разработчик, я регулярно использую свойство CSS display в своей ежедневной работы. Я могу использовать block, grid или flex, как и его значения.
Во время работы над проектом, мне был нужен flex-контейнер, который в тот же момент был бы и инлайновым. Другими словами, мне нужно было, чтобы контент внутри контейнера был флексовым, но сам контейнер вёл себя как инлайновый элемент.
Хорошо, что я вспомнил о display: inline-flex. Никогда до этого не использовал, но всегда видел его в DevTools браузера.
Итак, давайте посмотрим на дизайн, который мне нужно было сверстать:
У каждого бэджа есть своя уникальная иконка, отцентрированная горизонтально и вертикально. Центрирование, как вы уже наверное поняли, происходит с помощью Flexbox и все бэджи стоят в ряд, так как к ним применено display: inline-flex.
HTML:
Для уточнения, врапер .badges-list ничего не делает для инлайнового позиционирования элементов. Так происходит, потому что на его потомке .c-badge применяется inline-flex.
CSS:
.c-badge {
display: inline-flex;
justify-content: center;
align-items: center;
}В чем тут разница?
Пример 1: display: flex
У трёх контейнеров с display: flex синий цвет, в них есть три потомка div’а, отмеченные красным цветом и имеющие flex: 1.
Каждый родительский контейнер находится на своей строке. А трое потомков занимают равную ширину.
$flexColor: #64B5F6;
$inlineColor: #F06292;HTML:
Пример 2: display: inline-flex
К трем контейнерам в синем цвете применён display: inline-flex, в них есть три потомка div’а, которые в красном цвете и имеют flex:1 и min-width: 50px.
Каждый родительский контейнер стоит сразу за другим, потому что они могут уместиться в один ряд. Ширина родительского контейнера зависит от размера потомков, которым тут был выставлен min-width в 50px.
CSS, но уже с inline-flex:
.container--inline-flex { display: inline-flex;}HTML:
Объясняем примеры
Элемент с display:flex очень схож с элементом, на котором стоит display: block, потому что он забирает сразу всю строку. Однако, в сравнении с представленными до этого свойствами позиционирования, его потомки могут быть размещены в контейнере куда более гибко и динамично, нежели это было возможно ранее.
Если мы изменим display: flex на display: inline-flex:
Родительский контейнер будет показываться инлайново.
К потомкам могут быть применены все flex свойства, разницы с display: flex в этом плане совсем не будет.
В общем, это означает то, что если элементы потомки не слишком велики, то два контейнера с display: inline-flex могут идти бок о бок.
У других display свойств есть свои инлайновые близнецы:
У block есть inline-block
У table есть inline-table
И даже у grid есть inline-grid
Перевод статьи The CSS background-image property as an anti-pattern
Перевод статьи The CSS background-image property as an anti-pattern
Источник записи: https://medium.com



