Ответ 1
Расчеты определены в спецификации.
Размер гибкого элемента с заполнением и flex-grow
определяется расчетами в спецификации flexbox.
Эти вычисления аналогичны размерам гибких элементов с прокладкой и flex-shrink
.
Честно говоря, математика достаточно технична и не самая легкая в мире, чтобы понять.
Но если вы хотите войти в нее, вот подробности:
Примеры
Ниже приведены примеры, которые, надеюсь, сделают поведение более ясным.
ПРИМЕЧАНИЕ. Имейте в виду, что flex-grow
не является инструментом для непосредственного определения длины элемента flex. Это инструмент для распределения пространства в контейнере между элементами flex. Свойство flex-basis
задает начальный основной размер элемента flex. Если flex-grow
используется с flex-basis
, проблема в вопросе решена (см. Пример № 4 ниже).
Пример №1
В блочном контейнере, где у вас есть box-sizing: border-box
, поля в вашем коде будут равномерно отображаться независимо от заполнения.
body > div {
height: 50px;
/* display: flex; */
font-size: 0; /* remove inline block whitespace */
}
body > div > div {
/* flex: 1; */
box-sizing: border-box;
height: 50px;
display: inline-block;
width: 50%;
}
#a {
background-color: red;
}
#b {
background-color: green;
}
#c {
padding: 10px;
background-color: blue;
}
#d {
background-color: yellow;
<div>
<div id="a"></div>
<div id="b"></div>
</div>
<div>
<div id="c"></div>
<div id="d"></div>
</div>