V tomto článku se podíváme na 5 technik, které řeší hlavní problémy s rozložením CSS. Zahrnuli jsme také několik praktických příkladů ze skutečných projektů, které názorně ukazují, jak lze tyto techniky použít.
Vytváření sloupů se stejnou výškou
Na první pohled to může vypadat docela jednoduše, ale tento úkol může být občas otravný. Použití min-height nebude fungovat, protože jakmile se objeví nějaký obsah, velikost sloupců se okamžitě začne měnit.
Oprava tohoto problému pomocí flexboxu také není řešením, protože sloupce vytvořené pomocí flexbox CSS budou mít zpočátku stejnou délku. Potřebujeme pouze zavést „flexibilní“ model a poté se ujistit, že vlastnosti flex-direction a align-items jsou nastaveny správně.
Přeskupení prvků
Kdysi v minulosti byla dynamická změna pořadí určitých prvků úkolem, který uměl pouze JavaScript. S příchodem flexboxu však tento problém již nevzniká, protože řešení spočívá pouze v jedné vlastnosti CSS.
Vlastnost objednávky, která umožňuje použití rozložení flexboxu, mluví sama za sebe. Umožňuje nám měnit libovolný počet „flexibilních“ prvků a jejich pořadí. Jediným parametrem této vlastnosti je celé číslo, které určuje pozici tohoto prvku, čím větší číslo, tím vyšší priorita tohoto prvku.
Vlastnost objednávky má mnoho využití. Pokud chcete některé z nich vidět, můžete se podívat na tento, kde pomocí této techniky vytváříme responzivní sekci komentářů.
![](https://i1.wp.com/falbar.ru/storage/images/2018/09/perestanovka-elementov-flexbox.jpg)
Horizontální a vertikální centrování
Zarovnání v CSS je stále dost velký problém. I když se obrátíte na vyhledávač, vrátí hromadu řešení, z nichž většina navrhne použití tabulek a transformací, což není úplně vhodné, pokud mluvíme o adaptivním rozložení.
Jednoduchým řešením by bylo rozvržení flexboxu, pomocí kterého lze prvky jednoduše posouvat podél souřadnicové roviny a zarovnávat je podle libosti.
Chcete-li vidět toto řešení v akci a dozvědět se o něm více, můžete přejít na stránku , která je ve stejném tématu.
![](https://i1.wp.com/falbar.ru/storage/images/2018/09/gorizontalnoe-i-vertikalnoe-tsentrirovanie.jpg)
Vytváření plně responzivních mřížek
Mnoho webmasterů se při vytváření responzivních mřížek spoléhá na různé CSS knihovny a frameworky. Nejběžnějším nástrojem v této oblasti je Bootstrap. Není však jediný svého druhu. Podobných pomocníků už byly vyvinuty stovky. Všechny fungují relativně dobře a mohou se pochlubit působivou nabídkou možností, ale nikdy se nezbaví jednoho problému - těžkopádnosti. Pokud jste tedy člověk, který rád dělá všechno sám, nebo prostě nechcete instalovat celý framework kvůli mřížce, pak vám rozložení flexboxu pomůže!
Řada v mřížce flexboxu je pouze kontejner. Vodorovných sloupců uvnitř může být libovolný počet prvků, jejichž velikost se nastavuje pomocí flex . Tento model se přizpůsobí jakékoli velikosti obrazovky, takže konečný výsledek by měl vypadat dobře na většině zařízení. Pokud se však rozhodneme, že na obrazovce není dostatek horizontálního prostoru, lze rozložení jednoduše převést na vertikální pomocí mediálního dotazu.
O variabilitě této techniky se můžete přesvědčit v návodu: Nejjednodušší způsob tvoření.
![](https://i2.wp.com/falbar.ru/storage/images/2018/09/sozdanie-polnostyu-adaptivnyh-setok.jpg)
Vytvoření pevného zápatí
Flexbox CSS má i na tento problém jednoduché řešení. Vytvořením stránky, která obsahuje nalepovací zápatí, napsané pomocí prvků flex, již nebude třeba přemýšlet o tom, že by se mohla posunout.
Použití display: flex na značku body nám umožní používat "flex mode" v celém rozvržení. Když je vše připraveno, hlavní částí stránky bude jeden „flexibilní“ prvek a zápatí druhým, což zjednoduší manipulaci s jejich pozicemi.
html( výška: 100%; ) body( display: flex; flex-direction: column; height: 100%; ) .main( /* Hlavní sekce vyplní vše, co je k dispozici volné místo na stránce, která není obsazena zápatím */ flex: 1 0 auto; ) zápatí( /* Zápatí přidělí přesně tolik místa, kolik potřebuje, a ani o pixel více */ flex: 0 0 auto; )
Více informací o této technice najdete v článku "".
![](https://i2.wp.com/falbar.ru/storage/images/2018/09/sozdanie-zafiksirovannogo-podvala-flexbox.jpg)
Závěr
Většina prohlížečů dnes podporuje flexibilní režim rozvržení, což znamená, že lze s jistotou říci, že flexbox je připraven pomoci mnoha vývojářům.
Doufám, že vám tento článek pomohl a zlepšil jste své znalosti CSS. Hodně štěstí!
CSS flexbox (Flexibilní modul rozvržení krabic)- modul flexibilního uspořádání kontejneru - je způsob uspořádání prvků, založený na myšlence osy.
Flexbox se skládá z flexibilní nádoba A flexibilní položky. Flexibilní prvky mohou být uspořádány do řady nebo sloupců a zbývající volný prostor je mezi nimi rozdělen různými způsoby.
Modul flexbox umožňuje řešit následující úlohy:
- Uspořádejte prvky v jednom ze čtyř směrů: zleva doprava, zprava doleva, shora dolů nebo zdola nahoru.
- Přepsat pořadí zobrazení prvků.
- Automaticky upravte velikost prvků tak, aby se vešly do dostupného prostoru.
- Vyřešte problém s horizontálním a vertikálním centrováním.
- Přesuňte položky do kontejneru, aniž byste jej přeplnili.
- Vytvořte sloupce stejné výšky.
- Vytvořit stisknuté ve spodní části stránky.
Flexbox řeší specifické problémy – vytváření jednorozměrných rozvržení, například navigační lišty, protože prvky Flex lze umístit pouze podél jedné z os.
Seznam aktuálních problémů s moduly a jejich řešení napříč prohlížeči si můžete přečíst v článku Philipa Waltona.
Co je flexbox
Podpora prohlížeče
TJ: 11,0, 10,0 -ms-
Firefox: 28,0, 18,0 -moz-
Chrome: 29,0, 21,0 -webkit-
Safari: 6.1 -webkit-
Opera: 12.1 -webkit-
iOS Safari: 7.0 -webkit-
Opera Mini: 8
Prohlížeč Android: 4.4, 4.1 -webkit-
Chrome pro Android: 44
1. Základní pojmy
![](https://i2.wp.com/html5book.ru/wp-content/uploads/2015/06/box-model.png)
Pro popis modulu Flexbox se používá specifická sada termínů. Hodnota flex-flow a režim záznamu určují shodu těchto termínů s fyzickými směry: nahoře / vpravo / dole / vlevo, osy: vertikální / horizontální a rozměry: šířka / výška.
Hlavní osa— osa, podél které jsou rozmístěny ohebné prvky. Zasahuje do hlavní dimenze.
Hlavní začátek a hlavní konec— čáry, které definují počáteční a koncovou stranu ohebného kontejneru, vzhledem k nimž jsou rozmístěny ohebné prvky (začínající od hlavního začátku směrem k hlavnímu konci).
Hlavní velikost) - šířka nebo výška flex kontejneru nebo flex položek, v závislosti na tom, který z nich je v hlavním rozměru, určuje hlavní velikost flex kontejneru nebo flex položky.
Křížová osa- osa kolmá k hlavní ose. Rozkládá se v příčném rozměru.
Křížový začátek a konec— čáry, které definují počáteční a koncovou stranu příčné osy, vzhledem k níž jsou rozmístěny ohebné prvky.
Velikost kříže— šířka nebo výška ohebného kontejneru nebo ohebných předmětů, podle toho, co je v příčném rozměru, je jejich příčný rozměr.
![](https://i2.wp.com/html5book.ru/wp-content/uploads/2019/02/flexbox-mode.jpg)
2. Flex nádoba
Kontejner Flex nastavuje pro svůj obsah nový flexibilní kontext formátování. Flex kontejner není blokový kontejner, takže vlastnosti CSS jako float , clear , vertical-align u podřízených prvků nefungují. Flex kontejner také není ovlivněn vlastnostmi column-*, které vytvářejí sloupce v textu, a pseudo-elementy::first-line a::first-letter .
Model rozvržení flexboxu je spojen s určitou hodnotu CSS zobrazují vlastnosti nadřazeného prvku HTML obsahujícího podřízené bloky. Chcete-li ovládat prvky pomocí tohoto modelu, musíte nastavit vlastnost zobrazení následovně:
Flex-container ( /*vygeneruje flexibilní kontejner na úrovni bloku*/ display: -webkit-flex; display: flex; ) .flex-container ( /*vygeneruje flexibilní kontejner na úrovni řádku*/ display: -webkit-inline- flex; displej: inline-flex; )
Po nastavení těchto hodnot vlastností se každý podřízený prvek automaticky stane ohebným prvkem seřazeným v jedné řadě (podél hlavní osy). V tomto případě se blokové a vložené podřízené prvky chovají stejně, tzn. Šířka bloků se rovná šířce jejich obsahu, přičemž se berou v úvahu vnitřní okraje a okraje prvku.
![](https://i1.wp.com/html5book.ru/wp-content/uploads/2015/06/display-flex.png)
Pokud nadřazený blok obsahuje text nebo obrázky bez obalů, stanou se anonymními flexibilními položkami. Text je zarovnán k hornímu okraji bloku kontejneru a výška obrázku se rovná výšce bloku, tzn. je deformovaná.
3. Flex prvky
Položky Flex jsou bloky, které představují obsah kontejneru Flex v toku. Kontejner Flex vytváří nový kontext formátování pro svůj obsah, což způsobuje následující funkce:
- U flexibilních položek je jejich hodnota vlastnosti zobrazení uzamčena. Zobrazená hodnota: inline-block; a zobrazení: tabulka-buňka; vyhodnoceno na displeji: blok; .
- Bílé místo mezi položkami zmizí: nestane se vlastní flexibilní položkou, i když je mezipoložkový text zabalen do anonymní flexibilní položky. Obsah anonymní flexibilní položky nelze upravovat, ale zdědí styly (jako jsou možnosti písma) z kontejneru Flex.
- Absolutně umístěný ohebný prvek se nepodílí na rozvržení ohebného rozvržení.
- Okraje sousedních ohebných prvků se nezbortí.
- Hodnoty procentuálního okraje a odsazení se počítají z vnitřní velikosti bloku, který je obsahuje.
- okraj: auto; expandovat a absorbovat další prostor v odpovídající dimenzi. Lze je použít k vyrovnání nebo zatlačení sousedních ohebných předmětů.
- Auto minimální velikost flex položky výchozí na minimální velikost jejich obsahu, tj. min-šířka: auto; . U rolovatelných kontejnerů je automatická minimální velikost obvykle nula.
4. Pořadí a orientace zobrazení položky Flex
Obsah ohebného kontejneru lze rozložit v libovolném směru a v libovolném pořadí (přeuspořádání ohebných předmětů v kontejneru ovlivní pouze vizuální vykreslení).
4.1. Směr hlavní osy: flex-direction
Vlastnost se vztahuje na flex kontejner. Řídí směr hlavní osy, podél které jsou položeny ohebné předměty, v souladu s současný režim evidence. Neděděno.
flex-direction | |
---|---|
Hodnoty: | |
řádek | Výchozí hodnota je zleva doprava (v rtl, zprava doleva). Flex prvky jsou uspořádány v řadě. Začátek (main-start) a konec (main-end) směru hlavní osy odpovídají začátku (inline-start) a konci (inline-end) osy čáry (inline-axis). |
řádek-zpět | Směr je zprava doleva (v rtl zleva doprava). Flex prvky jsou rozmístěny v linii vzhledem k pravému okraji kontejneru (v rtl - vlevo). |
sloupec | Směr shora dolů. Flex prvky jsou rozmístěny ve sloupci. |
sloupec-reverzní | Sloupec s prvky v opačném pořadí, zdola nahoru. |
počáteční | |
zdědit |
![](https://i1.wp.com/html5book.ru/wp-content/uploads/2015/06/flex-direction.png)
Syntax
Flex-kontejner ( displej: -webkit-flex; -webkit-flex-direction: řádek-reverzní; displej: flex; flex-direction: řádek-reverzní; )
4.2. Správa víceřádkového flex kontejneru: flex-wrap
Vlastnost určuje, zda bude ohebný kontejner jednořádkový nebo víceřádkový, a také nastaví směr příčné osy, která určuje směr, ve kterém budou položeny nové řádky ohebného kontejneru.
Ve výchozím nastavení jsou flexibilní položky naskládány na jeden řádek podél hlavní osy. Pokud přetečou, budou přesahovat ohraničující rámeček ohebného kontejneru. Nemovitost se nedědí.
![](https://i0.wp.com/html5book.ru/wp-content/uploads/2015/06/flex-wrap.png)
Syntax
Flex-kontejner ( displej: -webkit-flex; -webkit-flex-wrap: wrap; display: flex; flex-wrap: wrap; )
4.3. Krátké shrnutí směru a víceřádků: flex-flow
Tato vlastnost vám umožňuje definovat směry hlavní a příčné osy a také možnost přesunout ohebné prvky v případě potřeby na několik čar. Toto je zkratka pro vlastnosti flex-direction a flex-wrap. Výchozí hodnota flex-flow: row nowrap; . nemovitost se nedědí.
Syntax
Flex-container ( displej: -webkit-flex; -webkit-flex-flow: řádkové balení; displej: flex; flex-flow: řádkové balení; )
4.4. Zobrazit pořadí flexibilních položek: objednávka
Tato vlastnost definuje pořadí, ve kterém jsou položky Flex zobrazeny a uspořádány v kontejneru Flex. Platí pro flex položky. Nemovitost se nedědí.
Zpočátku mají všechny položky flex pořadí: 0; . Když pro prvek zadáte hodnotu -1, přesune se na začátek časové osy a hodnota 1 se přesune na konec. Pokud má více položek flex stejnou hodnotu objednávky, budou vykresleny podle původní objednávky.
Syntax
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-order: 1; order: 1; ) Rýže. 6. Zobrazení pořadí flexibilních položek
5. Pružnost pružných prvků
Definujícím aspektem ohebného rozvržení je schopnost „ohýbat“ položky, měnit jejich šířku/výšku (v závislosti na velikosti na hlavní ose), aby se vyplnil dostupný prostor v hlavním rozměru. To se provádí pomocí vlastnosti flex. Ohebný kontejner rozděluje volný prostor mezi své děti (úměrně jejich poměru ohybu a růstu), aby naplnil kontejner, nebo je zmenšil (úměrně jejich poměru ohybu a smrštění), aby se zabránilo přetečení.
Pružný prvek bude zcela „neflexibilní“, pokud jeho hodnoty flex-grow a flex-shrink budou nulové, a v opačném případě „flexibilní“.
5.1. Nastavení flexibilních rozměrů s jednou vlastností: flex
Tato vlastnost je zkratkou pro vlastnosti flex-grow, flex-shrink a flex-base. Výchozí hodnota: flex: 0 1 auto; . Můžete zadat jednu nebo všechny tři hodnoty vlastností. Nemovitost se nedědí.
Syntax
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-flex: 3 1 100px; -ms-flex: 3 1 100px; flex: 3 1 100px; )
5.2. Růstový faktor: flex-grow
Tato vlastnost určuje rychlost růstu jednoho ohebného prvku vzhledem k ostatním ohebným prvkům v ohebném kontejneru při distribuci pozitivní volný prostor. Pokud je součet hodnot flex-grow flex položek v řadě menší než 1, zabírají méně než 100 % volného místa. Nemovitost se nedědí.
![](https://i0.wp.com/html5book.ru/wp-content/uploads/2019/03/flex-grow-navbar.png)
Syntax
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-flex-grow: 3; flex-grow: 3; )
5.3. Kompresní poměr: flex-shrink
Tato vlastnost určuje kompresní poměr flexibilní položky vzhledem k ostatním flexibilním položkám při distribuci záporného volného prostoru. Vynásobeno velikostí základny flex. Záporný prostor je přidělen úměrně tomu, jak moc se může položka zmenšit, takže například malá ohebná položka se nezmenší na nulu, dokud nebude ohebná položka znatelně menší. větší velikost. Nemovitost se nedědí.
![](https://i0.wp.com/html5book.ru/wp-content/uploads/2015/06/flex-shrink.png)
Syntax
Flex-container ( displej: -webkit-flex; display: flex; ) .flex-item ( -webkit-flex-shrink: 3; flex-shrink: 3; )
5.4. Základní velikost: flex-base
Vlastnost nastaví počáteční základní velikost flexibilní položky před přidělením volného místa podle faktorů pružnosti. Pro všechny hodnoty kromě auto a content je základní velikost ohybu definována stejně jako šířka v režimech horizontálního psaní. Procentuální hodnoty jsou definovány vzhledem k velikosti flex kontejneru, a pokud není specifikována žádná velikost, hodnotou použitou pro flex-base jsou rozměry jeho obsahu. Neděděno.
Syntax
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-flex-basis: 100px; flex-basis: 100px; )
6. Zarovnání
6.1. Zarovnání hlavní osy: justify-content
Tato vlastnost zarovná ohebné položky podél hlavní osy ohebného kontejneru a rozdělí volný prostor neobsazený ohebnými předměty. Když je položka převedena na flexibilní kontejner, flexibilní položky jsou standardně seskupeny (pokud nemají nastavené okraje). Mezery se přičítají po výpočtu hodnot marže a flex-grow. Pokud některé prvky mají nenulový flex-grow nebo okraj: auto; , vlastnost nebude mít žádný vliv. Nemovitost se nedědí.
Hodnoty: | |
flex-start | Výchozí hodnota. Flex prvky jsou rozmístěny ve směru začínajícím od startovní čáry ohebného kontejneru. |
ohebný konec | Flex položky jsou rozloženy ve směru od koncové linie flexibilní nádoby. |
centrum | Flex položky jsou zarovnány do středu flexibilní nádoby. |
prostor-mezi | Flex prvky jsou rozmístěny rovnoměrně podél linie. První ohebná položka se umístí do jedné roviny s okrajem počáteční čáry, poslední ohebná položka se umístí do jedné roviny s okrajem koncové čáry a zbývající ohebné položky na čáře jsou rozmístěny tak, aby vzdálenost mezi libovolnými dvěma sousedními položkami byla stejný. Pokud je zbývající volné místo záporné nebo je na řádku pouze jedna flexibilní položka, je tato hodnota totožná s parametrem flexibilního startu. |
prostor kolem | Ohebné položky na lince jsou rozmístěny tak, že vzdálenost mezi jakýmikoli dvěma sousedními ohebnými položkami je stejná a vzdálenost mezi prvními/posledními ohebnými položkami a okraji ohebného kontejneru je polovina vzdálenosti mezi ohebnými položkami. |
počáteční | Nastaví hodnotu vlastnosti na výchozí hodnotu. |
zdědit | Zdědí hodnotu vlastnosti z nadřazeného prvku. |
![](https://i1.wp.com/html5book.ru/wp-content/uploads/2015/06/justify-content.png)
Syntax
Flex-container ( display: -webkit-flex; -webkit-justify-content: flex-start; display: flex; justify-content: flex-start; )
6.2. Zarovnání napříč osami: zarovnat položky a zarovnat-sebe
Flex položky lze zarovnat podél příčné osy aktuální řady flexibilní nádoby. align-items nastaví zarovnání pro všechny položky flex kontejneru, včetně anonymních flex položek. align-self umožňuje přepsat toto zarovnání pro jednotlivé flexibilní položky. Pokud je některý z příčných okrajů ohybového prvku nastaven na auto , zarovnání samo nemá žádný účinek.
6.2.1. Zarovnat položky
Tato vlastnost zarovná ohebné prvky, včetně anonymních ohebných prvků, podél příčné osy. Neděděno.
Hodnoty: | |
flex-start | |
ohebný konec | |
centrum | |
základní linie | Základní linie všech ohebných položek zapojených do zarovnání jsou stejné. |
protáhnout se | |
počáteční | Nastaví hodnotu vlastnosti na výchozí hodnotu. |
zdědit | Zdědí hodnotu vlastnosti z nadřazeného prvku. |
![](https://i1.wp.com/html5book.ru/wp-content/uploads/2015/06/align-items.png)
Syntax
Flex-container ( display: -webkit-flex; -webkit-align-items: flex-start; display: flex; align-items: flex-start; )
6.2.2. Zarovnat se
Tato vlastnost je zodpovědná za zarovnání jednoho ohebného prvku na výšku ohebného kontejneru. Přepíše zarovnání zadané pomocí align-items . Neděděno.
Hodnoty: | |
auto | Výchozí hodnota. Prvek flex používá zarovnání zadané ve vlastnosti align-items kontejneru flex. |
flex-start | Horní hrana ohebného prvku je umístěna vedle ohybové čáry (nebo ve vzdálenosti, s ohledem na specifikované okraje a okraje prvku) procházející začátkem příčné osy. |
ohebný konec | Spodní hrana ohebného prvku je umístěna vedle ohybové čáry (nebo ve vzdálenosti s ohledem na specifikované okraje a okraje prvku) procházející koncem příčné osy. |
centrum | Okraj ohebného prvku je vystředěn podél příčné osy v rámci ohybové linie. |
základní linie | Ohebný prvek je zarovnán k základní čáře. |
protáhnout se | Pokud je křížová velikost položky flex automatická a žádná z hodnot křížového okraje není automatická, položka se roztáhne. Výchozí hodnota. |
počáteční | Nastaví hodnotu vlastnosti na výchozí hodnotu. |
zdědit | Zdědí hodnotu vlastnosti z nadřazeného prvku. |
![](https://i1.wp.com/html5book.ru/wp-content/uploads/2015/06/align-self.png)
Syntax
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-align-self: center; align-self: center; )
6.3. Zarovnání čar flexibilního kontejneru: align-content
Tato vlastnost zarovná řádky ve flexibilním kontejneru, když je na příčné ose místo navíc, podobně jako zarovnání jednotlivých položek na hlavní ose pomocí vlastnosti justify-content. Tato vlastnost nemá vliv na jednořádkový flexibilní kontejner. Neděděno.
Hodnoty: | |
flex-start | Řady jsou naskládány směrem k začátku flex kontejneru. Okraj první linie je umístěn blízko okraje flex nádoby, každá následující linie je umístěna blízko předchozí linie. |
ohebný konec | Řady jsou stohovány směrem ke konci flexibilního kontejneru. Okraj posledního řádku je umístěn blízko okraje flex kontejneru, každý předchozí řádek je umístěn poblíž dalšího řádku. |
centrum | Řady jsou stohovány směrem ke středu flex kontejneru. Řady jsou blízko u sebe a jsou zarovnány ke středu ohebného kontejneru se stejnou vzdáleností mezi počátečním okrajem obsahu ohebného kontejneru a první řadou a mezi koncovým okrajem obsahu ohebného kontejneru a poslední řadou. |
prostor-mezi | Řady jsou rovnoměrně rozmístěny v flex kontejneru. Pokud je zbývající volné místo záporné nebo je v kontejneru flex pouze jedna čára flex, je tato hodnota totožná s hodnotou flex-start . V opačném případě je okraj prvního řádku umístěn blízko k počátečnímu okraji obsahu flexibilního kontejneru a okraj posledního řádku je umístěn blízko ke koncovému okraji obsahu flexibilního kontejneru. Zbývající čáry jsou rozmístěny tak, že vzdálenost mezi libovolnými dvěma sousedními čarami je stejná. |
prostor kolem | Čáry jsou rovnoměrně rozmístěny ve flex kontejneru s polovičním prostorem na obou koncích. Pokud je zbývající volné místo záporné, je tato hodnota shodná s hodnotou uprostřed. Jinak jsou čáry rozmístěny tak, že vzdálenost mezi libovolnými dvěma sousedními čarami je stejná a vzdálenost mezi prvními/posledními čarami a okraji obsahu ohebného kontejneru je poloviční než vzdálenost mezi čarami. |
protáhnout se | Výchozí hodnota. Řady pružných předmětů se rovnoměrně natahují, aby zaplnily veškerý dostupný prostor. Pokud je zbývající volné místo záporné, je tato hodnota totožná s flex-start . V opačném případě bude volný prostor rozdělen rovnoměrně mezi všechny řádky, čímž se zvětší jejich boční velikost. |
počáteční | Nastaví hodnotu vlastnosti na výchozí hodnotu. |
zdědit | Zdědí hodnotu vlastnosti z nadřazeného prvku. |
![](https://i0.wp.com/html5book.ru/wp-content/uploads/2015/06/align-content.png)
Syntax
Flex-container ( display: -webkit-flex; -webkit-flex-flow: row wrap; -webkit-align-content: flex-end; display: flex; flex-flow: row wrap; align-content: flex-end ; výška: 100px; )
Flexboxy jsou ideální pro vytváření běžně používaných rozvržení webových stránek, jako je třísloupcové rozvržení tzv. „Svatý grál“, kde všechny sloupce musí mít plnou výšku bez ohledu na jejich obsah. Zároveň v zdrojový kód hlavní obsah je před navigací a na samotné stránce je hlavní obsah po navigaci.
Takhle.
Před Flexboxem bylo tohoto rozložení docela obtížné dosáhnout bez použití některých hacků. Vývojáři často museli dělat věci, jako je přidat další označení, použít záporné okraje a další triky, aby zajistili, že vše bude správně zarovnáno bez ohledu na množství obsahu nebo velikost obrazovky. Jak ale ukazuje výše uvedený příklad, na Flexboxu je vše mnohem jednodušší.
Zde je shrnutí kódu. V tomto příkladu uděláme z prvku #main flexibilní kontejner a záhlaví a zápatí ponecháme jako prvky bloku. Jinými slovy, pouze střední část se stane flexboxem. Zde je úryvek, který z něj dělá flexibilní kontejner.
#hlavní ( displej: flex; min-výška: calc(100vh - 40vh); )
Stačí použít display: flex k vytvoření flex nádoby. Všimněte si, že jsme také nastavili minimální výšku pomocí funkce calc() a nastavili #main na 100 % výšky výřezu mínus výška hlavičky a základny (každý 20vh). Tím je zajištěno, že rozložení vyplní celou výšku obrazovky, i když je obsahu málo. Díky tomu se zápatí nikdy nezvedne a nezůstane pod ním prázdné místo, pokud obsah zabere méně než výšku obrazovky.
Výpočet minimální výšky byl poměrně jednoduchý, vzhledem k tomu, že jsme na všechny prvky aplikovali velikost boxu: border-box. Pokud bychom to neudělali, museli bychom k součtu přidat hodnotu výplně, kterou bychom odečetli.
Po instalaci flex kontejneru se zabýváme flex prvky.
#hlavní > článek ( flex: 1; ) #main > nav, #main > aside ( flex: 0 0 20vw; background: beige; ) #main > nav ( order: -1; )
Flex vlastnost je zkratka pro vlastnosti flex-grow, flex-shrink a flex-base. V prvním případě jsme napsali pouze jednu hodnotu, takže flex nastavuje vlastnost flex-grow. Ve druhém případě jsme zapsali všechny tři hodnoty pro
Vlastnost align-content určuje typ zarovnání čar uvnitř ohebného kontejneru podél příčné osy, pokud je k dispozici volné místo.
Platí pro: flex nádoba.
Výchozí hodnota: protáhnout se.
Flex-start Čáry jsou umístěny na začátku příčné osy. Každý další řádek je zarovnán s předchozím. ohebný konec Řádky jsou umístěny počínaje koncem příčné osy. Každý předchozí řádek je zarovnán s následujícím. střed Čáry jsou umístěny ve středu kontejneru. mezera-mezi Čáry jsou v nádobě rozmístěny rovnoměrně a vzdálenost mezi nimi je stejná. space-around Čáry jsou rozmístěny rovnoměrně, takže mezera mezi dvěma sousedními řádky je stejná. Prázdné místo před prvním řádkem a za posledním řádkem se rovná polovině místa mezi dvěma sousedními řádky. space-evenly Řádky jsou rozmístěny rovnoměrně. Bílé místo před prvním řádkem a za posledním řádkem má stejnou šířku jako ostatní řádky. natáhnout Čáry jsou nataženy rovnoměrně, aby zaplnily dostupný prostor.
Vlastnost align-content zarovná čáry flex kontejneru v flex kontejneru, když je v křížové ose navíc prostor, podobně jako justify-content zarovnává jednotlivé položky v rámci hlavní osy. Všimněte si, že tato vlastnost nemá žádný vliv na jednořádkový flexibilní kontejner. Hodnoty mají následující význam:
Poznámka: Pouze víceřádkové ohebné kontejnery mají vždy volný prostor v příčné ose pro zarovnání vlasců, protože u jednořádkového ohebného zásobníku se jediný vlasec automaticky natáhne, aby vyplnil prostor.
Platí pro:flex nádoby.
Počáteční: protáhnout se.
Linky Flex-start jsou baleny směrem k začátku flex kontejneru. Příčná počáteční hrana prvního řádku v ohebném kontejneru je umístěna v jedné rovině s příčným počátečním okrajem ohebného kontejneru a každá následující řádka je umístěna v jedné rovině s předchozí čarou. flex-end Linky jsou baleny směrem ke konci flex kontejneru. Hrana křížového konce posledního řádku je umístěna v jedné rovině s hranou křížového konce ohebné nádoby a každá předchozí čára je umístěna v jedné rovině s následující linií. středové čáry jsou baleny směrem ke středu ohebného kontejneru. Čáry v ohebné nádobě jsou umístěny v jedné rovině jedna s druhou a zarovnány ve středu ohebné nádobky se stejným prostorem mezi příčným počátečním okrajem ohebné nádoby a první linií ve flexibilní nádobě a mezi křížový konec obsahu okraje flexibilní nádoby a poslední řádek ve flexibilní nádobě. (Pokud je zbývající volný prostor záporný, čáry přetečou rovnoměrně v obou směrech.) mezera mezi Řádky jsou rovnoměrně rozmístěny ve flexibilním kontejneru. Pokud je zbývající volné místo záporné, je tato hodnota totožná s flex-start. V opačném případě se příčná počáteční hrana prvního řádku v ohebném kontejneru umístí do roviny s příčným počátečním okrajem obsahu ohebného kontejneru, příčná koncová hrana posledního řádku v ohebném kontejneru se umístí do roviny s křížovým okrajem obsahu. okraj koncového obsahu ohebného kontejneru a zbývající čáry v ohebném kontejneru jsou rozmístěny tak, že rozestupy mezi libovolnými dvěma sousedními čarami jsou stejné. space-around Linky jsou rovnoměrně rozmístěny v ohebném kontejneru s polovičními mezerami na obou koncích. Pokud je zbývající volné místo záporné, je tato hodnota totožná se středem. V opačném případě jsou čáry v ohebném kontejneru rozmístěny tak, že rozestupy mezi jakýmikoli dvěma sousedními čarami jsou stejné a rozestupy mezi prvními/posledními čarami a okraji ohebného kontejneru jsou poloviční než vzdálenost mezi ohybovými čarami. prostorově rovnoměrně Linky jsou rovnoměrně rozmístěny v ohebném kontejneru. Pokud je zbývající volné místo záporné, je tato hodnota totožná se středem. V opačném případě jsou čáry v ohebném kontejneru rozmístěny tak, že rozteč mezi každou ohebnou šňůrou je stejná. natáhnout Čáry se natáhnou, aby zabraly zbývající místo. Pokud je zbývající volné místo záporné, je tato hodnota totožná s flex-start. V opačném případě se volný prostor rozdělí rovnoměrně mezi všechny řádky, čímž se zvětší jejich křížová velikost.
Chtěl bych mluvit o FlexBoxu. Modul rozložení Flexbox (flexibilní krabice - „flexibilní blok“, zapnuto tento moment W3C Candidate Recommendation si klade za cíl nabídnout více účinná metoda rozložení, zarovnání a rozložení volného prostoru mezi prvky v kontejneru, i když je jejich velikost neznámá a/nebo dynamická (odtud slovo „flexibilní“).
Hlavní myšlenkou flexibilního uspořádání je dát kontejneru možnost změnit šířku/výšku (a pořadí) jeho prvků, aby lépe zaplnily prostor (ve většině případů, aby podporovaly všechny typy displejů a velikostí obrazovek).Flexibilní kontejner natahuje prvky, aby vyplnil prostor, nebo je stlačoval, aby se zabránilo jejich přetečení.
A co je nejdůležitější, rozložení flexboxu nezávisí na směru, na rozdíl od konvenčních rozložení (bloky uspořádané svisle a vložené prvky uspořádané vodorovně).Zatímco běžné rozvržení je skvělé pro webové stránky, postrádá flexibilitu pro podporu velkých nebo složitých aplikací (zejména pokud jde o změnu orientace obrazovky, změnu velikosti, roztažení, zmenšení atd.).
Protože flexbox je celý modul, ne jen jedna vlastnost, kombinuje mnoho vlastností.Některé z nich musí být aplikovány na kontejner (rodičovský prvek, nazývaný flex kontejner), zatímco jiné vlastnosti jsou aplikovány na podřízené prvky, neboli flex prvky.
Zatímco běžné rozvržení je založeno na směrech proudění blokových a inline prvků, flexibilní rozvržení je založeno na „flexibilních směrech proudění“.
Flexbox
Prvky budou v zásadě rozmístěny buď podél hlavní osy (od hlavního začátku k hlavnímu konci) nebo podél příčné osy (od příčného začátku k příčnému konci).
main-axis — hlavní osa, podél které jsou umístěny ohebné prvky.Vezměte prosím na vědomí, že musí být horizontální, vše závisí na kvalitě justify-contentu.
hlavní start | main-end - flex prvky jsou umístěny v kontejneru z hlavní-startovací polohy do hlavní-koncové polohy.
hlavní velikost — šířka nebo výška ohebného prvku v závislosti na vybrané hlavní velikosti.Základní veličinou může být šířka nebo výška prvku.
křížová osa - příčná osa kolmá na hlavní.Jeho směr závisí na směru hlavní osy.
křížový start | cross-end - flex linky jsou naplněny prvky a umístěny do kontejneru z křížové počáteční polohy a křížové koncové polohy.
velikost kříže — šířka nebo výška ohebného prvku v závislosti na vybraném rozměru se rovná této hodnotě.Tato vlastnost je stejná jako šířka nebo výška prvku v závislosti na vybraném rozměru.
Vlastnosti
displej: flex | inline-flex;
Definuje flex kontejner (inline nebo blok v závislosti na vybrané hodnotě), propojuje flex kontext pro všechny jeho bezprostřední potomky.
zobrazení: jiné hodnoty | flex | inline-flex;
Mějte na paměti:
Sloupce CSS nefungují s flex kontejneremfloat, clear a vertical-align nefungují s flexibilními předměty
flex-direction
Platí před nadřazeným prvkem flex kontejneru.
Nastavuje hlavní osu, čímž definuje směr pro ohebné položky umístěné v kontejneru.
směr ohybu: řádek | řada-zpět | sloupec | sloupec-reverzní
řádek (výchozí): zleva doprava pro ltr, zprava doleva pro rtl;
řada-zpět: zprava doleva pro ltr, zleva doprava pro rtl;
sloupec: podobný řádku, shora dolů;
sloupec-obrácený: podobně jako řádek-obrácený, zdola nahoru.
flex-wrap
Platí před nadřazeným prvkem flex kontejneru.
Určuje, zda je kontejner jednořádkový nebo víceřádkový, stejně jako směr příčné osy, určuje směr, ve kterém budou umístěny nové řádky.
flex-wrap: nowrap | obal | wrap-reverse
nowrap (výchozí): jeden řádek / zleva doprava pro ltr, zprava doleva pro rtl;
wrap: multiline / zleva doprava pro ltr, zprava doleva pro rtl;
wrap-reverse: multiline / zprava doleva pro ltr, zleva doprava pro rtl.
flex-flow
Platí před nadřazeným prvkem flex kontejneru.
Toto je zkratka pro vlastnosti flex-direction a flex-wrap, které společně definují hlavní a příčnou osu.Výchozí hodnota je row nowrap.
flex-flow< ‘flex-direction’> || < ‘Flex-wrap’>
ospravedlnit-obsah
Platí před nadřazeným prvkem flex kontejneru.
Definuje zarovnání vzhledem k hlavní ose.Pomáhá rozmístit volný prostor v případě, kdy se čárové prvky „neroztahují“ nebo nenatahují, ale již dosáhly své maximální velikosti.Umožňuje také určitou kontrolu nad zarovnáním prvků, když přesahují čáru.
justify-content: flex-start | ohebný konec | centrum | mezera-mezi | prostor kolem
flex-start (výchozí): položky se přesunou na začátek řádku;
ohebný konec: prvky se přesunou na konec řádku;
střed: prvky jsou zarovnány na střed čáry;
mezera mezi: prvky jsou rozmístěny rovnoměrně (první prvek na začátku řádku, poslední na konci)
space-around: prvky jsou rozmístěny rovnoměrně se stejnou vzdáleností mezi sebou a mimo čáru.
ospravedlnit-obsah
zarovnat-položky
Platí před nadřazeným prvkem flex kontejneru.
Definuje výchozí chování pro umístění ohebných položek vzhledem k příčné ose na aktuálním řádku.Představte si to jako verzi justify-content pro příčnou osu (kolmou k hlavní).
align-items: flex-start | ohebný konec | centrum | základní linie | protáhnout se
flex-start: hranice příčného startu pro prvky umístěné v poloze příčného startu;
flex-end: křížový okraj pro prvky umístěné v křížové koncové poloze;
střed: prvky jsou zarovnány na střed příčné osy;
základní čára: prvky jsou zarovnány se základní linií;
roztáhnout (výchozí): prvky jsou roztaženy tak, aby vyplnily kontejner (s přihlédnutím k min. šířce / max. šířce).
zarovnat-položky
zarovnat-obsah
Platí před nadřazeným prvkem flex kontejneru. Zarovná řádky flexibilního kontejneru, když je na příčné ose volný prostor, podobně jako zarovnání obsahu na hlavní ose. Poznámka: Tato vlastnost nefunguje s jednořádkovými flexboxy.
zarovnat-obsah: flex-start | ohebný konec | centrum | mezera-mezi | prostor kolem | protáhnout se
flex-start: čáry jsou zarovnány vzhledem k začátku kontejneru;
ohebný konec: čáry jsou zarovnány vzhledem ke konci nádoby;
střed: čáry jsou zarovnány do středu kontejneru;
mezera mezi: řádky jsou rozmístěny rovnoměrně (první řádek na začátku řádku, poslední na konci)
mezera kolem: čáry jsou rozmístěny rovnoměrně se stejnou vzdáleností mezi sebou;
roztáhnout (výchozí): Čáry se roztáhnou, aby vyplnily dostupný prostor.
zarovnat-obsah
objednat
Ve výchozím nastavení jsou flexibilní položky uspořádány v původním pořadí.Vlastnost order však může řídit pořadí, ve kterém se zobrazí v kontejneru.
objednávka 1
flex-grow
Vztahuje se na podřízený element/flex element. Definuje schopnost ohebného prvku v případě potřeby „růst“.Nabývá bezrozměrné hodnoty a slouží jako proporce.Určuje, kolik volného místa může prvek zabírat uvnitř kontejneru. Pokud mají všechny prvky vlastnost flex-grow nastavenou na 1, pak každý podřízený prvek obdrží uvnitř kontejneru stejnou velikost.Pokud jednomu z dětí nastavíte 2, zabere dvakrát tolik místa než ostatní.
flex-grow
flex-shrink
Vztahuje se na podřízený element/flex element.
Definuje schopnost flexibilní položky se v případě potřeby zmenšit.
flex-shrink
Záporná čísla nejsou akceptována.
flex-base
Vztahuje se na podřízený element/flex element. Definuje výchozí velikost prvku před přidělením místa v kontejneru.
flex-base
flex
Vztahuje se na podřízený element/flex element. Toto je zkratka pro flex-grow, flex-shrink a flex-base.Druhý a třetí parametr (flex-shrink, flex-base) jsou volitelné.Výchozí hodnota je 0 1 auto.
flex: žádný | [< ‘Flex-grow «> <» flex-shrink’>? || < ‘Flex-basis’>]
zarovnat se
Vztahuje se na podřízený element/flex element. Umožňuje přepsat výchozí zarovnání nebo zarovnání položek pro jednotlivé flexibilní položky. Pro lepší pochopení dostupných hodnot se podívejte na popis vlastnosti align-items.
align-self: auto | flex-start | ohebný konec | centrum | základní linie | protáhnout se
Příklady
Začněme velmi, velmi jednoduchý příklad, se vyskytuje téměř každý den: zarovnání je přesně ve středu.Pokud použijete flexbox, nemůže být nic jednoduššího.
Parent ( display: flex; height: 300px; ) .child ( width: 100px; / * Whatever * / height: 100px; / * Whatever * / margin: auto; / * Magic! * / )
Tento příklad spoléhá na skutečnost, že okraj pod flex kontejnerem, nastavený na auto, zabírá místo navíc, takže úkol odsazení tímto způsobem zarovná prvek přesně na střed na obou osách. Nyní použijeme některé vlastnosti.Představte si sadu 6 prvků pevné velikosti (pro krásu), ale s možností změnit velikost nádoby.Chceme je rozmístit rovnoměrně vodorovně, aby při změně velikosti okna prohlížeče vše vypadalo dobře (žádné @media dotazy!).
Flex-kontejner (
/ * Nejprve vytvoříme flexibilní kontext * /
displej: flex;
/* Nyní určíme směr toku a zda chceme prvky
přesunuta na nový řádek
* Pamatujte, že je to stejné jako:
* Flex-směr: řádek;
* Flex-wrap: wrap;
* /
flex-flow: obtékání řádků;
/ * Nyní určíme, jak bude prostor rozdělen * /
}
Připraveno. Vše ostatní je otázkou registrace. Zkusme něco jiného.Představte si, že chceme navigaci zarovnanou vpravo úplně nahoře na našem webu, ale chceme, aby byla na středně velkých obrazovkách zarovnaná na střed a na malých obrazovkách se stala jedním sloupcem.Všechno je docela jednoduché.
/ * Velké obrazovky * /
.navigace(
displej: flex;
flex-flow: obtékání řádků;
/* Posune prvky na konec řádku podél hlavní osy * /
justify-content: flex-end;
}
všechna média a (max. šířka: 800 pixelů) (
.navigace(
/* U středních obrazovek vycentrujeme navigaci,
rovnoměrné rozložení volného prostoru mezi prvky * /
justify-content: space-around;
}
}
/*Malé obrazovky*/
všechna média a (max. šířka: 500 pixelů) (
.navigace(
/ * Na malých obrazovkách místo do řádku uspořádáme prvky do sloupce * /
směr ohybu: sloupec;
}
}
Pojďme si hrát s flexibilitou flexibilních předmětů!Co takhle třísloupcové rozložení vhodné pro mobily se záhlavím a zápatím v plné šířce?A v jiném pořadí uspořádání.
Obálka (
displej: flex;
flex-flow: obtékání řádků;
}
/ * Nastavit všechny prvky na 100% šířku * /
.header, .main, .nav, .aside, .footer (
flex 1100 %;
}
/* V tomto případě se spoléháme na původní příkaz, který nás povede
* Mobilní zařízení:
* 1 hlavička
* 2 nav
* 3 hlavní
*4 stranou
* 5 zápatí
* /
/*Střední obrazovky*/
všechna média a (min. šířka: 600 pixelů) (
/ * Oba postranní panely jsou umístěny na stejném řádku * /
.strana (flex: 1 auto; )
}
/*Velké obrazovky*/