Jak wszyscy wiemy, flex
nieruchomość jest skrótem dla flex-grow
, flex-shrink
oraz flex-basis
właściwości. Jego domyślną wartością jest 0 1 auto
, co oznacza
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
ale zauważyłem, że w wielu miejscach flex: 1
jest używany. Czy to skrót od 1 1 auto
czy 1 0 auto
? Nie rozumiem, co to znaczy i nic nie dostaję, gdy wyszukuję w Google.
Odpowiedzi:
Oto wyjaśnienie:
https://www.w3.org/TR/css-flexbox-1/#flex-common
Dlatego
flex:1
jest równoważneflex: 1 1 0
źródło
flex
do wszystkich dzieci, liczy się właściwieflex: 1 ? 0;
, gdzie "?" może być cokolwiek, to nie ma znaczeniawhat does flex:1 mean?
jest jednak otwarte na interpretację. Operacja nie pyta o specyfikację, tylko o to, co się dzieje. Niestety Chrome jest obecnie najpopularniejszą przeglądarką i wymagana jest jej obsługa. Sam nie jestem fanem ani użytkownikiem Chrome!flex: 1
oznacza co następuje:źródło
flex: 1
oznacza1 1 0
... ale na IE jest1 1 0px
1 1 0
i1 1 0px
są równoważne. IE po prostu obsługuje tylko ten z jednostką.1 1 0px
i1 1 0
są równoważne?flex-basis
, zawartość jest ignorowana, a rozmiar elementu jest oparty na jegoflex-grow
/flex-shrink
.BĄDŹ OSTROŻNY
W niektórych przeglądarkach:
flex:1;
nie równa sięflex:1 1 0;
flex:1;
=flex:1 1 0n;
(gdzie n jest jednostką długości).Kluczową kwestią w tym przypadku jest to, że podstawa elastyczna wymaga jednostki długości .
Na przykład w Chrome
flex:1
iflex:1 1 0
daje różne wyniki. W większości przypadków może się wydawać, żeflex:1 1 0;
działa, ale przyjrzyjmy się, co naprawdę się dzieje:PRZYKŁAD
Podstawa Flex jest ignorowana i stosowane są tylko flex-grow i flex-shrink.
flex:1 1 0;
=flex:1 1;
=flex:1;
Na pierwszy rzut oka może się to wydawać poprawne, jednak jeśli zastosowana jednostka pojemnika jest zagnieżdżona; oczekuj nieoczekiwanego!
Wypróbuj ten przykład w CHROME
ZGODNOŚĆ
Należy zauważyć, że to się nie udaje, ponieważ niektóre przeglądarki nie są zgodne ze specyfikacją .
Przeglądarki korzystające z pełnej specyfikacji Flex:
UPDATE 2019
Wydaje się, że najnowsze wersje Chrome w końcu rozwiązały ten problem, ale inne przeglądarki nadal nie.
Przetestowane i działa w Chrome Ver 74.
źródło
flex: 1
to to samoflex: 1 1 0
. W twoim przykładzie, jeśli usuniesz.Wrap
klasę w.Flex110x,.Flex1, .Flex110, .Wrap
regule, działa zgodnie z oczekiwaniami.flex:1 1 0n;