Różnica między display: inline-flex I display: flex

Mam trudności ze zrozumieniem właściwości display:inline-flex;. Jaka jest różnica między display:inline-flex; a display:flex;?

Próbuję wyrównać pionowo niektóre elementy wewnątrz opakowania ID. Dlatego podałem właściwość display:inline-flex; do tego ID; ponieważ owijarka ID jest kontenerem flex.

Ale nie ma różnicy w prezentacji. Spodziewałem się, że wszystko w ID opakowania zostanie wyświetlone inline.

#wrapper {
    display: inline-flex;
    /*no difference to display:flex; */
}
<body>
    <div id="wrapper">
        <header>header</header>
        <nav>nav</nav>
        <aside>aside</aside>
        <main>main</main>
        <footer>footer</footer>
    </div>
</body>

JSFiddle Przykład

Jaka jest różnica?

Author: TylerH, 2014-12-11

6 answers

display: inline-flex nie powoduje wyświetlania elementów flex {[10] } w linii. Sprawia, że flex container wyświetla inline. Jest to jedyna różnica pomiędzy display: inline-flex i display: flex. Podobne porównanie można dokonać między display: inline-block i display: block, A praktycznie każdym innym typem wyświetlacza, który ma wbudowany odpowiednik.1

Nie ma absolutnie żadnej różnicy w wpływie na elementy flex; układ flex jest identyczny, niezależnie od tego, czy kontener flex jest na poziomie bloku, czy na poziomie linii. W w szczególności, same elementy flex zawsze zachowują się jak pudełka na poziomie bloków (chociaż mają niektóre właściwości bloków wbudowanych). Nie można wyświetlać elementów flex w wierszu; w przeciwnym razie nie ma układu flex.

Nie jest jasne, co dokładnie rozumiesz przez "wyrównanie pionowe" lub dlaczego dokładnie chcesz wyświetlać zawartość w linii, ale podejrzewam, że flexbox nie jest odpowiednim narzędziem do tego, co próbujesz osiągnąć. Są szanse, że to, czego szukasz, jest po prostu zwykły stary układ inline (display: inline i/lub display: inline-block), dla którego flexbox jest, a nie zamiennikiem; flexbox jest , a nie uniwersalnym rozwiązaniem układu, które wszyscy twierdzą, że jest (stwierdzam to, ponieważ błędne przekonanie jest prawdopodobnie powodem, dla którego rozważasz flexbox w pierwszej kolejności).


1różnice między układem bloków a układem liniowym wykraczają poza zakres tego pytania, ale najbardziej wyróżnia się automatyczna szerokość: pola na poziomie bloków rozciągają się poziomo, aby wypełnić ich zawierający blok, podczas gdy Pudełka na poziomie liniowym kurczą się, aby pasowały do ich zawartości. W rzeczywistości tylko z tego powodu prawie nigdy nie będziesz używać display: inline-flex, chyba że masz bardzo dobry powód, aby wyświetlić swój kontener flex inline.

 257
Author: BoltClock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 15:23:38

flex i inline-flex stosują układ flex do potomków kontenera. Kontener z display:flex zachowuje się jak element blokowy, podczas gdy display:inline-flex sprawia, że kontener zachowuje się jak element wbudowany.

 41
Author: Leo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-13 13:17:31

Różnica między "flex " i"inline-flex"

Krótka odpowiedź:

Jeden jest inline, a drugi w zasadzie odpowiada jak element blokowy (ale ma pewne własne różnice).

Dłuższa odpowiedź:

Inline-Flex-wbudowana wersja flex pozwala elementowi i jego potomkom na posiadanie właściwości flex, pozostając w regularnym przepływie dokumentu / strony internetowej. Zasadniczo można umieścić dwa wbudowane kontenery flex w ten sam rząd, 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 "inline-block."

Flex-kontener i jego dzieci mają właściwości flex, ale kontener rezerwuje wiersz, ponieważ jest wyjęty z normalnego przepływu dokumentu. Reaguje jak element blokowy, jeśli chodzi o przepływ dokumentów. Dwa kontenery flexbox nie mogłyby istnieć w tym samym rzędzie bez nadmiernej stylizacji.

Problemem może być mając

Ze względu na elementy wymienione w twoim przykładzie, choć zgaduję, myślę, że chcesz użyć flex, aby wyświetlić elementy wymienione w sposób równomierny wiersz po wierszu, ale nadal zobaczyć elementy obok siebie.

Prawdopodobnie występują problemy, ponieważ flex i inline-flex mają domyślną właściwość " Flex-direction "ustawioną na" row."To wyświetli dzieci obok siebie. Zmiana tej właściwości na "column" pozwoli Twoim elementom na układanie i rezerwowanie spacja (szerokość) równa szerokości jego rodzica.

Poniżej kilka przykładów, aby pokazać, jak działa flex vs inline-flex, a także szybkie demo, jak działają elementy inline vs block...

display: inline-flex; flex-direction: row;

Fiddle

display: flex; flex-direction: row;

Fiddle

display: inline-flex; flex-direction: column;

Fiddle

display: flex; flex-direction: column;

Fiddle

display: inline;

Fiddle

display: block

Fiddle

Również, wielki dokument odniesienia: kompletny przewodnik po Flexbox-css triki

 24
Author: Aaron Loften,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-10 09:08:13

OK, wiem, że na początku może być trochę mylące, ale {[2] } mówi o elemencie nadrzędnym, więc kiedy mówimy: display: flex;, chodzi o element, a kiedy mówimy display:inline-flex;, robi również sam element inline...

It ' s like make a div inline lub block, Uruchom poniższy fragment i zobacz, jak display flex rozkłada się do następnej linii:

.inline-flex {
  display: inline-flex;
}

.flex {
  display: flex;
}

p {
  color: red;
}
<body>
  <p>Display Inline Flex</p>
  <div class="inline-flex">
    <header>header</header>
    <nav>nav</nav>
    <aside>aside</aside>
    <main>main</main>
    <footer>footer</footer>
  </div>

  <div class="inline-flex">
    <header>header</header>
    <nav>nav</nav>
    <aside>aside</aside>
    <main>main</main>
    <footer>footer</footer>
  </div>

  <p>Display Flex</p>
  <div class="flex">
    <header>header</header>
    <nav>nav</nav>
    <aside>aside</aside>
    <main>main</main>
    <footer>footer</footer>
  </div>

  <div class="flex">
    <header>header</header>
    <nav>nav</nav>
    <aside>aside</aside>
    <main>main</main>
    <footer>footer</footer>
  </div>
</body>

Również szybko utworzyć obrazek poniżej, aby pokazać różnicę w rzut oka:

wyświetlacz flex vs wyświetlacz inline-flex

 19
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-21 15:21:01

Display: flex Zastosuj układ flex tylko do elementów flex lub dzieci kontenera. Tak więc sam kontener pozostaje elementem blokowym, a tym samym zajmuje całą szerokość ekranu.

Powoduje to, że każdy kontener flex przenosi się do nowej linii na ekranie.

Display: inline-flex Zastosuj układ flex do elementów flex lub dzieci, a także do samego kontenera. W rezultacie kontener zachowuje się jak element flex inline, podobnie jak dzieci i tym samym zajmuje szerokość wymaganą tylko przez jego elementy / dzieci, a nie całą szerokość ekranu.

Powoduje to, że dwa lub więcej kontenerów flex jeden po drugim, wyświetlanych jako inline-flex, wyrównują się obok siebie na ekranie, aż do uzyskania całej szerokości ekranu.

 12
Author: Noor Jahan Mukammel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-10 15:43:13

Potrzebujesz trochę więcej informacji, aby przeglądarka wiedziała, czego chcesz. Na przykład dzieci kontenera muszą być poinformowane " jak " zginać.

Updated Fiddle

Dodałem #wrapper > * { flex: 1; margin: auto; } do twojego CSS i zmieniłem inline-flex na flex, i możesz zobaczyć, jak elementy rozmieszczone są teraz równomiernie na stronie.

 1
Author: FiSH GRAPHICS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 18:22:03