CSS Prohlicové odsazení mezi prvky. Vyrovnávací bloky s CSS pomocí kontejneru FLEX

CSS FlexBox. (Flexibilní modul rozložení krabic) - Modul pružného uspořádání kontejneru je způsob pokládání prvků, základ osy je založen na.

FlexBox se skládá z flex Containal (Flex Container) a flexibilní položky (FLEX položky). Flexibilní prvky mohou být zabudovány do řetězce nebo sloupce a zbývající volný prostor je rozdělen mezi nimi různými způsoby.

Modul FlexBox umožňuje vyřešit následující úkoly:

  • Umístěte prvky do jedné ze čtyř směrů: zleva doprava, vlevo dole, shora dolů nebo dole nahoru.
  • Přepsat postup pro zobrazování prvků.
  • Automaticky určují rozměry položek tak, aby se zapadly do cenově dostupného prostoru.
  • Vyřešte problém s horizontálními a vertikálními centry.
  • Přeneste prvky uvnitř nádoby, aniž by jeho přetečení.
  • Vytvořte sloupce stejné výšky.
  • Vytvořit stisknuté na spodní straně stránky.

FlexBox řeší specifické úkoly - vytvoření jednorozměrných rozvržení, například navigační panel, protože elementy Flex mohou být umístěny pouze na jednom z os.

Seznam aktuálních problémů modulu a cross-prohlížeče řešení pro ně můžete přečíst v článku Philip Walton.

Co je flexbox

Podpůrné 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

Obr. 1. Model FlexBox

Chcete-li popsat modul FlexBox, použije se specifická sada termínů. Režim FLEX-toků a režim záznamu určují korespondenci těchto termínů k fyzickým směrům: horní / vpravo / dole / vlevo, osy: vertikální / vodorovná a velikost: šířka / výška.

Hlavní osa - osa podél které jsou pružné prvky stanoveny. Rozšíří se především měření.

Hlavní start a hlavní konec - Linky, které definují počáteční a konečnou stranu kontejneru FLEX, vztaženo, na které jsou pružné prvky stanoveny (počínaje hlavním začátkem směrem k hlavnímu konci).

Hlavní velikost) - Šířka nebo výška kontejneru FLEX nebo FLEX FLEY, v závislosti na skutečnosti, že se měří hlavně, určete hlavní velikost kontejneru FLEX nebo elementu Flex.

Křížová osa - osa kolmá k hlavní ose. Rozkládá se v příčném rozměru.

Cross Start a Cross End - Řádky, které definují počáteční a konečnou stranu příčné osy vzhledem k tomu, které jsou pružné prvky stanoveny.

Velikost kříže) - Šířka nebo výška flex-kontejner nebo flex prvků, v závislosti na tom, co je v příčném rozměru, jsou jejich příčná velikost.


Obr. 2. Režim řádku a sloupců

2. Kontejner FLEX

Kontejner FLEX pro svůj obsah nastavuje nové flexibilní kontext formátování. Kontejner FLEX není blokový kontejner, a proto takové vlastnosti CSS, jako je plovák, jasné, vertikální, vertikální, nefungují pro podřízené prvky. Kontejner FLEX také neovlivní vlastnosti sloupce, vytváření reproduktorů v textových a pseudo-elementů :: First-line a :: První písmeno.

Model značení FlexBox je spojen s určitou hodnotou vlastnosti CSS displeje nadřazeného HTML prvku obsahujícího sub-volebních bloků uvnitř sebe sama. Chcete-li ovládat prvky pomocí tohoto modelu, musíte nastavit vlastnost zobrazení následujícím způsobem:

Flex-kontejner (/ * generuje blok Flex-kontejnerový blok * / DISPLAY: -WebKit-Flex; Displej: Flex;) .Flex-kontejner (/ * generuje úroveň řetězce kontejneru FLEX * / DISPLAY: -WebKit-Inline-Flex ; Zobrazení: inline-flex;)

Po instalaci těchto vlastností se každý podřízený prvek automaticky stane flex elementem, nastavením v jednom řádku (podél hlavní osy). V tomto případě se block a malá prvky se chovají stejně, tj. Šířka bloků se rovná šířce jejich obsahu, s ohledem na vnitřní pole a rámce prvku.


Obr. 3. Vyrovnávací prvky v modelu FlexBox

Pokud rodičovský blok obsahuje text nebo obrázky bez obalů, stávají se anonymními prvky flex. Text je vyrovnávání přes horní okraj bloku kontejneru a výška obrazu se rovná výšce bloku, tj. Je deformováno.

3. Flex-prvky

Flex-prvky - bloky představující obsah kontejneru FLEX v proudu. Kontejner FLEX stanoví nový kontext formátování pro jeho obsah, který způsobuje následující funkce:

  • Pro flex skupiny je jejich hodnota vlastnosti zobrazení blokována. Zobrazená hodnota: inline-blok; a zobrazení: Stolní buňka; vypočteno na displeji: blok; .
  • Prázdný prostor mezi prvky zmizí: nestane se vlastním prvkem flex-element, i když je textový text zabalen v anonymním elementu flex. Pro obsah anonymního flex elementu je nemožné nastavit své vlastní styly, ale zdědí je (například parametry písma) z kontejneru FLEX.
  • Absolutně umístěný flex element se neúčastní uspořádání rozvržení.
  • Okrajové pole sousední prvky Flex nejsou zhrouceny.
  • Procentní hodnoty okraje a polstrování jsou vypočteny z vnitřní velikosti bloku obsahujícího.
  • marže: Auto; Rozšiřuje, absorbuje další prostor ve vhodném měření. Mohou být použity k vyrovnání nebo rozšíření sousedních flexních prvků.
  • Automatická minimální velikost prvků Flex ve výchozím nastavení je minimální velikost jejího obsahu, tj. Min-šířka: Auto; . Pro rolování kontejnerů je automatická minimální velikost obvykle nula.

4. Flex-prvky a orientace

Obsah kontejneru FLEX může být rozložen v libovolném směru a v libovolném pořadí (přeskupení elementů FLEX uvnitř nádoby ovlivňuje pouze vizuální vykreslování).

4.1. Směr hlavní osy: směr Flex

Nemovitost patří do kontejneru FLEX. Řídí směr hlavní osy, podél které jsou ohybové prvky stohovány v souladu s aktuálním režimem záznamu. Není zděděna.

směřování ohybu.
Hodnoty:
Řádek Výchozí hodnota zleva doprava (v RTL vlevo doleva). Flex Elements jsou vyloženy v řetězci. Začátek (hlavní start) a konec (hlavní konec) směry hlavní osy odpovídají začátek (inline-start) a konec (inline-end) inline osy (inline osa).
Řádek. Směr doprava vlevo (v rtl vlevo doprava). Flex-prvky jsou stanoveny v řetězci vzhledem k pravému okraji kontejneru (v RTL - vlevo).
sloupec. Směr shora dolů. Flex Elements jsou stanoveny ve sloupci.
Sloupec-reverzní. Sloupec s prvky v opačném pořadí, dno nahoru.
počáteční
zdědit.

Obr. 4. Vlastnost Flex-Směr pro jazyky vlevo do pravé strany

Syntax

Flex-kontejner (displej: -webkit-Flex; -webKit-Flex-Směr: řádek-reverzní; Displej: Flex; Flex; směr Flex: Row-reverzní;)

4.2. Správa kontejneru Multi-Flex: Flex-Wrap

Tato nemovitost určuje, zda bude kontejner FLEX jedno-line nebo více linie, a také nastavuje směr příčné osy, což určuje směr pokládání nových linek FLEX kontejneru.

Ve výchozím nastavení jsou prvky Flex stohovány v jednom řádku podél hlavní osy. Když přetečení přesahují mezní rámec kontejneru Flex. Nemovitost není zděděna.


Obr. 5. Správa víceproudů pomocí vlastností Flex-Wrap pro LTR-jazyky

Syntax

Flex-kontejner (displej: -WebKit-Flex; -WebKit-Flex-Wrap: Wrap; Displej: Flex; Flex-Wrap: Obal;)

4.3. Shrnutí směru a multiplay: Flex-tok

Vlastnost umožňuje určit směry hlavních a příčných os, stejně jako možnost přenosu flexních prvků, pokud je to nutné pro několik řádků. Jedná se o zkráceně nahrávání směru flexe a Flex-Wrap. Výchozí hodnota je flex-tok: řádek Nowrap; . Nemovitost není zděděna.

Syntax

Flex-kontejner (zobrazení: -webkit-Flex; -webKit-Flex-Flow: Řádkový zábal; Displej: Flex; Flex-Flow: Řádkový zábal;)

4.4. Flex Element zobrazení Objednávka: Objednávka

Tato nemovitost určuje pořadí, ve kterém jsou zobrazeny Flex Elements a umístěny uvnitř kontejneru FLEX. Platí pro flex-prvky. Nemovitost není zděděna.

Zpočátku mají všechny prvky Flex objednávku: 0; . Při určování hodnoty od -1 pro prvek se přesune na začátek času, hodnotu 1 - do konce. Pokud má několik flexních prvků stejnou hodnotu objednávky, zobrazí se v souladu s původním pořadím.

Syntax

Flex-kontejner (displej: -webKit-Flex; Displej: Flex;) .Flex-Položka (-webKit-pořadí: 1; Objednávka: 1;)
Obr. 6. Flex-prvky zobrazení pořadí

5. Flexibilní Flex Elements

Stanovení aspektu flexibilního uspořádání je schopnost "ohýbat" flex-prvky, změnou jejich šířky / výšky (v závislosti na tom, která velikost je na hlavní ose) pro vyplnění dostupného prostoru v hlavní dimenzi. To se provádí pomocí vlastnosti Flex. Kontejner FLEX distribuuje volný prostor mezi jeho dětskými prvky (v poměru k koeficientu vzrůstu flex-pěst) k naplnění nádoby nebo jejich komprimuje (v poměru k koeficientu smrštitelného flexa), aby se zabránilo přetečení.

Prvek FLEX bude zcela "nepružný", pokud jsou jeho flex-rostoucí a flex-smršťovací hodnoty nulové, a "flexibilní" jinak.

5.1. Sada flexibilních velikostí s jedním vlastnictvím: Flex

Tato nemovitost je zkrácený záznam o Flex-Grow-Grow, Flex-Shrink a Flex-Based vlastnosti. Výchozí hodnota: Flex: 0 1 Auto; . Můžete zadat jeden i všechny tři vlastnosti. Nemovitost není zděděna.

Syntax

Flex-kontejner (zobrazení: -webkit-Flex; Displej: Flex;) .Flex-Položka (-webKit-Flex: 3 1 100px; -ms-Flex: 3 1 100px; Flex: 3 1 100px;)

5.2. Koeficient růstu: Flex-růst

Tato nemovitost určuje koeficient růstu jednoho flex-elementu vzhledem k jiným ohňovým prvkům v kontejneru FLEX během distribuce pozitivního volného místa. Pokud je součet hodnot Flex-růst flex prvků v řetězci menší než 1, zabírají méně než 100% volného místa. Nemovitost není zděděna.


Obr. 7. Správa volného místa v navigačním panelu s použitím flex-růst

Syntax

Flex-kontejner (displej: -webkit-Flex; Displej: Flex;) .Flex-Položka (-webKit-Flex-Grow: 3; Flex-růst: 3;)

5.3. Kompresní poměr: Flex-Shrink

Tato vlastnost označuje kompresní koeficient elementu Flex ve vztahu k ostatním prvkům ohybu během distribuce negativního volného místa. Se násobí základní velikostí flex-bází. Negativní prostor je distribuován v poměru k době, jak může být prvek sáně sáně, například, malý element flex element nebude snižovat na nulu, dokud není výrazně snížen pružný prvek. větší velikost. Nemovitost není zděděna.


Obr. 8. Zúžení prvků Flex v řetězci

Syntax

Flex-kontejner (zobrazení: -webkit-Flex; Displej: Flex;) .Flex-Položka (-webKit-Flex-Shrink: 3; Flex-Shrink: 3;)

5.4. Základní velikost: Flex-base

Vlastnost nastavuje počáteční hlavní velikost prvku Flex před distribucí volného místa v souladu s koeficienty flexibility. Pro všechny hodnoty, s výjimkou automatického a obsahu, je definována základní flexibilní velikost, stejně jako šířka v horizontálních režimech záznamu. Procentní hodnoty jsou určeny vzhledem k velikosti kontejneru FLEX a pokud není velikost zadána, hodnota použitá pro flex-bázi je velikost jejího obsahu. Není zděděna.

Syntax

Flex-kontejner (displej: -webKit-Flex; Displej: Flex;) .Flex-Položka (-WebKit-Flex-Based: 100px; Flex-based: 100px;)

6. Zarovnání

6.1. Zarovnání na hlavní ose: zdůvodnit obsah

Vlastnost zarovná flexé prvky podél hlavní osy kontejneru Flex, distribuce volného prostoru, neobsazené elementy Flex. Když je položka převedena na kontejner FLEX, jsou výchozí prvky Flex seskupeny dohromady (pokud pole okrajů není zadáno). Mezery jsou přidávány po výpočtu hodnot okraje a růstu ohybu. Pokud mají některé prvky nenulová hodnota flex-růstu nebo marže: Auto; Nemovitost nebude mít žádný vliv. Nemovitost není zděděna.

Hodnoty:
Flex-Start. Výchozí hodnota. Flex-prvky jsou stanoveny ve směru přicházejícím z počáteční linie kontejneru FLEX.
Flex-end. Flex-prvky jsou stanoveny ve směru přicházejícím z konečné linie kontejneru FLEX.
Centrum Prvky ohybu jsou vyrovnány ve středu kontejneru FLEX.
Prostor mezi. Prvky Flex jsou rovnoměrně rozloženy přes linku. První flex-element je umístěn na okraji počátečního řádku, poslední flex element je spláchnout s okrajem konečného vedení a zbývající prvky ohýbání na lince jsou distribuovány tak, aby vzdálenost mezi dvěma sousedními prvky je stejný. Pokud zbývající volný prostor je negativně nebo v řetězci je pouze jeden element flex, tato hodnota je totožná s parametrem FLEX-START.
Prostor-kolem. Flex-prvky na linkách jsou distribuovány tak, aby vzdálenost mezi dvěma sousedními elementárními elementy je stejná a vzdálenost mezi prvním / posledním ohýbacím prvkem a hranami kontejneru Flex se pohybovaly od vzdálenosti mezi prvky FLEX.
počáteční Nastaví výchozí hodnotu vlastnosti.
zdědit. Zdědí hodnotu majetku z nadřazeného prvku.

Obr. 9. Zarovnání prvků a distribuce volného místa pomocí vlastností ospravedlnění obsahu

Syntax

Flex-kontejner (zobrazení: -webkit-flex; -webkit-ospravedlnit-obsah: flex-start; displej: flex; odůvodnění - obsah: flex-start;)

6.2. Zarovnejte příčnou osu: ALIGN-POLOŽKY A ALIGN-JO

Pružné prvky mohou být vyrovnány na příčné ose proudu kontejneru FLEX. Zarovnat položky nastavuje zarovnání pro všechny prvky kontejneru Flex, včetně anonymních prvků Flex. ALIGN-Vlastní vám umožňuje přepsat toto vyrovnání pro jednotlivé flexy flex. Pokud je některý z příčného okraje flex elementu Auto, ALIGN-SELF nemá žádný účinek.

6.2.1. Zarovnat položky.

Vlastnost zarovnává Flex Elements, včetně anonymních prvků Flex na příčné ose. Není zděděna.

Hodnoty:
Flex-Start.
Flex-end.
Centrum
Základní linie Základní linie všech flexních prvků zapojených do vyrovnání se shodují.
Protáhnout se.
počáteční Nastaví výchozí hodnotu vlastnosti.
zdědit. Zdědí hodnotu majetku z nadřazeného prvku.
Obr. 10. Zarovnání prvků ve svislé nádobě

Syntax

Flex-kontejner (displej: -webkit-flex; -webkit-align-položek: flex-start; displej: flex; Zarovnání - položky: flex-start;)

6.2.2. Zarovnat sebe.

Tato nemovitost je zodpovědná za vyrovnání samostatného flex elementu ve výšce kontejneru FLEX. Přepíše zarovnání uvedené podle položky ALIGN-Položky. Není zděděna.

Hodnoty:
AUTO. Výchozí hodnota. Prvek FLEX používá zarovnání uvedené v vlastnostu ALIGN-Položky Flex Container.
Flex-Start. Horní okraj flex elementu je umístěn úzce s řadou FLEX (nebo na vzdálenost, s přihlédnutím k zadaným okrajovým poli a rámec hranice prvku) procházejícího začátkem příčné osy.
Flex-end. Spodní okraj flex elementu je těsně umístěna s řadou FLEX (nebo ve vzdálenosti, s přihlédnutím ke specifikovaným okrajovým poli a rámec hranice prvku) procházející koncem příčné osy.
Centrum Pole Flex Element jsou vycentrována na příčné ose uvnitř řady FLEX.
Základní linie Prvek FLEX je vyrovnán s výchozím.
Protáhnout se. Pokud se příčná velikost elementu Flex vypočítá jako Auto a žádný z příčných hodnot okraje není rovna auto, element je natažen. Výchozí hodnota.
počáteční Nastaví výchozí hodnotu vlastnosti.
zdědit. Zdědí hodnotu majetku z nadřazeného prvku.

Obr. 11. Zarovnání individuálních prvků flex

Syntax

Flex-kontejner (displej: -webkit-Flex; Displej: Flex;) .Flex-Položka (-webkit-align-self: Center; ALIGN-SELF: CENTER;)

6.3. Řádky kontejnerů FLEX: Zarovnat obsah

Vlastnost řádky linky v kontejneru FLEX v přítomnosti dalšího prostoru na příčné ose, podobně jako urovnání jednotlivé prvky Na hlavní ose pomocí vlastnosti ospravedlnění obsahu. Nemovitost nemá vliv na jednořádkovou kontejner Flex. Není zděděna.

Hodnoty:
Flex-Start. Řádky jsou uloženy směrem k začátku kontejneru FLEX. Okraj prvního řádku je umístěna v blízkosti okraje kontejneru Flex, každý následný - v blízkosti předchozího řádku.
Flex-end. Řádky jsou položeny ke konci kontejneru FLEX. Okraj posledního řádku je umístěn blízko k okraji kontejneru Flex, každý předchozí - v blízkosti následného řádku.
Centrum Řádky jsou uloženy směrem ke středu kontejneru FLEX. Řádky jsou umístěny blízko sebe a zarovnány ve středu kontejneru Flex s rovnou vzdálenost mezi počátečním okrajem obsahu kontejneru Flex a prvním řetězcem a mezi konečným okrajem obsahu kontejneru FLEX a Poslední řetězec.
Prostor mezi. Řádky jsou rovnoměrně distribuovány v kontejneru FLEX. Pokud je zbývající volný prostor záporný nebo kontejner FLEX má pouze jeden flex line, tato hodnota je totožná s flex-startem. V opačném případě je okraj prvního řádku umístěn blízko počátečního okraje obsahu kontejneru, okraj posledního řádku je v blízkosti konečného okraje obsahu kontejneru FLEX. Zbývající čáry jsou distribuovány tak, aby vzdálenost mezi dvěma sousedními řádky je stejná.
Prostor-kolem. Řádky jsou rovnoměrně rozloženy v kontejneru FLEX s polovičním prostorem na obou koncích. Pokud je zbývající volný prostor negativní, je tato hodnota totožná s středovým centrem. V opačném případě jsou řetězce distribuovány tak, že vzdálenost mezi dvěma sousedními řadami je stejná a vzdálenost mezi prvními / posledními řadami a hranami obsahu kontejneru Flex se pohybovaly od vzdálenosti mezi vedením.
Protáhnout se. Výchozí hodnota. Řádky flexních prvků jsou rovnoměrně nataženy, vyplnění veškerého dostupného prostoru. Pokud je zbývající volný prostor negativní, tato hodnota je totožná s flex-startem. V opačném případě bude volný prostor rozdělen stejně mezi všemi řadami, zvýšení jejich příčné velikosti.
počáteční Nastaví výchozí hodnotu vlastnosti.
zdědit. Zdědí hodnotu majetku z nadřazeného prvku.
Obr. 12. Víceúrovňová vyrovnání prvků Flex

Syntax

Flex-kontejner (displej: -WebKit-flex; -webkit-flex-flow: řádkový zábal; -webkit-align-obsah: flex-end; displej: flex; flex-tok: řádný zábal; Zarovnat obsah: flex-end; Výška: 100px;)

Modul Layout FlexBox (Flexibilní pole) je zaměřen na poskytnutí více než efektivní metoda Umístění, zarovnání a distribuce volného místa mezi prvky v kontejneru, i když jejich velikost není v předstihu a / nebo dynamické (tedy slovo "flex").

Základní myšlenka flexibilního (FLEX) Markup je poskytnout kontejner se schopností změnit šířku / výšku (a pořadí) jeho prvků, aby nejlepší způsob Vyplňte dostupný prostor (hlavně pro umístění na všechny typy a velikosti obrazovek). Kontejner FlexBox expanduje prvky pro vyplnění volného místa nebo jejich komprimuje, aby se zabránilo přetečení.

Nejdůležitější věcí je, že FlexBox je směrovým agnostikem na rozdíl od obvyklých uspořádání (bloky na bázi vertikálních polohovacích a řetězových prvků založených na horizontálním polohování). Navzdory skutečnosti, že oni pracují dost dobře, jim chybí flexibilitu pro podporu velkých nebo komplexních aplikací (zejména pokud jde o změny orientace, změna velikosti, protahování, komprese atd.).

Poznámka. FlexBox je vhodnější pro aplikační komponenty a malé rozvržení, zatímco CSS mřížka je určena pro větší rozložení.

Základy a terminologie

Vzhledem k tomu, FlexBox je celý modul, nikoli samostatný majetek, obsahuje mnoho různých věcí, včetně celé sady vlastností. Některé z nich jsou navrženy tak, aby instalovaly kontejner (rodičovský prvek známý jako "Flex Container"), zatímco jiné musí být instalovány s dětskými prvky (známé jako "Flex Evidly").

Pokud je obvyklý systém rozložení založen na směru bloků a řetězec, je flexbox založen na "směrech proudění". Podívejte se prosím na tento výkres ze specifikace vysvětlující základní myšlenku flexibře.

V podstatě budou umístěny hlavní osa (z hlavního starta na hlavní konec) nebo křížová osa (od křížového start do kříže).

Podpůrné prohlížeče

CSS flexibilní box rozložení modulu

Chrome pro Android.

Prohlížeč Blackberry začíná s 10 verzí podporuje novou syntaxi.

Vlastnosti pro kontejner

Vlastnosti pro prvky

Vlastnosti pro rodičovský prvek (Flex Container)

zobrazit.

Určuje kontejner FLEX; Řetězec nebo blok závisí na přenosové hodnotě. Zahrnuje flexibilní kontext pro všechny jeho přímé, dětské prvky.

Kontejner (displej: flex; / * nebo interline-flex * /)

Upozorňujeme, že sloupce CSS nemají vliv na kontejner FLEX.

směřování ohybu.


Nastaví hlavní osu, což určuje směr prvků umístěných v nádobě. FlexBox (kromě volitelného obalu) je koncept jednosměrného uspořádání. Přemýšlejte o flex-prvcích, především jako horizontální čáry nebo vertikální reproduktory.

Kontejner (směr FLEX: řádek | řádek-reverzní kolona | sloupec-reverzní;)

  • Řádek (výchozí) - zleva doprava v LTR; právo vlevo v RTL;
  • Řádek. - právo vlevo v LTR; Zleva doprava v RTL;
  • sloupec. - totéž je ta řádek, pouze z vrcholu dolů;
  • sloupec-reverzní. - to samé je řádek, pouze ze dna nahoru;

flex-wrap.


Ve výchozím nastavení se položky pokusí vyplnit pouze jedno řádky. Toto chování můžete změnit a povolit, aby byly položky, které mají být přeneseny na další řádek, v případě potřeby.

Kontejner (Flex-Wrap: Nowrap | Zabalení | Zabalení;)

  • nowrap (výchozí) - Všechny prvky Flex budou umístěny na jednom řádku;
  • zabalit. - Prvky Flex budou umístěny na několika řádcích, shora dolů;
  • obal. - Prvky Flex budou umístěny na několika řádcích, zdola nahoru;

ospravedlnit-obsah


Určuje vyrovnání podél hlavní osy. Pomáhá distribuovat zbývající volný prostor po všech pevných a nefungovaných v šířce Flex Elements dosáhly maximální velikosti. Pomáhá také provádět určitou kontrolu nad vyrovnání prvků, když přetéknou řetězec.

Kontejner (ospravedlnit obsah: Flex-Start | Flex-End | Center | Space-mezi | Space-kolem;)

  • flex-Start (výchozí) - prvky jsou stisknuty na začátek řádku;
  • flex-end. - Prvky jsou stisknuty směrem ke konci řetězce;
  • centrum - Prvky se nacházejí ve středu podél řetězce;
  • prostor mezi. - prvky jsou umístěny rovnoměrně na lince; První prvek je na začátku řádku, poslední prvek Na konci linky;
  • prostor-kolem. - Prvky jsou umístěny rovnoměrně na lince se stejným prostorem v blízkosti je. Upozorňujeme, že vizuálně prostor není stejný, protože všechny prvky mají stejný prostor na obou stranách. První prvek bude mít jednu jednotku prostoru ze strany kontejneru, ale dva jednotky mezi ním a dalším prvkem, protože další prvek má také jednu jednotku ze dvou stran.

zarovnat položky.


Tato vlastnost určuje chování prvků Flex podél příčné osy na aktuálním řádku. Přemýšlejte o tom jako O, pouze pro příčnou osu (kolmá hlavní osa).

Kontejner (ALIGN-POLOŽEK: Flex-Start | Flex-End | Center | Baseline | Stretch;)

  • flex-Start - Prvky jsou umístěny na začátku příčné osy;
  • flex-End - Prvky jsou umístěny na konci příčné osy;
  • centrum - Prvky jsou umístěny ve středu příčné osy;
  • základní linie - prvky jsou vyrovnány základní linií;
  • stretch (výchozí) - natažení pro vyplnění celé nádoby (stále je pozorována šířka min-šířka / max.

zarovnat obsah


Poznámka. Tato vlastnost nefunguje, když existuje pouze jeden řádek prvků flex.

Kontejner (ALIGN-CONTRACT: Flex-Start | Flex-End | Center | Space-mezi | Space-kolem | Stretch;)

  • flex-Start. - řádky jsou umístěny na začátku kontejneru;
  • flex-end. - čáry jsou umístěny na konci kontejneru;
  • centrum - Řádky jsou umístěny ve středu nádoby;
  • prostor mezi. - řádky jsou rozloženy rovnoměrně, první řádek je umístěn na začátku kontejneru a poslední linie na konci;
  • prostor-kolem. - Řádky jsou rozděleny rovnoměrně, s stejná vzdálenost mezi nimi;
  • stretch (výchozí) - Řádky jsou nataženy přes šířku pro obsazení zbývajícího prostoru;

Vlastnosti dceřiných společností (FLEX)

objednat


Ve výchozím nastavení jsou všechny prvky umístěny v původním pořadí. Nicméně, vlastnost objednávky spravuje pořadí, ve kterém jsou umístěny prvky uvnitř kontejneru.

Položka (Objednávka: ; }

flex-růst.


Majetek určuje schopnost zvýšit velikost prvku, v případě potřeby. To trvá bezrozměrnou hodnotu jako poměr, který určuje, jak by mělo množství volného místa uvnitř kontejneru obsadit prvek.

Pokud všechny prvky mají vlastnost Flex-pěst instalovat v 1, pak volný prostor uvnitř kontejneru bude rovnoměrně rozdělen mezi všechny prvky. Pokud je jedna z hodnotových prvků nastavena na 2, element bude dvakrát více než zbytek (alespoň zkuste).

Položka (Flex-Grow: ; / * výchozí 0 * /)

Není možné označit negativní čísla.

flex-základ.

Určuje velikost výchozího prvku před distribucí zbývajícího prostoru. Může být délka (20%, 5Rem atd.) Nebo klíčové slovo. Automatické klíčové slovo znamená "vypadat jako vlastnost mé šířky nebo výšky". Klíčové slovo obsahu znamená, že "velikost je založena na obsahu prvku" je klíčová slova není příliš dobře podporována, takže je obtížné zkontrolovat, a ještě obtížnější zjistit, co dělá jeho min-obsah, max- Obsah a fit-obsah.

Položka (Flex-base: | AUTO; / * výchozí auto * /)

Pokud je nastaveno na 0, pak nebude zohledněn další prostor kolem obsahu. Pokud instalujete auto, další prostor bude distribuován na základě hodnoty.

ohebný

To je snížení a. Druhé a třetí parametry (Flex-Shrink a Flex-Based) nejsou povinné. Výchozí hodnota je nastavena na hodnotu 0 1 Auto.

Položka (flex: Žádný |<"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }

zarovnat sebe.


Tato vlastnost umožňuje přepsat výchozí zarovnání (nebo zadané pomocí vlastnosti) pro jednotlivé flexy flex.

Podívejte se prosím na vysvětlení vlastností, abyste porozuměli dostupným hodnotám.

Položka (ALIGN-SELF: AUTO | FLEX-START | FLEX-END | CENTER | BASTELINE | Stretch;).

Upozorňujeme, že float, čisté a vertikální zarovnání nemají žádný vliv na element flex.

Příklady

Začněme s jednoduchý příkladRozhodující úkol, který se vyskytuje téměř každý den: dokonalé centrování. Pokud používáte FlexBox, nemůže být nic jednodušší.

Rodič (zobrazení: flex; výška: 300px;) .Child (šířka: 100px; výška: 100px; marže: auto;)

Záleží na tom, že okraj instalovaný v Auto v kontejneru FLEX absorbuje další prostor. Instalace vertikálního okraje v Auto v položce bude tedy položka dokonale vycentrována na obou osách.

Použijte některé další vlastnosti. Zvažte seznam 6 prvků, vše s pevnou velikostí v estetických termínech, ale mohou být automatické. Chceme, aby je rovnoměrně rozložili podél horizontální osy a tak, aby při změně velikosti prohlížeče bylo vše v pořádku (bez žádostí o média!).

Flex-kontejner (displej: Flex; Flex-tok: Řádkový zábal; Ostatní obsah: prostor-kolem;)

Připraven! Všechno ostatní je jen některé problémy s návrhem. Níže je příkladem na Codepen, nezapomeňte tam a zkuste změnit velikost oken, abyste zjistili, co se stane.

Zkusme něco jiného. Představte si, že máme navigaci na pravém okraji v horní části obrazovky, ale chceme, aby se nachází v centru na středně velkých obrazovkách a byl v jednom sloupci na malých obrazovkách. Stejně snadné jako koláč.

NAVIGACE (Displej: FLEX; FLEX-FLOW: Řádkový zábal; Ostatní obsah: Flex-End;) @Media All a (max-šířka: 800px) (.Navigation (odůvodnění (ospravedlnit obsah: prostor-kolem;)) @Media a (max-šířka: 500px) (.Navigace (směr FLEX: sloupec;))

Pokusme se udělat něco ještě lépe, hrát si s flexibilitou našich flexů Flex! A co tři-chone mobilní první rozložení s víčkem a zápatí na celou šířku obrazovky, a že neexistuje žádná závislost na počátečním pořadí prvků.

Wrapper (Display: Flex; Flex-flow: Řádkový zábal;) .HEADER, .MAIN, .NAV, .NAV, .NAV, .FOOTER (flex: 1 100%) @Media All a (min-šířka: 600px) (FLEX: 1 AUTO;)) @Media All a (min-šířka: 800px) (.main (oheň: 2 0px;) .aside-1 (pořadí: 1;) .MAIN (pořadí: 2;) .aside 2 (Objednávka: 3;) .Footer (pořadí: 4;))

Související reality

Chyby

FlexBox samozřejmě není bez chyb. Nejlepší sbírka, kterou jsem viděl, je reprezentována Filipem Philip Walton a Greg Whitworth "S FlexBugs. Jedná se o open source místo pro sledování všech chyb, takže si myslím, že je nejlepší nechat odkaz.

Nemovitost objednávky spravuje pořadí, ve kterém se podřízené prvky objevují uvnitř kontejneru FLEX. Ve výchozím nastavení jsou umístěny v pořadí, jak bylo zpočátku přidáno do kontejneru FLEX.

Hodnoty

.Flex-položka (Objednávka:<целое число>; }

prvky FLEX lze přepsat pomocí tohoto jednoduchého vlastnosti bez změny HTML kódu.

Výchozí hodnota: 0.

flex-růst.

Tato vlastnost nastavuje koeficient růstu, který určuje, jak daleko se flex element zvýší vzhledem ke zbývajícím Flex prvků v kontejneru FLEX, při distribuci pozitivního volného místa.

Hodnoty

.flex-položka (flex-růst:<число>; }

Pokud mají všechny flex-prvky stejnou hodnotu Flex-Grow, všechny prvky budou mít stejnou velikost v kontejneru.

Druhý element Flex má více prostoru vzhledem k velikosti jiných flexních prvků.

Výchozí hodnota: 0.

flex-Shrink.

flex-Shrink nastavuje kompresní koeficient, který určuje, jak daleko bude elegantní element lisován vzhledem ke zbývajícím ohybovým prvkům v kontejneru FLEX, během distribuce negativního volného místa.

Hodnoty

.flex-položka (Flex-Shrink:<число>; }

Ve výchozím nastavení mohou být všechny elementy Flex stlačeny, ale pokud nastavíme hodnotu Flex-Shrinkovu nulu (bez komprese), pak prvky uchovávají původní velikost.

Výchozí hodnota: 1.

Negativní čísla jsou nepřijatelná.

flex-základ.

Tato vlastnost má stejné významy jako vlastnosti šířky a výšky a definuje počáteční hlavní velikost elementu Flex, předtím, než je volný prostor distribuován v souladu s koeficienty.

Hodnoty

.flex-položka (FLEX-BASE: AUTO |<ширина>; }

flex-báze je specifikován pro čtvrtý Flex Element a diktuje jeho počáteční velikost.

Výchozí hodnota: Auto.

ohebný

Tato vlastnost je snížením vlastností flex-růst, Flex-Shrink a Flex-base. Oříznutí dalších hodnot lze také nainstalovat auto (1 1 Auto) a Žádný (0 0 Auto).

Hodnoty

.flex-položka (flex: žádný | Auto | [ ? || ]; }

Výchozí hodnota: 0 1 Auto.

W3C doporučuje používat zkrácenou vlastnost Flex namísto jednotlivých vlastností, protože flex Flex správně resetuje žádné nespecifikované komponenty pro typické použití.

zarovnat sebe.

Vlastní vlastnost ALIGN-SELF Umožňuje přepsat výchozí zarovnání (nebo hodnota zadaná prostřednictvím alignových položek) pro jednotlivé flexy flex. Chcete-li pochopit dostupné hodnoty, viz popis alignových položek pro kontejner FLEX.

Hodnoty

.Flex-položka (ALIGN-SELF: AUTO | AUTO | FLEX-START | CENTRESS CENTER | Baseline | Stretch;)

Pro třetí a čtvrté prvky ohybu je zarovnání přepsáno prostřednictvím vlastnictví zarovnání.

Modul FlexBox-Leuauuta. (Flexibilní box - "flexibilní blok", na tento moment W3C kandidát doporučení) Dává úkol, aby nabídl efektivnější způsob pokládání, vyrovnávání a distribuci volného místa mezi prvky v kontejneru, i když jejich velikost je neznámá a / nebo dynamická (tedy slovo "flexibilní").

Hlavní myšlenka flex-guarda v kontejneru, který je obdařen schopností změnit šířku / výšku (a pořadí) jeho prvků pro nejlepší plnění prostoru (ve většině případů - pro podporu všech typů displejů a velikosti obrazovek ). Kontejner FLEX táhne prvky pro vyplnění volného místa nebo je komprimuje, aby se zabránilo ohraničení.

Nejdůležitější, flexbox-leiaut nezávisí na směru, na rozdíl od obvyklých leantů (bloky, umístěných svisle a inline prvky jsou vodorovně). Zatímco obvyklé Leiaut je skvělé pro webové stránky, postrádá flexibilitu (žádný Canalybur) na podporu velkých nebo komplexních aplikací (zejména pokud jde o změnu orientace obrazovky, změna velikosti, protahování, komprese atd.).

Komentář: FlexBox-Leuuout je nejvhodnější pro kompozitní části aplikace a malých leuauterics, zatímco mřížka je více používána pro laéry velkým měřítkem.

Základy

Protože FlexBox je celý modul a ne jen jeden vlastnost, kombinuje mnoho vlastností. Některé z nich by měly být aplikovány na kontejner (rodičovský prvek, tzv. flex Container.), zatímco jiné vlastnosti platí pro podřízené prvky, nebo flex FLEX.

Pokud je obvyklá leuauout založena na pokynech blokových a inline prvků, je flex-Liaut založen na pokynech "proudění proudění". Podívejte se na toto schéma z specifikace vysvětlující základní myšlenku flex-Leuaitova.

Většina prvků bude distribuována buď spolu hlavní osa (z hlavní start. před hlavní konec.) nebo spolu příčná osa (z křížový start. před cross-end.).

  • hlavní osa - hlavní osa podél které jsou umístěny Flex Elements. Poznámka: Nemusí být nutně horizontální, to vše závisí na vlastnosti Směr Flex (viz níže).
  • hlavní start. | hlavní konec. - Pružné prvky jsou umístěny do kontejneru z hlavní startovací polohy k hlavnímu koncové poloze.
  • hlavní velikost. - Šířka nebo výška elementu Flex v závislosti na vybrané primární hodnotě. Hlavní hodnota může být buď šířka nebo výška prvku.
  • křížová osa. - příčná osa kolmá k hlavnímu. Jeho směr závisí na směru hlavní osy.
  • křížový start. | cross-end. - Pryč jsou naplněny prvky a jsou umístěny v nádobě z příčné startovací polohy k křížové poloze.
  • cross Size. - Šířka nebo výška flex elementu, v závislosti na velikosti rozměrů, se rovná této velikosti. Tato vlastnost se shoduje s šířkou nebo výškou položky v závislosti na velikosti rozměrů.

Vlastnosti

displej: Flex | Inline-flex;

Platí pro:

Určuje kontejner FLEX (inline nebo blok, v závislosti na vybrané hodnotě), připojuje kontext flex pro všechny jeho okamžité potomky.

Displej: Ostatní hodnoty | Flex | Inline-flex;

Mějte na paměti:

  • Sloupce CSS nefungují s kontejnerem FLEX
  • float, jasný a vertikální-sladit nefungují s prvky flex

směřování ohybu.

Platí pro: Kontejner rodičovského elementu.

Nastaví hlavní osu hlavní osy, čímž se určuje směr pro ohybové prvky umístěné v nádobě.

Flex-Směr: řádek | Row-reverzní Sloupec | Sloupec-reverzní.
  • Řádek (výchozí): zleva doprava pro LTR, vpravo doleva pro RTL;
  • Řádek-reverzní: vlevo dole pro LTR, zleva doprava pro RTL;
  • sloupec: podobný řádku, shora dolů;
  • sloupec-reverzní: podobný řádku-reverzní, dno nahoru.

flex-wrap.

Platí pro: Kontejner rodičovského elementu.

Určuje, zda je kontejner bude jednovrstvý nebo multi-line, stejně jako směr příčné osy určující směr, který bude umístěn nové čáry.

Flex-Wrap: Nowrap | Zábal | Obal.
  • nowrap (výchozí): jednorázový / zleva doprava pro LTR, vpravo doleva pro RTL;
  • wrap: Multi-line / zleva doprava pro LTR, vpravo doleva pro RTL;
  • wrap-reverzní: Multi-line / vpravo doleva pro LTR, zleva doprava pro RTL.

flex-tok.

Platí pro: Kontejner rodičovského elementu.

Jedná se o snížení vlastností směru směru flex a flex-flex, které dohromady definují hlavní a příčnou osu. Výchozí hodnota má hodnotu řádku Nowrap.

Flex-tok:<"flex-direction" > || <"flex-wrap" >

Platí pro: Kontejner rodičovského elementu.

Určuje vyrovnání vzhledem k hlavní ose. Pomáhá distribuovat zbývající volný prostor v případě, kdy prvky linky nejsou "protahování", nebo protáhnout, ale již dosáhly maximální velikosti. Také umožňuje určitý způsob, jak ovládat zarovnání prvků, když je řetězec vydán.

: Flex-Start | Flex-end | Centrum | Prostor mezi | Prostor-kolem.
  • flex-Start: Prvky jsou posunuty na začátek řádku;
  • flex-End: Prvky jsou posunuty do konce řetězce;
  • centrum: Prvky jsou vyrovnány ve středu linky;
  • prostor mezi: prvky jsou rozděleny rovnoměrně (první prvek na začátku linky, poslední - na konci);
  • prostor-kolem: prvky jsou rovnoměrně distribuovány se stejnou vzdáleností mezi sebou a hranic řetězce.

Platí pro: Kontejner rodičovského elementu.

Definuje výchozí chování prvků Flex jsou relativní k příčné ose na aktuálním řádku. Zvažte tuto verzi ospravedlnit-obsah pro příčnou osu (kolmo k hlavnímu).

: Flex-Start | Flex-end | Centrum | Základní linie | Protáhnout se.
  • flex-Start: Cross-Start hranice pro položky je umístěna na křížové poloze;
  • flex-End: Cross-end ohraničení pro předměty je umístěn na křížové poloze;
  • centrum: Prvky jsou vyrovnány ve středu příčné osy;
  • základní linie: Prvky jsou sladěny pro jejich základní linii;
  • stretch (výchozí): Prvky jsou nataženy, plnění nádoby (s přihlédnutím k min-šířce / max-šířce).

Platí pro: Kontejner rodičovského elementu.

Zarovnává linky FLEX kontejneru v přítomnosti volného místa na příčné ose, stejně jako odůvodnění obsahu na hlavní ose.

Komentář: Tato vlastnost nefunguje s jedním řádkem FlexBox.

: Flex-Start | Flex-end | Centrum | Prostor mezi | Prostor-kolem Protáhnout se.
  • flex-Start: Linky jsou zarovnány vzhledem k počátečnímu kontejneru;
  • flex-end: Řádky jsou vyrovnány vzhledem ke konci kontejneru;
  • centrum: Řádky jsou v centru kontejneru zarovnány;
  • prostor - mezi: řádky jsou rozloženy rovnoměrně (první řádek na začátku řádku, druhý je na konci);
  • prostor-kolem: řádky jsou rovnoměrně distribuovány se stejnou vzdáleností;
  • stretch (výchozí): Řádky jsou nataženy, vyplnění volného místa.

objednat

Platí pro:

Ve výchozím nastavení jsou Flex Elements umístěny v původním pořadí. Vlastnost objednávky však může ovládat pořadí jejich umístění v kontejneru.

Objednat:<celé číslo\u003e

flex-růst.

Platí pro: Dcera prvek / flex element.

Určuje, zda je v případě potřeby schopnost "růst" schopnost "růst". Vezme indexovanou hodnotu, která slouží jako poměr. Určuje, jaká frakce volného místa uvnitř kontejneru může prvek zabírat.

Pokud všechny položky mají vlastnost Flex-růst jako 1, pak každý potomek obdrží stejnou velikost uvnitř kontejneru. Pokud nastavíte jeden z potomků na 2, pak bude trvat dvakrát více místa než ostatní.

Flex-růst:<Číslo \u003e. (výchozí 0)

flex-Shrink.

Platí pro: Dcera prvek / flex element.

Určuje pro flex element schopnost v případě potřeby komprimovat.

Flex-Shrink: (Výchozí 1)

Negativní čísla nejsou přijata.

flex-základ.

Platí pro: Dcera prvek / flex element.

Určuje výchozí velikost prvku před distribucí prostoru v kontejneru.

Flex-base:<délka\u003e. | Auto (výchozí auto)

ohebný

Platí pro: Dcera prvek / flex element.

Jedná se o snížení flex-růst, Flex-Shrink a Flex-báze. Druhé a třetí parametry (Flex-Shrink, Flex-Based) jsou volitelné. Výchozí hodnota je 0 1 Auto.

Flex: Žádný | [<"flex-grow" > <"flex-shrink" >? || <"flex-basis" > ]

zarovnat sebe.

Platí pro: Dcera prvek / flex element.

Umožňuje přepsat výchozí zarovnání nebo v souladu s alignem, pro jednotlivé flexy flex.

Viz popis vlastnosti ALIGN-BOLACE pro lepší pochopení dostupných hodnot.

ALIGN-JOW: AUTO | Flex-Start | Flex-end | Centrum | Základní linie | Protáhnout se.

Příklady

Začněme s velmi jednoduchým příkladem, který se vyskytuje téměř každý den: zarovnání přesně ve středu. Pokud používáte flexbox, nic není snadnější.

.Parent (zobrazení: flex; výška: 300px; / * Nebo cokoliv * / ) .Child (šířka: 100px; / * Nebo cokoliv * / Výška: 100px; / * Nebo cokoliv * / Marže: Auto; / * Magie! * /)

Tento příklad je založen na skutečnosti, že okraj v kontejneru FLEX specifikovaná jako Auto absorbuje zbytečný prostor, takže referenční úloha tedy řídí prvek přesně ve středu obou os.

Nyní pojďme používat některé vlastnosti. Představte sadu 6 prvků pevné velikosti (pro krásu), ale s možností změnit velikost kontejneru. Chceme je rovnoměrně rozdělit vodorovně, takže když je okno prohlížeče změněno, všechno vypadalo dobře (bez @ media-rekordér!).

kontejnerová kontejner ( / * Nejprve vytvořte flexibilní kontext * / Displej: Flex; / * Nyní definujeme směr proudění a zda chceme, aby byly prvky přeneseny do nového řetězce * Nezapomeňte, že je to stejné jako: * směr FLEX: řádek; * Flex-Wrap: Wrap; * / Flex-tok: Řádkový zábal; / * Nyní definujeme, jak prostor * / : Vesmírný; )

Připraven. Všechno ostatní je otázkou registrace. Níže je umístěn Codepen, který tento příklad ukazuje. Ujistěte se, že se pokusíte protáhnout / mačkat okno prohlížeče a zjistit, co se stane.

Podívejte se na toto pero!

Zkusme něco jiného. Představte si, že potřebujeme navigaci v pravém okraji na pravém okraji na samém vrcholu našich stránek, ale chceme, aby se ve středu pro středně velké obrazovky a obrátil se na jeden sloupec na malé. Všechno je dost jednoduché.

/ * Velké obrazovky * / .Navigation (Display: Flex; Flex-Flow: Řádkový zábal; / * Posunutí prvků do konce čáry na hlavní ose * / : Flex-end; ) @Media all a (max-šířka: 800px) (.Navigation ( / * Pro středně velké obrazovky, zarovnáme navigaci ve středu, rovnoměrně rozdělující volný prostor mezi prvky * / : Vesmírný; )) / * Malé obrazovky * / @Media all a (max-šířka: 500px) (.Navigation ( / * Na malých obrazovkách namísto řetězce máme prvky ve sloupci * / Flex-Směr: sloupec; )) Podívejte se na toto pero!

Zkusme něco lepšího a hrát si s flexibilitou flexibilních prvků! Jak se cítím orientován mobilní zařízení Tří-chone rozložení s plnou čepičkou a suterénem? A další pořadí umístění.

.Wrapper (Display: Flex; Flex-flow: Řádkový zábal;) / * Určujeme všechny prvky 100% šířky * / .HEADER, .MAIN, .NAV, .ASIDE, .FOOTER (flex: 1 100%;) / * V tomto případě se spoléháme na původní objednávku pro orientaci na * mobilní zařízení: * 1. Záhlaví * 2. NAV * 3. Hlavní * 4. Kromě * 5. Zápatí * / / * Středně velké obrazovky * / @Media all a (min-šířka: 600px) ( / * Oba SageBar jsou umístěny v jednom řádku * / .aside (flex: 1 auto;)) / * Velké obrazovky * / @Media all a (min-šířka: 800px) ( / * Změneme umístění prvků. * / .main (flex: 2 0px;) .aside-1 (pořadí: 1;) .MAIN (pořadí: 2;) .aside-2 (pořadí: 3;) .footer (pořadí: 4;))

Pokud řeknete krátké, pak rozložení s Flexbox nám dává jednoduché řešení jednou obtížných úkolů. Například, když potřebujete zarovnat vertikální prvek, nebo stiskněte suterén ke spodní části obrazovky, nebo jednoduše vložte několik bloků do jednoho řádku, aby zabírají vše volné místo. Tyto úkoly jsou vyřešeny bez ohybu. Tyto řešení jsou však zpravidla podobné "berlí" - recepce pro použití CSS není určeno. Zatímco s FlexBoxem jsou tyto úkoly řešeny přesně tak, jak je myšlenkem modelu flex.

CSS Flexibilní box rozložení modul (modul CSS pro moduly s flexibilními bloky), krátký flexbox, vytvořený pro odstranění chyb při vytváření různých struktur HTML, včetně upravených pod různými šířkami a výškou, a vytvořte rozložení logického a jednoduchého. A logický přístup, zpravidla pracuje v neočekávaných místech, kde výsledek nebyl zkontrolován - naše logika!

FlexBox umožňuje elegantně ovládat nejrůznější parametry prvků uvnitř nádoby: směr, řád, šířka, výška, vyrovnání podél a napříč, distribuce volného prostoru, protahování a stlačení prvků.

Základní znalosti

FlexBox se skládá z kontejneru a jeho dětských prvků (položek) (flexibilní prvky).

Chcete-li zahrnout FlexBox, libovolný HTML Element. Dostatečné pro přiřazení displeje vlastnosti CSS: Flex; nebo zobrazení: inline-flex; .

1
2

Po zapnutí vlastností FLEX jsou uvnitř nádoby vytvořeny dvě osy: Hlavní a příčná (kolmá (⊥), křížová osa). Všechny vnořené prvky (první úroveň) jsou vybudovány na hlavní ose. Ve výchozím nastavení je hlavní osa vodorovná a má směr zleva doprava (→) a křížová osa, v tomto pořadí, vertikální a je směrována shora dolů (↓).

Hlavní a křížová osa lze měnit v místech, pak se prvky budou umístěny nahoře (↓) a když přestanou montáže do výšky, budou se pohybovat zleva doprava (→) - to znamená, že osy jednoduše změnily v místech . Začátek a konec umístění prvků se zároveň nemění - pouze směry (osa)! Proto si musíte představit osu uvnitř kontejneru. Nicméně, to není nutné myslet si, že tam jsou některé "fyzické" osy a oni něco ovlivňují. Osa je zde pouze směr pohybu prvků uvnitř nádoby. Například, pokud jsme indikovali vyrovnání prvků ve středu hlavní osy a pak změnil směr této hlavní osy, změní se a zarovnání: Prvky byly ve středu vodorovně a oceli ve středově vertikálně. . Viz příklad.

Dalším důležitým znakem Flex Box je přítomnost řady v příčném směru. Chcete-li pochopit, o čem mluvíme, pojme si představit, že existuje hlavní horizontální osa, mnoho prvků a ne "stoupání" do kontejneru, takže jdou do jiné řady. Ty. Kontejner vypadá takto: kontejner, uvnitř IT dvě řady, v každé řadě pro několik prvků. Prezentován? Nezapomeňte, že můžeme sladit vertikálně nejen prvky, ale také řádky! Jak funguje dobře viditelný v příkladu nemovitosti. A tak to schematicky vypadá:

CSS vlastnostiKterá může ovlivnit stavební stavba modelu: plovák, čirý, vertikální zarovnání, sloupce nefungují v aplikaci Flex Design. Používá jiný model pro budování rozložení a tyto vlastnosti CSS jsou jednoduše ignorovány.

CSS Vlastnosti FlexBox.

FlexBox obsahuje různá pravidla CSS pro řízení celého pružného návrhu. Někteří je třeba aplikovat na hlavní kontejner, zatímco jiní k prvkům této nádoby.

Pro kontejner

Zobrazit:

Zahrnuje vlastnost Flex pro položku. Podle této nemovitosti, prvek investovaný do ní spadá: jsou postiženi pouze potomci první úrovně - stanou se prvky kontejneru Flex.

  • ohebný - Prvek je natažen na celou šířku a má svůj plný prostor mezi okolními bloky. Veslování probíhá na začátku a na konci bloku.
  • inline-flex. - Prvek je zefektivněn jinými prvky. V tomto případě je jeho vnitřní část formátována jako blokový prvek a samotný prvek je jako vestavěný.

flex a inline-Flex se liší ve skutečnosti, že různě komunikovat s okolními prvky, jako je zobrazení: blok a displej: inline-blok.

Flex-Směr:

Mění směr hlavní osy kontejneru. Příčná osa odpovídajícím způsobem se mění.

  • Řádek (výchozí) - Směr prvků zleva doprava (→)
  • sloupec. - Směr prvků shora dolů (↓)
  • Řádek. - Směr prvků vpravo vlevo (←)
  • sloupec-reverzní. - Směr prvků zdola nahoru ()
Flex-wrap:

Řídí převod prvků nekompanování kontejneru.

  • nowrap (výchozí) - Vnořené prvky jsou umístěny v jednom řádku (během směru \u003d řádek) nebo v jednom sloupci (během směru \u003d sloupec), bez ohledu na to, zda jsou umístěny v nádobě nebo ne.
  • zabalit. - Zahrnuje přenos položek do dalšího řádku, pokud nejsou umístěny v kontejneru. To zahrnuje pohyb prvků na příčné ose.
  • obal. - Také, že zabalí pouze převod, nebude dolů, a nahoru (v opačném směru).
Flex-tok: Směrový zábal

Kombinuje ovladače směřovače a Flex-Wrap. Často se používají společně, takže vlastnost Flex-tok byl vytvořen pro psaní menšího kódu.

flex-tok přijímá hodnoty obou vlastností oddělených prostorem. Nebo můžete zadat jednu hodnotu jakéhokoliv vlastnosti.

/ * Pouze směr FLEX * / FLEX-FLOW: Řada; Flex-tok: řádek; Flex-tok: sloupec; Flex-tok: sloupec-reverzní; / * Pouze flex-wrap * / flex-tok: Nowrap; Flex-tok: obal; Flex-tok: obal; / * Okamžitě oba významy: směr Flex a Flex-Wrap * / Flex-tok: řádek Nowrap; Flex-tok: Sloupový zábal; Flex-tok: sloupec-reverzní wrap-reverzní; Ostatní obsah:

Zarovná prvky na hlavní ose: pokud směr \u003d řádek, pak vodorovně a pokud směr \u003d sloupec, pak svisle.

  • flex-Start (výchozí) - Prvky půjdou od začátku (na konci mohou být místo).
  • flex-end. - Prvky jsou vyrovnány do konce (místo zůstane na začátku)
  • centrum - ve středu (místo zůstane vlevo a vpravo)
  • prostor mezi. - extrémní prvky jsou stisknuty k okrajům (místo mezi prvky je rozděleno rovnoměrně)
  • prostor-kolem. - Volný prostor je rovnoměrně rozložen mezi prvky (extrémní prvky nejsou stisknuty k okrajům). Prostor mezi okrajem kontejneru a extrémními prvky bude dvakrát menší než prostor mezi prvky uprostřed řádku.
  • space-rovnoměrně
Zarovnat obsah:

Zarovnává řady, ve kterých jsou umístěny prvky na příčné ose. Stejný jako ospravedlnění pouze pro opačnou osu.

Poznámka: Práce, když je nejméně 2 řádky, tj. Pokud je jen 1 řádek se nic nestane.

Ty. Je-li flex-Směr: řádek, tato vlastnost bude sladit neviditelné řádky svisle | Je důležité poznamenat, že nadmořská výška bloku musí být nastavena a měla by být větší než výška série, jinak se řady sami protáhnout kontejner a jejich vyrovnání ztrácí svůj význam, protože mezi nimi neexistuje žádný volný prostor. . Ale když směr FLEX: sloupec, pak řádky pohybují vodorovně → a šířka kontejneru je téměř vždy větší než šířka řady a vyrovnání řádků okamžitě získává význam ...

  • stretch (výchozí) - Řádky Stretch vyplněte řetězec úplně
  • flex-Start. - Řádky jsou seskupeny v horní části kontejneru (na konci může být místo).
  • flex-end. - Řádky jsou seskupeny v dolní části kontejneru (místo zůstane na začátku)
  • centrum - Řádky jsou seskupeny do středu kontejneru (místo zůstane na okrajích)
  • prostor mezi. - extrémní řádky jsou lisovány směrem k okrajům (místo mezi řádky je rovnoměrně rozloženo)
  • prostor-kolem. - Volný prostor je rovnoměrně rozložen mezi řádky (extrémní prvky nejsou stisknuty směrem k okrajům). Prostor mezi okrajem kontejneru a extrémními prvky bude dvakrát menší než prostor mezi prvky uprostřed řádku.
  • space-rovnoměrně - Také, že prostor-kolem, pouze vzdálenost v extrémních prvcích k okrajům kontejneru je stejná jako mezi prvky.
Zarovnat položky:

Vyrovnává prvky na příčné ose uvnitř řádku (neviditelná čára). Ty. Samotné řádky jsou vyrovnány přes alignový obsah a prvky v těchto řadách (řetězce) prostřednictvím alignových předmětů a to vše na příčné ose. Neexistuje žádná taková separace od hlavní osy, neexistují žádné koncepty série a prvků jsou zarovnány prostřednictvím ospravedlnění obsahu.

  • stretch (výchozí) - Prvky Stretch plnění řetězce úplně
  • flex-Start. - Prvky jsou stisknuty na začátek řádku
  • flex-end. - Prvky jsou stisknuty proti konci řady
  • centrum - Prvky jsou vyrovnávání ve středu řádku
  • základní linie - prvky jsou zarovnány na základní text

Pro kontejnerové prvky

Flex-růst:

Určuje rostoucí faktor prvku v přítomnosti volného místa v kontejneru. Výchozí fréza flex: 0 tj. Ne prvky by se měly zvýšit a vyplnit volný prostor v kontejneru.

Výchozí flex-růst: 0

  • Pokud všechny prvky označují Flex-Grow: 1, pak se všechny natahují stejně a vyplňte vše volné místo v kontejneru.
  • Pokud jeden z prvků indikuje flex-růst: 1, pak vyplní všechny volné místo v kontejneru a zarovnání prostřednictvím odůvodnění-obsah práce nebude schopna pracovat: není nic takového pro sladění volného prostoru ...
  • Při ohybu: 1. Pokud jeden z nich má flex-růst: 2, bude 2krát více než všichni ostatní
  • Pokud všechny ohybové bloky uvnitř kontejneru FLEX mají flex-růst: 3, pak budou stejné velikosti
  • S flex-růst: 3. Pokud jeden z nich má flexibilní: 12, bude 4krát více než všichni ostatní

Jak to funguje? Předpokládejme, že nádoba má šířku 500px a obsahuje dva prvky, z nichž každá má základní šířku 100px. Proto zůstávají 300 volných pixelů v kontejneru. Nyní, pokud zadáte Flex-Grow: 2 první prvek; a druhý flex-růst: 1; Bloky budou mít celou dostupnou šířku kontejneru a šířka prvního bloku bude 300px a druhý 200px. To je vysvětleno tím, že dostupné volné místo 300px v kontejneru byl rozdělen mezi prvky v poměru 2: 1, + 200px z první a + 100px sekundy.

Poznámka: V hodnotě můžete určit frakční čísla, například: 0,5 - Flex-růst: 0,5

Flex-Shrink:

Určuje faktor redukce prvku. Funkce je opačný flex-růst a určuje, jak musí být prvek stlačován, pokud není v kontejneru žádný volný prostor. Ty. Tato nemovitost začíná pracovat, když součet velikostí všech prvků je větší než velikost kontejneru.

Výchozí Flex-Shrink: 1

Předpokládejme, že nádoba má šířku 600px a obsahuje dva prvky, z nichž každá má šířku 300px - flex-bázi: 300px; . Ty. Dva prvky zcela vyplňují kontejner. První prvek indikuje Flex-Shrink: 2; a druhý flex-smršťovací: 1; . Nyní snižuje šířku kontejneru na 300px, tj. Prvky musí být s 300px umístěno uvnitř nádoby. Budou komprimovány v poměru 2: 1, tj. První jednotka se připojí k 200px a druhý až 100px a nové rozměry prvků bude 100Px a 200px.

Poznámka: V hodnotě můžete zadat frakční čísla, například: 0.5 - Flex-Shrink: 0.5

Flex-based:

Nastaví základní šířku prvku - šířka před vypočítáním zbývajících podmínek ovlivňujících šířku prvku. Hodnota může být specifikována v PX, EM, REM,%, VW, VH atd. Závěrečná šířka bude záviset na šířce základny a hodnotám flex-růst, Flex-Shrink a obsah uvnitř bloku. S AUTO, prvek přijímá základní šířku vzhledem k obsahu uvnitř IT.

Výchozí hodnota: Auto.

Někdy je lepší instalovat šířku prvku pevně přes obvyklou vlastnost šířky. Například šířka: 50%; To bude znamenat, že prvek uvnitř kontejneru bude přesně 50%, nicméně bude fungovat vlastnosti Flex-Grow a Flex-Shrink. To může být nutné, když je prvek natažen obsahem uvnitř It, více specifikovanější v flex-bázi. Příklad.

flex-base bude "tvrdý", pokud resetuje tahová a komprese: flex-základ: 200px; Flex-růst: 0; Flex-Shrink: 0; . To vše může být napsáno jako flex: 0 0 200px; .

Flex: (růst smrštění)

Krátký záznam tří vlastností: Flex-růst Flex-Shrink-base.

Výchozí hodnota: Flex: 0 1 Auto

Můžete však určit jeden a dva hodnoty:

Flex: Žádný; / * 0 0 AUTO * / / * číslo * / FLEX: 2; / * Flex-růst (flex-base se jedná o 0) * / / * ne číslo * / flex: 10em; / * FLEX-BASE: 10EM * / FLEX: 30px; / * FLEX-BASE: 30PX * / FLEX: AUTO; / * FLEX-BASE: AUTO * / FLEX: Obsah; / * FLEX-BASE: Obsah * / Flex: 1 30px; / * Flex-růst a flex-based * / flex: 2 2; / * Flex-Grow a Flex-Shrink (FLEX-BASE BASE 0) * / FLEX: 2 2 10%; / * Flex-růst a Flex-Shrink a Flex-Based * / ALIGN-Já:

Umožňuje změnit vlastnost ALIGN-Položky, pouze pro samostatnou položku.

Výchozí: Z kontejneru ALIGN-APTIONS

  • protáhnout se. - Prvek je natažený plnění řetězce zcela
  • flex-Start. - Prvek je stisknuto na začátek řádku
  • flex-end. - Prvek je stisknuto ke konci řetězce
  • centrum - Prvek je vyrovnán ve středu linky
  • základní linie - Prvek je zarovnán základní linií textu

Objednat:

Umožňuje změnit objednávku (pozici, polohu) prvku v obecném řádku.

Výchozí hodnota: Objednávka: 0

Ve výchozím nastavení mají prvky objednávku: 0 a uvedeny v pořadí jejich vzhledu v kódu HTML a směr řádku. Ale pokud změníte hodnotu vlastnosti objednávky, budou položky vybudovány v pořadí hodnot: -1 0 1 2 3. Pokud například jeden z položek označuje objednávku: 1, pak nejprve jdete na celou nulu, a pak prvek z 1.

Takže je možné například první prvek, který se zapne do konce, a zároveň se mění směr pohybu jiných prvků nebo HTML kódu.

Poznámky

Jaký je rozdíl mezi flex-základem šířky?

Pod důležitými rozdíly mezi flex-bázem a šířkou / výškou:

    flex-based funguje pouze pro hlavní osu. To znamená, že při směru flex: řádek Flex-base řídí šířku (šířku) a při směru ohnutí: Ovládá sloupec výšku (výška). .

    flex-base se vztahuje pouze na Flex Elements. Pokud tedy vypnete flex v kontejneru, tato vlastnost nebude mít efekt.

    Absolutní prvky kontejneru se neúčastňují design flex designu ... a proto flex-base nemá vliv na prvky kontejneru FLEX, pokud jsou naprosto umístěny: absolutní. Budou muset specifikovat šířku / výšku.

  • Při použití hodnot Flex Vlastnosti 3 (Flex-Grow / Flex-Shrink / Flex-Flox-Flox), můžete kombinovat a psát krátký a šířka růst nebo zmenšit, musíte psát odděleně. Například: Flex: 0 0 50% \u003d\u003d Šířka: 50%; Flex-Shrink: 0; . Někdy je to jen nepohodlné.

Pokud je to možné, stále dávají preferenci flex-bázi. Použijte šířku pouze v případě, že flex-base není vhodný.

Rozdíly flex-základ z šířky - bug nebo fich?

Obsah uvnitř elementu FLEX ji řepá a nemůže jít mimo své limity. Pokud však nastavíte šířku přes šířku nebo maximální šířku, a ne flexibilní, prvek uvnitř kontejneru FLEX bude moci překračovat tento kontejner (někdy potřebujete toto chování). Příklad:

Příklady rozložení flex

V příkladech, kdekoli používá předpony pro křížový prohlížeč. Udělal jsem to pro pohodlné čtení CSS. Proto viz nejnovější příklady. verze chrome. nebo firefox.

# 1 Jednoduchý příklad s vertikální vyrovnání a horizontální

Začněme s nejjednodušším příkladem - vyrovnání svisle a vodorovně současně a v jakékoliv výšce bloku, dokonce gumy.

Text ve středu

Nebo tak, bez bloku uvnitř:

Text ve středu

# 1.2 separace (mezera) mezi prvky bloku flex

Chcete-li umístit prvky kontejneru na okrajích a libovolně vyberte prvek, po kterém bude přestávka, musíte použít vlastnost Left: Auto nebo Margin-vpravo: Auto.

# 2 adaptivní menu na flex

Proveďte nabídku v horní části stránky. Na širokém obrazovce musí být správné. V průměru, v souladu se středem. A na malém prvku by měl být na novém řádku.

# 3 adaptivní 3 sloupce

Tento příklad ukazuje, jak rychle a pohodlně provádět 3 sloupce, které při zúžení se změní na 2 a pak v 1.

Upozorňujeme, že to lze provést bez použití pravidel médií, vše na flex.

1
2
3
4
5
6

Přejít na jsfiddle.net a změnit šířku sekce "výsledku"

# 4 Adaptivní bloky na flex

Předpokládejme, že musíme stáhnout 3 bloky, jeden velký a dva malé. Současně je nutné, aby bloky zapadly do malých obrazovek. Udělat:

1
2
3

Přejít na jsfiddle.net a změnit šířku sekce "výsledku"

# 5 galerie na flex a přechod

Tento příklad ukazuje, jak rychle můžete udělat hezký okordeon s obrázky na Flex. Věnujte pozornost transformačnímu majetku pro flex.

# 6 Flex v Flex (jen příklad)

Úkol pružný blok. Takže začátek textu v každém bloku byl na stejné vodorovné čáře. Ty. S šířkou šířky, bloky rostou ve výšce. Je nutné, aby obrázek je nahoře, tlačítko je vždy v přízemí a text ve středu začal na jedné vodorovné čáře ...

Pro vyřešení tohoto problému se bloky samotné jsou nataženy pomocí FLEX a je instalována maximální možná šířka. Každá vnitřní jednotka je také flex s konstrukcí, sloupec směru flex: sloupec; a prvek ve středu (kde je text umístěn) je natažený flex-růst: 1; Chcete-li vyplnit všechny volné místo, výsledek je dosažen - text začal jedním řádkem ...

Další příklady

Podpora prohlížeče - 98,3%

Samozřejmě neexistuje úplná podpora, ale všechny moderní prohlížeče Podpora návrhů FlexBoxu. Pro některé potřebujete ještě určit předpony. Pro skutečný obraz, podívejte se do Caniuse.com a zjistěte, že 96,3% použitého prohlížeče dnes bude fungovat bez předpon, s předponami 98,3%. To je skvělý indikátor, aby se odvážně použil flexbox.

Chcete-li vědět, jaké předpony jsou dnes relevantní (červen 2019), uvádím příklad všech pravidel flex nezbytné předpony:

/ * Kontejner * / .Flex (zobrazení: -webkit-box; zobrazení: -ms-flexbox; zobrazení: flex; zobrazení: -webkit-inline-box; displej: -MS-inline-flexbox; displej: inline-flex; -Webkit-box-orient: vertikální; -webkit-box směr: normální; -MS-otočná směr: sloupec; směru flex: sloupec; -ms-Flex-Wrap: Wrap; Flex-Flex-Wrap: Balno; -Flex-tok: Sloupový zábal; Flex-flow: Sloupový zábal; -webkit-box-pack: ospravedlnění; Distribuce; \u200b\u200bZarovnat obsah: prostor-kolem;) / * Prvky * / .flex-Položka (-webKit-box-Flex: 1; Negativní: 2; Flex-Shrink: 2; -MS-Flex-Preferovane-Velikost: 100px; Flex-based: 100px; -ms-Flex: 1 2 100px; FLEX: 1 2 100PX; -MS-FLEX-Položka : CENTER; ALIGN-SELF: CENTER; -WebKit-box-order-Skupina: 3; -MS-flex-pořadí: 2; Objednávka: 2;)

Je lepší, pokud vlastnosti s předpony půjdou na původní vlastnost.
Dnes neexistují žádné zbytečné (podle caniuse) předpony (podle caniuse), ale obecně prefixy více.

Chrom. Safari. Firefox. Opera. TJ. Android. ios.
20- (starý) 3.1+ (starý) 2-21 (starý) 10 (pinster) 2.1+ (starý) 3.2+ (starý)
21+ (nový) 6.1+ (nový) 22+ (nový) 12.1+ (nový) 11+ (nový) 4.4+ (nový) 7.1+ (nové)
  • (New) - Nová syntaxe: Displej: Flex; .
  • (Tweener) - Stará neoficiální syntaxe 2011: Displej: FlexBox; .
  • (Starý) - Stará syntaxe 2009: Displej: Box;

Video

No, nezapomeňte na video, někdy je to také zajímavé a srozumitelné. Zde je pár populárních:

Užitečné odkazy pro flex

    flexBoxFrogGy.com - FlexBox vzdělávací hra.

    Flexplorer je návrhář kódu vizuálního flexa.