5

В чем разница между display:inline-flex и display:flex?

11

Описание проблемы:

Я пытаюсь выровнять элементы по вертикали внутри контейнера с определённым ID. Я установил свойство display: inline-flex; для этого контейнера, так как он должен быть flex-контейнером.

Однако в результате я не наблюдаю изменений в отображении. Я ожидал, что все элементы внутри контейнера с ID будут выровнены по вертикали. Почему этого не происходит?

Вот мой код:

#wrapper {
    display: inline-flex;
    /* нет разницы с display: flex; */
}
<body>
    <div id="wrapper">
        <header>header</header>
        <nav>nav</nav>
        <aside>aside</aside>
        <main>main</main>
        <footer>footer</footer>
    </div>
</body>

Почему элементы внутри контейнера не выравниваются, как я ожидал?

3 ответ(ов)

0

flex и inline-flex оба применяют флекс-раскладку к дочерним элементам контейнера. Контейнер с display: flex ведет себя как блочный элемент, тогда как display: inline-flex делает контейнер строчным элементом. Важно понимать, что это влияет на то, как контейнер взаимодействует с другими элементами на странице: блочные элементы занимают всю ширину, а строчные элементы располагаются в линию с другими элементами.

0

Вопрос: Как работает свойство display: flex и display: inline-flex?

Ответ: Свойство display: flex применяет флекс-разметку только к дочерним элементам контейнера. Это означает, что сам контейнер остается блочным элементом, занимает всю ширину экрана и, как следствие, каждый флекс-контейнер будет переноситься на новую строку.

С другой стороны, display: inline-flex применяет флекс-разметку как к дочерним элементам, так и к самому контейнеру. В результате контейнер ведет себя как встроенный флекс-элемент, занимая только ту ширину, которая требуется его дочерним элементам, а не всю ширину экрана.

Таким образом, если несколько флекс-контейнеров заданы с display: inline-flex, они будут выстраиваться рядом друг с другом до тех пор, пока не будет занята вся ширина экрана.

0

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

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

.parent {
   display: inline-flex;
}

.children {
   flex: 1;
}

Свойство flex: 1 обозначает отношение, похожее на проценты от ширины элемента.

Посмотрите на эти две ссылки, чтобы увидеть простые живые примеры Flexbox:

  1. https://njbenjamin.com/bundle-3.htm
  2. https://njbenjamin.com/bundle-4.htm

Если вы используете первый пример:

https://njbenjamin.com/flex/index_1.htm

Вы можете поиграть с консолью браузера, чтобы изменить display контейнера между flex и inline-flex.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь