display: inline-flex
nie powoduje wyświetlania elementów elastycznych w linii. To sprawia, że elastyczny pojemnik wyświetla się w linii. To jedyna różnica między display: inline-flex
i display: flex
. Podobnego porównania można dokonać pomiędzy display: inline-block
i display: block
, i prawie każdym innym typem wyświetlacza, który ma wbudowany odpowiednik . 1
Nie ma absolutnie żadnej różnicy w wpływie na przedmioty elastyczne; układ flex jest identyczny bez względu na to, czy kontener flex ma poziom blokowy czy wbudowany. W szczególności same elementy flex zawsze zachowują się jak pola na poziomie bloku (chociaż mają pewne właściwości bloków wbudowanych). Nie można wyświetlać elementów elastycznych w linii; w przeciwnym razie nie masz układu elastycznego.
Nie jest jasne, co dokładnie rozumiesz przez „wyrównanie w pionie” lub dlaczego dokładnie chcesz wyświetlać zawartość w linii, ale podejrzewam, że Flexbox nie jest odpowiednim narzędziem do wszystkiego, co próbujesz osiągnąć. Szanse są tym, czego szukasz, to po prostu stary, wbudowany układ ( display: inline
i / lub display: inline-block
), dla którego Flexbox nie jest zamiennikiem; Flexbox nie jest uniwersalnym rozwiązaniem układowym , jak twierdzą wszyscy (twierdzę to, ponieważ błędne przekonanie jest prawdopodobnie powodem, dla którego rozważasz Flexbox).
1 Różnice między układem bloku a układem wbudowanym są poza zakresem tego pytania, ale najbardziej wyróżnia się automatyczna szerokość: pola na poziomie bloku rozciągają się w poziomie, aby wypełnić swój zawierający blok, podczas gdy pola na poziomie kurczą się, aby dopasować do ich zawartość. W rzeczywistości tylko z tego powodu prawie nigdy display: inline-flex
nie będziesz używać, chyba że masz bardzo dobry powód, aby wyświetlać swój elastyczny pojemnik w linii.
inline-flex
iflex
: jsfiddle.net/mgr0en3q/1 Oryginalne skrzypce autorstwa @ fish-graphic i @astridxOK, wiem, że na początku może być trochę mylące, ale
display
mówi o elemencie nadrzędnym, więc oznacza to, że kiedy mówimy:display: flex;
chodzi o element, a kiedy mówimydisplay:inline-flex;
, również sam elementinline
...To jest jak
div
wstawienie wiersza lub bloku , uruchom fragment kodu poniżej, a zobaczysz, jakdisplay flex
rozkłada się do następnego wiersza:Również szybko utwórz obraz poniżej, aby pokazać różnicę na pierwszy rzut oka:
źródło
flex
iinline-flex
oba stosują układ elastyczny do elementów podrzędnych kontenera. Kontener zdisplay:flex
zachowuje się jak sam element na poziomie bloku, a jednocześniedisplay:inline-flex
sprawia, że zachowuje się jak element wbudowany.źródło
Różnica między „flex” a „inline-flex”
Krótka odpowiedź:
Jeden jest wbudowany, a drugi w zasadzie reaguje jak element blokowy (ale ma pewne własne różnice).
Dłuższa odpowiedź:
Inline-Flex - wbudowana wersja flex pozwala elementowi i jego dzieciom na posiadanie właściwości flexu, pozostając jednocześnie w regularnym przepływie dokumentu / strony internetowej. Zasadniczo można umieścić dwa wbudowane elastyczne kontenery w tym samym rzędzie, jeśli szerokości były wystarczająco małe, bez nadmiaru stylizacji, aby mogły istnieć w tym samym rzędzie. Jest to dość podobne do „bloku wbudowanego”.
Flex - kontener i jego elementy podrzędne mają właściwości flex, ale kontener rezerwuje wiersz, ponieważ jest on wyjęty z normalnego przepływu dokumentu. Pod względem przepływu dokumentów reaguje jak element blokowy. Dwa kontenery Flexbox nie mogłyby istnieć w tym samym rzędzie bez nadmiernej stylizacji.
Problem, który możesz mieć
Z powodu elementów wymienionych w twoim przykładzie, choć zgaduję, myślę, że chcesz użyć flex, aby wyświetlić elementy wymienione w sposób równomierny rząd po rzędzie, ale nadal widzieć elementy obok siebie.
Prawdopodobnie występują problemy, ponieważ flex i inline-flex mają domyślną właściwość „flex-direction” ustawioną na „row”. Spowoduje to wyświetlenie dzieci obok siebie. Zmiana tej właściwości na „kolumna” pozwoli na układanie elementów w stos i rezerwowanie miejsca (szerokości) równego szerokości jego elementu nadrzędnego.
Poniżej znajduje się kilka przykładów pokazujących, jak działają flex vs inline-flex, a także krótka prezentacja tego, jak działają elementy inline vs block ...
Skrzypce
Skrzypce
Skrzypce
Skrzypce
Skrzypce
Skrzypce
Również świetny dokument referencyjny: Kompletny przewodnik po Flexbox - sztuczki css
źródło
Wyświetlanie: Flex stosuje układ Flex tylko do elementów Flex lub elementów podrzędnych kontenera. Tak więc sam pojemnik pozostaje elementem poziomu bloku, a zatem zajmuje całą szerokość ekranu.
Powoduje to, że każdy elastyczny pojemnik przechodzi do nowej linii na ekranie.
Wyświetlanie: inline-flex stosuje układ flex do elementów flex lub dzieci, a także do samego pojemnika. W wyniku tego pojemnik zachowuje się jak element elastyczny w linii, tak jak robią to dzieci, a zatem zajmuje szerokość wymaganą tylko przez jego elementy / dzieci, a nie całą szerokość ekranu.
Powoduje to, że dwa lub więcej pojemników elastycznych jeden po drugim, wyświetlanych jako inline-flex, ustawiają się obok siebie na ekranie, aż zostanie zajęta cała szerokość ekranu.
źródło
Potrzebujesz nieco więcej informacji, aby przeglądarka wiedziała, czego chcesz. Na przykład dzieciom kontenera należy powiedzieć „jak” zginać.
Zaktualizowano skrzypce
Dodałem
#wrapper > * { flex: 1; margin: auto; }
do twojego CSS i zmieniłeminline-flex
naflex
, i możesz zobaczyć, jak elementy rozmieszczają się teraz równomiernie na stronie.źródło
Otwórz na całej stronie dla lepszego zrozumienia
źródło