Привет. Вопрос из серии базы, но я уже запарился.
Есть 3 флекс элемента, они все растягиваются по родителю на 100% ширины.
У всего стоит border-box. А значит паддинги не учитываются в размере элемента (они же идут внутри).
Однако при добавлении какому-то флексу паддингов, он по итогу становится больше.
Даже если место внутри позволяет добавить еще паддинга.
Изучив еще раз спецификацию и работу flex-shrink/basis/grow - я все еще не въхехал, почему он таки увеличивает размер.
Как я понял, тот блок что имеет паддинги (70пх) становится в базовом размере как 140пх.
В то время как остальные нет. А может и не так понял.
Да, конечно я могу им всем добавить паддинги и они станут все одинаковые. Но если мне надо будет в каком-то элементе разместить контент, а в каком-то картинки на всю высоту/ширину - Мне придется их абсолютить и ставить overflow hidden обертке, иначе будут отступы. Чего я делать само собой не хочу и что-то подсказывает внутри что это явно неверно.
У меня флексы это item + у них доп.классы. Типо модификаторы. Как раз через них и задаю доп.свойства. Если в 3-й я добавляю
flex-basis: calc(100% - 280px);
Паддинги 70пх уможенные на 4 - это решает проблему. И то, он все равно на какое-то количество пикселей шире чем остальны. Но неужели это правильно?
+ не совсем понятно почему 280, а не 140. Ведь паддинги стоят только слева и справа.
paddin: 0 70px;
Но нет, если я пишу в 3-м модификаторе
flex-basis: calc(100% - 140px);
и уменьшаю ширину браузера - он все равно больше чем остальные...
Да, я могу решить проблему просто используя гриды и поставить 1fr 1fr 1fr. Но тот факт что я не понимаю почему так происходит (не до конца понимаю) и не знаю как это решить - изнутри не щадит...
Помогите разобраться.
Песочница: https://codepen.io/divside/full/rNZrrzo (3-й флекс)