Ganância zero de elementos flex em CSS
Se flex-grow for igual a zero para algum
elemento, então esse elemento não participará
da distribuição do espaço livre.
Por padrão, a ganância tem justamente
valor zero e, portanto, elementos sem flex-grow
definido não dividem o espaço livre
entre si.
Vamos fazer um cálculo como exemplo.
Suponha que temos três elementos flex,
cada um com largura de 100px. Suponha que o primeiro
elemento não tenha flex-grow (ou seja
igual a 0), o segundo elemento tenha flex-grow
igual a 2, e o terceiro - igual a 3.
Suponha que a largura do pai seja 500px.
Então o espaço livre será igual a
200px, e para uma unidade de flex-grow
caberá . Resultará que a largura
do primeiro elemento permanecerá 200px / 5 = 40px100px,
pois ele não participa da distribuição,
a largura do segundo será , e a largura do terceiro - 100px + 2 * 40px
= 180px.
100px
+ 3 * 40px = 220px
Tarefas práticas
Em todas as tarefas abaixo, você verá
algum código com elementos flex, tendo
largura e flex-grow. Com base no código
apresentado, calcule quais dimensões cada
um dos elementos terá. Em seguida, execute o código
e verifique seus cálculos, medindo as larguras
reais dos elementos.
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 500px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 200px;
flex-grow: 0;
}
.elem2 {
width: 100px;
flex-grow: 1;
}
.elem3 {
width: 100px;
flex-grow: 1;
}
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
</div>
.parent {
display: flex;
width: 900px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 300px;
flex-grow: 0;
}
.elem2 {
width: 200px;
flex-grow: 3;
}
.elem3 {
width: 100px;
flex-grow: 2;
}
<div class="parent">
<div class="child elem1">1</div>
<div class="child elem2">2</div>
<div class="child elem3">3</div>
<div class="child elem4">4</div>
</div>
.parent {
display: flex;
width: 700px;
height: 200px;
border: 1px solid red;
}
.child {
height: 50px;
border: 1px solid green;
}
.elem1 {
width: 200px;
flex-grow: 0;
}
.elem2 {
width: 200px;
flex-grow: 0;
}
.elem3 {
width: 100px;
flex-grow: 1;
}
.elem4 {
width: 100px;
flex-grow: 1;
}