Как я могу позволить гибким элементам расти при сохранении одинакового размера?
Flexbox - один из самых классных инструментов, который может пожелать веб-дизайнер. К сожалению, иногда не сразу видно, что я должен делать. Возьмем, к примеру, этот плунжер. Я хотел бы, чтобы элементы расширялись, чтобы заполнить строку, не расширяя ее в последней строке.
Мой CSS содержит этот важный материал:
.recipe-picker recipe {
-webkit-flex: 0 1 8em;
flex: 0 1 8em;
height: 12em;
}
Если я изменяю 0
на любое положительное число (что соответствует свойству flex-grow
), последняя строка элемента будет растягиваться супер уродливым способом. Остальные элементы ведут себя довольно красиво, но последняя строка должна иметь тот же размер, что и остальные элементы.
Что я могу сделать, чтобы исправить это поведение?
Ответы
Ответ 1
Это то, что не может быть выражено с помощью CSS Flexbox прямо сейчас. Кто-то задал в основном этот точный вопрос в списке рассылки рабочей группы CSS несколько дней назад, а ответ был: "На данный момент нет, это невозможно. Это высокоприоритетный элемент для Flexbox 2.
Возможно, вы сможете взломать что-то вроде того, что хотите использовать max-width
, тем не менее, из-за бесконечного роста элементов flex (особенно на последней строке). Здесь разветвленная версия вашего plunk с ненулевым гибким выражением и max-width: 10em
.
(я выбрал 10em
произвольно, вы также можете использовать, например, max-width: calc(100%/5)
, если вы хотите убедиться, что каждый элемент flex занимает не более 1/5 строки, например.)
Ответ 2
Я добился того, что вы искали, настроив flex-shrink
.
.recipe-picker recipe {
flex: 0 0 8em;
}
Я пытаюсь думать о flex-grow
и flex-shrink
как "разрешении на расширение". Когда либо имеет значение, это означает, что у элемента есть разрешение на рост. Когда все элементы имеют гибкий рост, они будут расширяться до того же размера. Но одно и то же правило выполняется, если все они имеют значение flex-shrink
.
http://plnkr.co/edit/sxHUzIRPlbstpOzoGcR6?p=preview
Ответ 3
У меня была такая же проблема, и мне удалось найти полностью рабочий обходной путь для устранения этого недостатка flexbox.
Учитывая, что это дубликат этого другого вопроса, и было бы неправильно копировать мой ответ здесь снова, я собираюсь ссылаться на него, для тех Гуглеров, которые оказываются здесь, а не там:
Как сохранить обернутые гибкие элементы той же ширины, что и элементы предыдущей строки?