Как flex: 100% работает в css?

#css #flexbox #specifications

Вопрос:

Как говорится в веб-документах MDN : «Свойство flex является сокращением для «гибкого роста», «гибкого сжатия», «гибкой основы».

Синтаксис с одним значением: значение должно быть одним из:

a <number> : В этом случае он интерпретируется как flex: <number> 1 0 ; значение «усадка при изгибе» принимается равным 1, а значение «основа при изгибе» принимается равным 0.

Вот пример w3school, который управляет макетом контейнера, помещая flex: 50% и flex: 100% в дочерние столбцы после воздействия на запрос мультимедиа.

Очевидно , что это 100% не для flex-growing , это используется как flex-basis . Но как это возможно? Если существует одно значение, его следует принимать за flex-grow .

Я что-то здесь упускаю? Это % из-за того, что причины должны учитываться flex-basis ?

Комментарии:

1. Поскольку 100%- это не число , это процент, поэтому он игнорируется для гибкого роста и гибкого сжатия.

2. 100% — это не число, поэтому это правило не будет применяться

3. @Paulie_D Спасибо, я должен был догадаться об этом. Является ли это общим правилом для других синтаксисов ярлыков ? Если первый из них не удовлетворяет условию, он будет проверен на наличие следующих…?

Ответ №1:

Если вы обратитесь к спецификации, которую вы можете прочитать:

Ценность: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]

Средства || :

Двойная полоса ( || ) разделяет два или более варианта: один или несколько из них должны встречаться в любом порядке.

Если вы укажете значение percetange, это явно не <'flex-grow'> <'flex-shrink'>? так <'flex-basis'>

Если вы укажете номер, то этого не может быть <'flex-basis'> , потому что он не принимает number , поэтому он будет <'flex-grow'> <'flex-shrink'>? и ? означает:

Знак вопроса ( ? ) указывает, что предыдущий тип, слово или группа являются необязательными (встречается ноль или один раз).

Так что это <'flex-grow'>


Вот еще несколько комбинаций:

 flex: 1 1 --> <'flex-grow'> <'flex-shrink'>

flex: 1 50% 
  1   -->  <'flex-grow'> <'flex-shrink'>? --> <'flex-grow'>
  50% --> <'flex-basis'>
 

Комментарии:

1. отличное объяснение, я ценю.

2. Кроме того, хотя мы привыкли видеть этот формат: flex: 1 1 50% согласно приведенному выше правилу , он также может быть выражен как flex: 50% 1 1 .

3. @MichaelBenjamin да, в связи с любым порядком ||