Что именно наборы свойств flex-basis?

Есть ли разница между установкой max-width или width на гибкий элемент вместо flex-basis?

Является ли это "точкой прерывания" для свойств flex-grow/shrink?

И когда я устанавливаю flex-wrap: wrap, как браузер решает, в какой момент переместить элемент в новую строку? Это по их ширине или "гибкой основе"?

Пример: http://jsfiddle.net/wP5UP/ Последние два блока имеют одинаковый flex-basis: 200px, но только один из них перемещается вниз, когда окно находится между 300px и 400px. Почему?

Ответ 1

flex-basis позволяет указать начальный/начальный размер элемента, прежде чем вычислять все остальное. Это может быть либо процент, либо абсолютное значение.

Тем не менее, не точка прерывания для свойств flex-grow/shrink. Браузер определяет, когда следует обернуть элемент на основе того, будут ли начальные размеры элементов превышать ширину поперечной оси (в обычном смысле, то есть в ширине).

Основываясь на вашей скрипке, причина, по которой последний перемещается в окно, состоит в том, что ширина родителя полностью занята предыдущими братьями и сестрами - и когда вы разрешаете контент обертывать, элементы, которые не вписываются в первая строка попадает в следующую строку. Поскольку flex-grow является ненулевым значением, он просто растягивается, чтобы заполнить все пробелы, оставшиеся во второй строке.

Смотрите демонстрационный скрипт (измененный с вашего).

Если вы посмотрите на скрипку, я изменил для последнего элемента объявление нового размера:

.size3 {
  flex: 0 1 300px;
}

Вы поймете, что элемент измеряет 300 пикселей по желанию. Однако, когда вы настраиваете свойство flex-grow, чтобы его значение превышало 0 (см. Пример), он будет растягиваться, чтобы заполнить строку, которая является ожидаемым поведением. Поскольку в своем новом контексте строки он не имеет братьев и сестер для сравнения, целое число от 1 до бесконечности не будет влиять на его размер.

Следовательно, flex-grow можно рассматривать как это:

  • 0: (Значение по умолчанию) Не растягивайте. Либо размер по размеру содержимого элемента, либо подчиняться flex-basis.
  • 1: растянуть.
  • ≥2 (целое число n): растянуть. Например, будет n раз больше других элементов с flex-grow: 1 в той же строке.