Різниця між "flex" та "inline-flex"
Коротка відповідь:
Одне є вбудованим, а інше в основному відповідає як елемент блоку (але має деякі власні відмінності).
Більш довга відповідь:
Inline-Flex - Вбудована версія flex дозволяє елементу та його дітям мати властивості flex, залишаючись у звичайному потоці документа / веб-сторінки. В основному, ви можете розмістити два вбудованих гнучких контейнера в один і той же ряд, якщо ширини були досить невеликими, без зайвої стилізації, щоб вони могли існувати в одному ряду. Це досить схоже на "вбудований блок".
Flex - контейнер та його діти мають властивості flex, але контейнер зберігає ряд, оскільки він виведений із нормального потоку документа. Він відповідає як елемент блоку, з точки зору документообігу. Два контейнери flexbox не могли існувати в одному ряду без зайвої стилізації.
Проблема, яка може виникнути
Через елементи, які ви перелічили у своєму прикладі, хоч я здогадуюсь, я думаю, ви хочете використовувати flex для відображення елементів, перелічених у рівний спосіб, але продовжувати бачити елементи поруч.
Причина, з якою ви, ймовірно, маєте проблеми, полягає в тому, що властивість flex та inline-flex за замовчуванням властивість "flex-direction" встановлено на "row". Це відобразить дітей поруч. Зміна цього властивості на "стовпець" дозволить вашим елементам складатись і резервувати простір (ширину), рівний ширині його батьківського.
Нижче наведено кілька прикладів, які показують, як працює flex vs inline-flex, а також швидке демонстрація того, як працюють елементи вбудованого проти блоку ...
display: inline-flex; flex-direction: row;
Скрипка
display: flex; flex-direction: row;
Скрипка
display: inline-flex; flex-direction: column;
Скрипка
display: flex; flex-direction: column;
Скрипка
display: inline;
Скрипка
display: block
Скрипка
Також чудовий довідковий документ:
Повне керівництво по Flexbox - фокуси css
inline-flex
таflex
: jsfiddle.net/mgr0en3q/1 Оригінальна скрипка від @ fish-graphics та @astridx