Жадность и ширина flex блоков на CSS

Если у флекс элементов не задана ширина, то эта ширина сформируется по содержимому:

<div class="parent"> <div class="child elem1">text text text</div> <div class="child elem2">text</div> </div> .parent { display: flex; width: 300px; height: 200px; border: 1px solid red; } .child { height: 50px; border: 1px solid green; }

:

Если таким элементам задать жадность, то свободное пространство будет прибавляться к ширине, сформированной текстом:

<div class="parent"> <div class="child elem1">text text text</div> <div class="child elem2">text</div> </div> .parent { display: flex; width: 300px; height: 200px; border: 1px solid red; } .child { height: 50px; border: 1px solid green; } .elem1 { flex-grow: 1; } .elem2 { flex-grow: 1; }

:

Жадность и ширина

Пусть у нас есть несколько флекс блоков. Давайте одному из этих блоков поставим flex-grow в значении 1, а всем остальным элементам - некоторую ширину. В результате получится, что все блоки будут иметь фиксированную ширину, а наш избранный жадный блок будет занимать все остальное доступное пространство:

<div class="parent"> <div class="child elem1"></div> <div class="child elem2"></div> <div class="child elem3"></div> </div> .parent { display: flex; width: 400px; height: 200px; border: 1px solid red; } .child { height: 50px; border: 1px solid green; } .elem1 { width: 100px; } .elem2 { flex-grow: 1; } .elem3 { width: 100px; }

:

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