Ответ 1
Часть flex-grow
свойства flex
(первое число) определяет, как дополнительное пространство должно быть распределено между элементами flex, когда их объединенный размер меньше, чем их гибкий контейнер. Дополнительное пространство делится так: [flex-grow value] / [sum of flex-grow values for all siblings]
- Ввод текста:
10 / 21
- Выберите поле:
5 / 21
- Кнопка подтверждения:
6 / 21
Это дополнительное пространство добавляется к размеру элемента вдоль главной оси, чтобы определить его окончательный размер. Он не используется для определения того, насколько велик элемент по отношению к его гибкому контейнеру, что означает значение flex-основы и/или ширины/высоты, когда установлено значение процента.
Когда объединенный размер гибких элементов больше его контейнера, вступает в игру flex-shrink
часть свойства flex
(значение 2-го безразмерного). Это в основном обратная сторона flex-grow
: отношения одинаковы, но размер переполнения вычитается из элемента flex вместо добавления.
Opera имеет очень хорошее объяснение этого свойства в статье Flexbox: http://dev.opera.com/articles/view/flexbox-basics/
Для вашей конкретной проблемы я смог решить ее в Chrome, установив ширину входного элемента на очень небольшое значение:
input {margin:0; width: 20px}
Это решение не работает в Opera, если вы добавите свойства unsrefixed. Вероятно, он тоже не будет работать в Firefox. Это также делает элементы слишком маленькими, чтобы их можно было использовать для браузеров Flexbox.