Css fleksibilno podmetanje između stavki. Poravnavanje kutija sa css-om pomoću flex kontejnera

CSS flexbox (Modul fleksibilnog rasporeda kutija)- modul fleksibilnog rasporeda kontejnera - način je raspoređivanja elemenata zasnovan na ideji osi.

Flexbox se sastoji od flex kontejner i flex predmeti... Fleksibilne stavke mogu se poredati u red ili stupac, a preostali slobodni prostor između njih se raspoređuje na razne načine.

Modul flexbox omogućava sljedeće zadatke:

  • Rasporedite stavke u jednom od četiri smjera: slijeva udesno, zdesna ulijevo, odozgo prema dolje ili odozdo prema gore.
  • Zamijenite redoslijed prikaza stavki.
  • Automatski promijenite veličinu elemenata kako bi se uklopili u raspoloživi prostor.
  • Riješite problem s vodoravnim i okomitim centriranjem.
  • Zamotajte predmete unutar spremnika bez prelijevanja.
  • Stvorite stupce jednake visine.
  • Stvori prikvačeno na dnu stranice.

Flexbox se bavi specifičnim potrebama kreiranja jednodimenzionalnih rasporeda, kao što je navigacijska traka, jer se flex elementi mogu postaviti samo duž jedne osi.

Popis trenutnih problema s modulima i rješenja za više pregledača potražite u članku Philipa Waltona.

Šta je flexbox

Podrška pregledača

IE: 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
Android pretraživač: 4.4, 4.1 -webkit-
Chrome za Android: 44

1. Osnovni pojmovi

Pirinač. 1. Model flexbox

Određeni skup pojmova koristi se za opisivanje Flexbox modula. Vrijednost fleks protoka i način pisanja definiraju kako ovi pojmovi odgovaraju fizičkim smjerovima: gore / desno / dolje / lijevo, osi: vertikalno / vodoravno i dimenzije: širina / visina.

Glavna os- os duž koje su položeni elementi savijanja. Prostire se u glavnoj dimenziji.

Glavni početak i glavni kraj- linije koje definiraju početnu i krajnju stranu fleks spremnika, u odnosu na koje su položeni elementi savijanja (počevši od glavnog početka prema glavnom kraju).

Glavna veličina) - širina ili visina savitljivog spremnika ili savitljivih predmeta, ovisno o tome koja je od osnovnih dimenzija, određuje osnovnu veličinu savitljivog spremnika ili savitljivog predmeta.

Poprečna os- os okomita na glavnu os. Prostire se bočno.

Poprečni početak i poprečni kraj- Linije koje definiraju početnu i krajnju stranu poprečne osi oko koje su položeni elementi savijanja.

Cross size- širina ili visina savitljivog spremnika ili savitljivih predmeta, koja god da je u poprečnoj dimenziji, njihova je poprečna dimenzija.


Pirinač. 2. Način reda i stupca

2. Flex kontejner

Flex spremnik postavlja novi kontekst fleksibilnog formatiranja za svoj sadržaj. Flex spremnik nije blok spremnik, tako da CSS svojstva poput plutajućeg, prozirnog, vertikalnog poravnanja ne rade za podređene elemente. Također, na flex kontejner ne utječu svojstva column- *, koja stvaraju stupce u tekstu i pseudo-elemente :: first-line i :: first-letter.

Model izgleda flexbox-a vezan je za određenu vrijednost u svojstvu display CSS roditeljskog html elementa koji sadrži podređene okvire. Da biste upravljali elementima pomoću ovog modela, morate postaviti svojstvo prikaza na sljedeći način:

Flex-kontejner (/ * generira fleks kontejner na nivou bloka * / display: -webkit-flex; display: flex;). Flex-container (/ * generira flex kontejner na nivou reda * / display: -webkit-inline- flex; prikaz: inline-flex;)

Nakon postavljanja ovih vrijednosti svojstava, svako dijete automatski postaje fleksibilna stavka, poredajući se u jedan red (duž glavne osi). Međutim, djeca s blokovima i ugradnjom ponašaju se isto, tj. širina blokova jednaka je širini njihovog sadržaja, uzimajući u obzir obloge i granice elementa.


Pirinač. 3. Poravnavanje predmeta u modelu flexbox

Ako roditeljski blok sadrži tekst ili slike bez omota, oni postaju anonimni flex elementi. Tekst je poravnat s gornjim rubom bloka spremnika, a visina slike postaje jednaka visini bloka, tj. deformiran je.

3. Flex predmeti

Flex stavke su blokovi koji predstavljaju sadržaj flex kontejnera u toku. Kontejner flex postavlja novi kontekst formatiranja za svoj sadržaj, koji pruža sljedeće značajke:

  • Za fleksne stavke zaključana je njihova vrijednost svojstva prikaza. Prikaz vrijednosti: inline-block; i prikaz: tablica-ćelija; izračunato u prikazu: blok; ...
  • Razmak između stavki nestaje: on ne postaje vlastiti flex element, čak i ako je tekst među stavkama umotan u anonimnu flex stavku. Sadržaj anonimne fleks stavke ne može se oblikovati kao vlastiti, ali će ih naslijediti (poput postavki fonta) iz fleks spremnika.
  • Apsolutno postavljena fleks stavka ne sudjeluje u izgledu fleks rasporeda.
  • Polja margine susjednih flex stavki se ne urušavaju.
  • Procenti margine i popunjavanja izračunavaju se iz unutrašnje veličine bloka koji sadrži.
  • marža: auto; proširiti, upijajući dodatni prostor u odgovarajućoj dimenziji. Pomoću njih se mogu poravnati ili proširiti susjedni elementi savijanja.
  • Podrazumijevana automatska minimalna veličina za flex stavke je minimalna veličina njegovog sadržaja, to jest, min-width: auto; ... Za pomicanje spremnika, minimalna automatska veličina je obično nula.

4. Prikažite redoslijed fleksibilnih predmeta i orijentaciju

Sadržaj flex spremnika može se rasporediti u bilo kojem smjeru i bilo kojim redoslijedom (preuređivanje flex stavki unutar spremnika utječe samo na vizualno prikazivanje).

4.1. Pravac glavne osi: flex-pravac

Svojstvo je specifično za flex spremnik. Kontrolira pravac glavne osi duž koje se savijaju stavke prema trenutnom načinu pisanja. Nije naslijeđeno.

flex-direction
Vrijednosti:
red Zadana postavka je slijeva nadesno (u rtl, zdesna nalijevo). Flex predmeti raspoređeni su u liniju. Glavni i glavni početak smjera glavne osi odgovaraju linijskom početku i linijskom kraju osovine.
red-unazad Smjer s desna na lijevo (u rtl s lijeva na desno). Flex predmeti postavljeni su u liniju u odnosu na desni rub kontejnera (u rtl - lijevo).
stupac Smjer od vrha do dna. Flex predmeti raspoređeni su u kolonu.
stupac-revers Stupac s elementima obrnutim redoslijedom, odozdo prema gore.
početno
nasljediti

Pirinač. 4. Svojstvo flex-direction za jezike slijeva udesno

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; -webkit-flex-direction: row-reverse; display: flex; flex-direction: row-reverse;)

4.2. Upravljanje više linija linijskog spremnika: flex-wrap

Svojstvo određuje hoće li flex spremnik biti jednolinijski ili višelinijski, a također postavlja smjer poprečne osi, koji određuje smjer u kojem su složene nove linije flex spremnika.

Prema zadanim postavkama, flex elementi se slažu u jednu liniju, duž glavne osi. Ako se prelijeju, izaći će izvan graničnog okvira savitljivog spremnika. Imovina se ne nasljeđuje.


Pirinač. 5. Upravljanje više linija pomoću svojstva Flex-Wrap za LTR jezike

Sintaksa

Flex-spremnik (display: -webkit-flex; -webkit-flex-wrap: wrap; display: flex; flex-wrap: wrap;)

4.3. Skraćenica za smjer i više linija: flex-flow

Svojstvo vam omogućava da definirate smjerove glavne i poprečne osi, kao i mogućnost umotavanja fleksibilnih predmeta u više linija, ako je potrebno. Skraćenica je za svojstva flex-direction i flex-wrap. Zadani flex-flow: row nowrap; ... imovina se ne nasljeđuje.

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; -webkit-flex-flow: premotavanje redova; prikaz: flex; flex-flow: premotavanje redova;)

4.4. Prikaz redoslijeda fleks stavki: redoslijed

Svojstvo određuje redoslijed prikazivanja i postavljanja fleks stavki unutar fleks spremnika. Odnosi se na fleksibilne predmete. Imovina se ne nasljeđuje.

U početku svi flex elementi imaju redoslijed: 0; ... Kada odredite vrijednost između -1 za element, on se pomiče na početak vremenske trake i vrijednost 1 do kraja. Ako više fleks stavki ima istu vrijednost narudžbe, oni će se prikazati prema njihovom prvobitnom redoslijedu.

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; prikaz: flex;) .flex-item (-webkit-order: 1; order: 1;)
Pirinač. 6. Prikaz redoslijeda fleks stavki

5. Fleksibilnost flex predmeta

Definirajući aspekt fleksibilnog rasporeda je mogućnost "presavijanja" fleksibilnih predmeta promjenom njihove širine / visine (ovisno o veličini na glavnoj osi) kako bi se ispunio raspoloživi prostor u osnovnoj dimenziji. To se radi pomoću svojstva flex. Savitljivi spremnik raspoređuje slobodan prostor između svoje djece (srazmjerno njihovom omjeru rastenja) za punjenje spremnika ili ih smanjuje (proporcionalno njihovom omjeru savijanja) kako bi spriječio prelijevanje.

Flex stavka će biti potpuno nefleksibilna ako su njene vrijednosti flex-grow i flex-shrink jednake nuli, a flex u suprotnom.

5.1. Fleksibilno dimenzioniranje s jednim svojstvom: fleks

Svojstvo je skraćenica za svojstva flex-grow, flex-shrink i flex-basis. Zadana vrijednost: flex: 0 1 auto; ... Možete navesti jednu ili sve tri vrijednosti svojstva. Imovina se ne nasljeđuje.

Sintaksa

Flex-kontejner (prikaz: -webkit-flex; zaslon: flex;) .flex-item (-webkit-flex: 3 1 100px; -ms-flex: 3 1 100px; flex: 3 1 100px;)

5.2. Stopa rasta: fleks-rast

Svojstvo kontrolira koliko će jedna flex stavka rasti u odnosu na druge flex stavke u flex spremniku pri dodjeli pozitivnog praznog prostora. Ako je zbroj vrijednosti fleksibilnog povećanja flex stavki u nizu manji od 1, oni zauzimaju manje od 100% slobodnog prostora. Imovina se ne nasljeđuje.


Pirinač. 7. Upravljanje slobodnim prostorom na navigacijskoj traci s fleksibilnim rastom

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; prikaz: flex;). Flex-predmet (-webkit-flex-grow: 3; flex-grow: 3;)

5.3. Omjer skupljanja: fleksibilno skupljanje

Svojstvo specificira koliko će se flex stavka smanjiti u odnosu na druge flex stavke pri dodjeli negativnog praznog prostora. Pomnoženo sa osnovnom veličinom fleks-osnove. Negativni prostor dodjeljuje se srazmjerno tome koliko se stavka može smanjiti, tako da se, na primjer, mali savitljivi predmet neće smanjiti na nulu dok se savitljivi predmet ne primijeti znatno veća veličina... Imovina se ne nasljeđuje.


Pirinač. 8. Sužavanje fleks predmeta u nizu

Sintaksa

Flex-spremnik (display: -webkit-flex; display: flex;). Flex-item (-webkit-flex-shrink: 3; flex-shrink: 3;)

5.4. Veličina baze: fleks-osnova

Svojstvo postavlja početnu osnovnu veličinu fleks jedinice prije nego što se dodijeli slobodni prostor prema omjerima fleksa. Za sve vrijednosti, osim auto i sadržaja, osnovna veličina savijanja definirana je na isti način kao i širina u horizontalnim načinima pisanja. Procenti su u odnosu na veličinu flex spremnika, a ako nije navedena veličina, vrijednost koja se koristi za flex-basis je veličina njegovog sadržaja. Nije naslijeđeno.

Sintaksa

Flex-spremnik (zaslon: -webkit-flex; zaslon: flex;). Flex-artikl (-webkit-flex-osnova: 100px; flex-osnova: 100px;)

6. Poravnanje

6.1. Poravnanje glavne osi: justify-content

Svojstvo poravnava flex predmete s glavnom osom flex spremnika, raspoređujući slobodni prostor koji nije zauzet fleks stavkama. Kada se stavka pretvori u fleks spremnik, fleks stavke se prema zadanim postavkama grupiraju (osim ako za njih nisu postavljene margine). Razmak se dodaje nakon izračunavanja vrijednosti marže i fleksibilnog rasta. Ako bilo koji predmet ima fleksibilan rast ili maržu koji nije nula: auto; , imovina neće imati učinka. Imovina se ne nasljeđuje.

Vrijednosti:
flex-start Zadana vrijednost. Flex predmeti postavljeni su u smjeru dalje od početne linije savijačkog spremnika.
flex-end Flex predmeti postavljeni su u smjeru dalje od krajnje linije savitljivog spremnika.
centar Flex predmeti poravnati su se prema sredini fleks spremnika.
razmak između Flex predmeti se ravnomjerno raspoređuju po liniji. Prva savitljiva stavka postavlja se u istoj ravnini s rubom početne linije, zadnja savitljiva stavka poravnava se s ivicom krajnje crte, a ostatak savitljivih stavki na liniji raspoređuje se tako da udaljenost između bilo koje dvije susjedni elementi bilo isto. Ako je preostali razmak negativan ili ako postoji samo jedna stavka fleksa u retku, ova je vrijednost identična parametru flex-start.
svemir okolo Fleksibilni predmeti na liniji razmaknuti su tako da je udaljenost između bilo koja dva susjedna savitljiva predmeta jednaka, a udaljenost između prve / posljednje savitljive stavke i rubova savitljivog spremnika je polovina udaljenosti između savitljivih predmeta.
početno Postavlja vrijednost svojstva na zadanu vrijednost.
nasljediti Nasljeđuje vrijednost svojstva od nadređenog elementa.

Pirinač. 9. Poravnavanje predmeta i dodjela slobodnog prostora pomoću svojstva Justify-Content

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; -webkit-justify-content: flex-start; display: flex; justify-content: flex-start;)

6.2. Poravnanje po osi: poravnajte stavke i poravnajte samo sebe

Flex predmeti mogu se poravnati s poprečnom osi trenutnog reda flex spremnika. align-items postavlja poravnanje za sve stavke flex kontejnera, uključujući anonimne flex stavke. align-self vam omogućava da poništite ovo poravnanje za pojedinačne flex stavke. Ako je bilo koja od poprečnih margina fleks stavke automatska, poravnanje-self nema učinka.

6.2.1. Poravnajte stavke

Poravnava flex predmete, uključujući anonimne flex predmete, duž poprečne osi. Nije naslijeđeno.

Vrijednosti:
flex-start
flex-end
centar
osnovno stanje Polazne crte svih fleks stavki koje su uključene u poravnanje su iste.
rastezanje
početno Postavlja vrijednost svojstva na zadanu vrijednost.
nasljediti Nasljeđuje vrijednost svojstva od nadređenog elementa.
Pirinač. 10. Poravnavanje predmeta u kontejneru vertikalno

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; -webkit-align-items: flex-start; display: flex; align-items: flex-start;)

6.2.2. Poravnajte se

Svojstvo je odgovorno za poravnavanje pojedinog savitljivog predmeta prema visini savijačkog spremnika. Poništava poravnanje specificirano od stavki align. Nije naslijeđeno.

Vrijednosti:
auto Zadana vrijednost. Stavka flex koristi poravnanje specificirano u svojstvu align-items kontejnera flex.
flex-start Gornja ivica fleksibilnog predmeta postavlja se u istoj ravni sa savitljivom linijom (ili razmakom, s obzirom na marginu i obrub elementa) kroz ishodište poprečne osi.
flex-end Donja ivica fleksibilnog predmeta postavljena je u ravni sa linijom savijanja (ili razmakom, s obzirom na marginu i obrub predmeta) koja prolazi kroz kraj poprečne osi.
centar Margine fleks stavke centrirane su na poprečnoj osi unutar fleks linije.
osnovno stanje Fleks stavka poravnana je s osnovnom linijom.
rastezanje Ako je poprečno dimenzioniranje fleksibilnog predmeta automatsko i nijedna poprečna margina nije automatska, stavka se rasteže. Zadana vrijednost.
početno Postavlja vrijednost svojstva na zadanu vrijednost.
nasljediti Nasljeđuje vrijednost svojstva od nadređenog elementa.

Pirinač. 11. Poravnajte pojedinačne fleks stavke

Sintaksa

Flex-spremnik (display: -webkit-flex; display: flex;). Flex-item (-webkit-align-self: center; align-self: center;)

6.3. Poravnavanje redova fleksibilnog spremnika: align-content

Svojstvo poravnava redove u fleks spremniku kada na poprečnoj osi ima dodatnog prostora, slično poravnanju pojedini elementi na glavnoj osi koristeći svojstvo justify-content. Svojstvo nema utjecaja na jednoslojni flex kontejner. Nije naslijeđeno.

Vrijednosti:
flex-start Linije su složene prema početku flex kontejnera. Rub prve linije postavljen je blizu ruba fleks spremnika, a svaki sljedeći redak postavljen je blizu prethodne linije.
flex-end Linije su složene prema kraju fleks spremnika. Rub posljednjeg retka postavljen je blizu ruba fleks spremnika, a svaki prethodni redak postavljen je blizu sljedećeg retka.
centar Linije su složene prema sredini fleks spremnika. Redovi su blizu jedni drugima i poravnati su se sa središtom savitljivog spremnika s jednakim razmakom između početne ivice sadržaja savitljivog spremnika i prvog retka te između krajnjeg ruba sadržaja savitljivog spremnika i posljednjeg retka.
razmak između Linije su ravnomjerno raspoređene u fleks spremniku. Ako je preostali slobodni prostor negativan ili se u fleks spremniku nalazi samo jedna fleksibilna linija, ova vrijednost je identična fleks startu. Inače, rub prvog retka postavljen je blizu početne ivice sadržaja flex kontejnera, a rub posljednjeg retka blizu zadnjeg ruba sadržaja flex kontejnera. Ostatak linija raspoređen je tako da je udaljenost između bilo koje dvije susjedne linije jednaka.
svemir okolo Linije su ravnomjerno raspoređene u fleks spremniku s pola prostora na oba kraja. Ako je preostali slobodni prostor negativan, ova vrijednost je identična centu centra. Inače, linije su razmaknute tako da je razmak između bilo koje dvije susjedne linije jednak, a razmak između prve / posljednje linije i rubova sadržaja fleksibilnog spremnika upola manji od razmaka između linija.
rastezanje Zadana vrijednost. Redovi savitljivih predmeta ravnomjerno se protežu kako bi popunili sav raspoloživi prostor. Ako je preostali slobodni prostor negativan, ova vrijednost je identična fleks startu. U suprotnom će se slobodni prostor podijeliti podjednako između svih linija, povećavajući njihovu bočnu veličinu.
početno Postavlja vrijednost svojstva na zadanu vrijednost.
nasljediti Nasljeđuje vrijednost svojstva od nadređenog elementa.
Pirinač. 12. Poravnanje fleksibilnih predmeta u više linija

Sintaksa

Flex-spremnik (prikaz: -webkit-flex; -webkit-flex-flow: premotavanje redova; -webkit-align-content: flex-end; display: flex; flex-flow: premotavanje redova; align-content: flex-end ; visina: 100px;)

Modul rasporeda Flexbox (Fleksibilna kutija) želi pružiti više efikasna metoda pozicioniranje, poravnavanje i raspoređivanje slobodnog prostora između elemenata u spremniku, čak i kada njihova veličina nije unaprijed poznata i / ili je dinamična (otuda riječ "flex").

Osnovna ideja iza fleksibilnih rasporeda je dati spremniku mogućnost promjene širine / visine (i redoslijeda) njegovih predmeta kako bi se najbolji način popunite raspoloživi prostor (uglavnom da stane na sve vrste i veličine ekrana). Spremnik flexbox proširuje stavke kako bi ispunio slobodni prostor ili ih smanjuje kako bi se izbjeglo prelijevanje.

Što je najvažnije, Flexbox je usmjeren agnostik, za razliku od konvencionalnih rasporeda (okviri zasnovani na vertikalnom pozicioniranju i umetnuti elementi zasnovani na horizontalnom pozicioniranju). Iako rade dovoljno dobro, nedostaje im fleksibilnosti za podržavanje velikih ili složenih aplikacija (posebno kada je u pitanju preusmjeravanje, promjena veličine, istezanje, skupljanje itd.).

Bilješka. Flexbox je pogodniji za komponente aplikacije i male izglede, dok je CSS Grid za veće izglede.

Osnove i terminologija

Budući da je Flexbox čitav modul, a ne zasebno svojstvo, on sadrži mnogo različitih stvari, uključujući čitav niz svojstava. Neki od njih su dizajnirani da budu postavljeni na svoj kontejner (roditelj, poznat kao „fleks kontejner“), dok drugi moraju biti postavljeni na djecu (poznati kao „fleks predmeti“).

Dok se konvencionalni sistem rasporeda zasniva na kutijastim i linijskim pravcima, Flexbox se temelji na "pravcima fleks-toka". Molimo pogledajte ovu sliku iz specifikacije kako biste objasnili osnovnu ideju iza Flexboxa.

U osnovi, elementi će biti smješteni uzduž glavna osa(od glavnog početka do glavnog kraja) ili poprečna os(od unakrsnog početka do unakrsnog kraja).

Podrška pregledača

CSS modul fleksibilnog rasporeda okvira

Chrome za Android

Preglednik Blackberry, počev od verzije 10, podržava novu sintaksu.

Svojstva spremnika

Osobine elemenata

Svojstva roditelja (Flex spremnik)

prikaz

Definira flex kontejner; string ili blok ovisi o proslijeđenoj vrijednosti. Uključuje fleks kontekst za svu svoju direktnu djecu.

Spremnik (prikaz: flex; / * ili inline-flex * /)

Imajte na umu da CSS stupci ne utječu na flex spremnik.

flex-direction


Postavlja glavnu os, čime određuje smjer elemenata koji se nalaze u spremniku. Flexbox (osim opcionalnog omota) je jednosmjerni koncept izgleda. Zamišljajte flex elemente prvenstveno kao vodoravne redove ili okomite stupce.

Spremnik (flex-smjer: red | obrnuti red | stupac | stupac-obrnuti;)

  • red (zadano)- slijeva nadesno u ltr; zdesna nalijevo u rtl;
  • red-unazad- zdesna nalijevo u ltr; slijeva nadesno u rtl;
  • stupac- isto kao i red, samo odozgo prema dolje;
  • stupac-revers- isto kao i obrnuti red, samo odozdo prema gore;

flex-wrap


Prema zadanim postavkama, stavke će pokušati ispuniti samo jedan redak. Možete promijeniti ovo ponašanje i dopustiti elementima da se premotaju sljedeći red, ako je potrebno.

Spremnik (flex-wrap: nowrap | wrap | wrap-reverse;)

  • nowrap (zadano)- svi flex elementi će se nalaziti u jednom redu;
  • zamotati- fleksibilni predmeti bit će raspoređeni u više linija, od vrha do dna;
  • premotavanje unazad- fleksibilni predmeti bit će raspoređeni u više linija, odozdo prema gore;

justify-content


Određuje poravnanje duž glavne osi. Ovo pomaže u raspodjeli slobodnog prostora preostalog nakon što su svi fiksni i nefiksni fleks predmeti postigli maksimalnu veličinu. Takođe pomaže zadržati određenu kontrolu nad poravnanjem elemenata kada prelaze liniju.

Kontejner (justify-content: flex-start | flex-end | centar | razmak između | razmaka;)

  • flex-start (zadano)- elementi su pritisnuti na početak reda;
  • flex-end- elementi su pritisnuti do kraja reda;
  • centar- predmeti su centrirani duž linije;
  • razmak između- elementi su postavljeni ravnomjerno na liniji; prvi element je na početku retka, zadnji element je na kraju reda;
  • svemir okolo- elementi su postavljeni ravnomjerno na liniji s istim prostorom oko sebe. Imajte na umu da prostor vizuelno nije isti jer svi elementi imaju jednak prostor na obje strane. Prvi element imat će jednu jedinicu prostora na bočnoj strani spremnika, ali dvije jedinice između njega i sljedećeg elementa, jer sljedeći element također ima jednu jedinicu na obje strane.

align-items


Ovo svojstvo određuje kako će se flex elementi ponašati duž poprečne osi na trenutnoj liniji. Zamislite to kao oh, samo za poprečnu osu (okomitu na glavnu osu).

Spremnik (poravnati stavke: flex-start | flex-end | center | baseline | stretch;)

  • flex-start - elementi su postavljeni na početku poprečne osi;
  • flex-end - elementi su postavljeni na kraj poprečne osi;
  • centar - elementi su smješteni u središtu poprečne osi;
  • osnovno stanje- elementi su poravnati s osnovnom linijom;
  • rastezanje (zadano)- protežu se kako bi popunili cijeli spremnik (i dalje poštujte minimalnu širinu / maksimalnu širinu);

align-content


Bilješka. Ovo svojstvo nema učinka kada postoji samo jedan red flex stavki.

Kontejner (poravnati-sadržaj: flex-start | flex-end | centar | razmak-između | razmaka | protezanje;)

  • flex-start- linije se nalaze na početku kontejnera;
  • flex-end- linije se nalaze na kraju kontejnera;
  • centar- linije su postavljene u središte posude;
  • razmak između- redovi su ravnomjerno raspoređeni, prvi red je na početku spremnika, a posljednji red na kraju;
  • svemir okolo- linije se distribuiraju ravnomjerno, sa na istoj udaljenosti između njih;
  • rastezanje (zadano)- linije su rastegnute cijelom širinom kako bi zauzele preostali prostor;

Osobine za djecu (fleksibilni predmeti)

red


Po defaultu su svi elementi poredani u izvornom redoslijedu. Međutim, svojstvo narudžbe kontrolira redoslijed po kojem su elementi raspoređeni unutar spremnika.

Artikal (narudžba: ; }

fleks-rasti


Svojstvo određuje sposobnost elementa da raste u veličini, ako je potrebno. Uzima se jedinična vrijednost kao proporcija koja određuje koliko slobodnog prostora unutar spremnika treba zauzeti element.

Ako je za sve stavke postavljeno flex-grow postavljeno na 1, tada će se slobodni prostor unutar spremnika ravnomjerno rasporediti između svih predmeta. Ako jedan od elemenata ima vrijednost 2, tada će element zauzeti dvostruko više prostora od ostalih (barem će pokušati).

Predmet (fleks-rast: ; / * zadano 0 * /)

Negativni brojevi se ne mogu navesti.

fleks-osnova

Određuje zadanu veličinu elementa prije nego što se dodijeli preostali prostor. To može biti dužina (20%, 5rem, itd.) Ili ključna riječ... Ključna riječ auto znači "izgleda kao moje svojstvo širine ili visine". Ključna riječ "sadržaj" znači "veličina se zasniva na sadržaju elementa" - ova ključna riječ još nije dobro podržana, pa je teško testirati, a još teže znati koliki su njeni braća i sestre min-content, max-content i fit-content radiš.

Artikal (fleksibilna osnova: |. | auto; / * zadani automatski * /)

Ako je postavljeno na 0, dodatni prostor oko sadržaja neće se računati. Ako se postavi na auto, dodijelit će se dodatni prostor na osnovu vrijednosti.

fleks

Ovo je skraćenica za i. Drugi i treći parametar (flex-shrink i flex-osnova) nisu obavezni. Zadana vrijednost je 0 1 auto.

Stavka (fleks: nema | [<"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }

poravnati-sebe


Ovo svojstvo vam omogućuje nadjačavanje zadane (ili postavljene svojstvom) poravnanja za pojedinačne fleks stavke.

Molimo pogledajte objašnjenje imovine kako biste razumjeli dostupne vrijednosti.

Stavka (poravnaj-samo: auto | flex-start | flex-end | centar | osnovna linija | istezanje;) .item (align-self: auto | flex-start | flex-end | center | baseline | stretch;)

Imajte na umu da plutajuće, prozirno i vertikalno poravnanje nemaju utjecaja na fleks stavku.

Primjeri

Krenimo od samog jednostavan primjer rješavanje problema koji se javlja gotovo svakodnevno: savršeno centriranje. Ne može biti lakše ako koristite Flexbox.

Nadređeni (prikaz: fleks; visina: 300px;). Dijete (širina: 100px; visina: 100px; margina: automatski;)

Ovisi o automatskoj marži fleks spremnika koja apsorbira dodatni prostor. Dakle, postavljanjem vertikalne margine na auto na element učinit će element savršeno centriranim na obje osi.

Sada upotrijebimo još nekoliko svojstava. Razmotrite spisak od 6 elemenata koji su svi estetski fiksirani, ali mogu biti automatski. Želimo da budu ravnomjerno raspoređeni po vodoravnoj osi i da budu u redu kada se promjeni veličina pregledača (bez medijskih upita!).

Flex-spremnik (prikaz: flex; flex-flow: premotavanje redova; justify-content: space-around;)

Spremni! Sve ostalo je samo nekoliko problema s dizajnom. Ispod je primjer CodePena, obavezno idite tamo i pokušajte promijeniti veličinu prozora da vidite što se događa.

Pokušajmo nešto drugo. Zamislimo da imamo navigaciju udesno na samom vrhu zaslona, ​​ali želimo da je centrirana na srednje velike ekrane i jedan stupac na male ekrane. Lako graškast.

Navigacija (prikaz: flex; flex-flow: premotavanje redova; justify-content: flex-end;) @media all i (max-width: 800px) (.navigation (justify-content: space-around;)) @media all i (max-width: 500px) (.navigation (flex-direction: column;))

Pokušajmo učiniti nešto još bolje igrajući se sa fleksibilnošću naših flex predmeta! Što kažete na raspored s tri stupca za mobilne uređaje sa zaglavljem i podnožjem pune širine, a ne ovisno o izvornom redoslijedu elemenata.

Omotač (prikaz: flex; flex-flow: premotavanje redova;) .header, .main, .nav, .aside, .footer (flex: 1 100%;) @media all i (min-width: 600px) (.aside (flex: 1 auto;)) @media all i (min-width: 800px) (.main (flex: 2 0px;) .aside-1 (order: 1;) .main (order: 2;) .aside- 2 (red: 3;) .podnožje (nalog: 4;))

Povezana svojstva

Greške

Flexbox sigurno nije bez svojih grešaka. Najbolja kolekcija koju sam vidio dolazi od Philip Waltona i Flexbugova Grega Whitwortha.Ovo je mjesto otvorenog koda za praćenje svih grešaka, pa mislim da je najbolje samo objaviti vezu.

Svojstvo narudžbe kontrolira redoslijed kojim se djeca pojavljuju unutar fleks spremnika. Po defaultu su u redoslijedu u kojem su izvorno dodani u flex spremnik.

Vrijednosti

.flex-item (narudžba:<целое число>; }

flex stavke mogu se preuređivati ​​pomoću ovog jednostavnog svojstva bez promjene HTML koda.

Zadana vrijednost: 0.

fleks-rasti

Ovo svojstvo postavlja faktor rasta koji određuje koliko će flex stavka rasti u odnosu na ostatak flex stavki u flex spremniku kada se dodijeli pozitivan razmak.

Vrijednosti

.flex-item (flex-grow:<число>; }

Ako svi flex elementi imaju istu vrijednost flex-grow, tada će svi predmeti biti iste veličine u spremniku.

Druga flex stavka zauzima više prostora u odnosu na veličinu ostalih flex stavki.

Zadana vrijednost: 0.

fleksibilno skupljanje

flex-shrink postavlja omjer skupljanja, koji određuje koliko će se flex element smanjiti u odnosu na ostatak flex stavki u flex spremniku, s obzirom na dodjelu negativnog praznog prostora.

Vrijednosti

.flex-item (flex-shrink:<число>; }

Prema zadanim postavkama, svi se flex elementi mogu smanjiti, ali ako postavimo flex-shrink na nulu (bez smanjenja), stavke će ostati u izvornoj veličini.

Zadana vrijednost: 1.

Negativni brojevi nisu dozvoljeni.

fleks-osnova

Ovo svojstvo uzima iste vrijednosti kao svojstva širine i visine i određuje početnu osnovnu veličinu fleks jedinice, prije nego što se slobodni prostor dodijeli prema omjerima.

Vrijednosti

.flex-item (flex-osnova: auto |<ширина>; }

flex-osnova navedena je za četvrtu flex stavku i diktira njenu početnu veličinu.

Zadana vrijednost: auto.

fleks

Ovo je svojstvo skraćenica za svojstva flex-grow, flex-shrink i flex-basis. Nekoliko drugih vrijednosti također se može postaviti na auto (1 1 auto) i nijednu (0 0 auto).

Vrijednosti

.flex-item (flex: none | auto | [ ? || ]; }

Zadana vrijednost: 0 1 auto.

W3C preporučuje upotrebu stenografskog svojstva flex umjesto pojedinačnih svojstava, jer flex ispravno resetira sve neodređene komponente za tipičnu upotrebu.

poravnati-sebe

Svojstvo align-self omogućuje vam da nadjačate zadano poravnanje (ili vrijednost navedenu putem align-items) za pojedinačne flex stavke. Za razumijevanje dostupnih vrijednosti, pogledajte opis poravnanja stavki za flex spremnik.

Vrijednosti

.flex-item (align-self: auto | flex-start | flex-end | center | baseline | stretch;)

Redefinirano poravnanje za treću i četvrtu flex stavku putem svojstva align-self.

Modul Flexbox raspored(fleksibilna kutija - "fleksibilna kutija", uključena ovaj trenutak Preporuka za kandidate za W3C) pokušava predložiti efikasniji način rasporeda, poravnanja i distribucije slobodnog prostora između elemenata u spremniku, čak i kada je njihova veličina nepoznata i / ili dinamična (otuda riječ "fleksibilna").

Glavna ideja fleksibilnog rasporeda je dati spremniku mogućnost promjene širine / visine (i redoslijeda) njegovih elemenata kako bi najbolje ispunio prostor (u većini slučajeva, za podržavanje svih vrsta zaslona i veličina zaslona). Fleksibilni spremnik isteže predmete kako bi ispunio slobodan prostor ili ih smanjuje kako bi spriječio da izađu izvan granica.

Najvažnije je da je raspored flexbox-a neovisan o smjeru, za razliku od redovnih rasporeda (vertikalni okviri i horizontalni inline elementi). Iako je redovan izgled odličan za web stranice, nedostaje mu fleksibilnost (nije namjeravana igra riječi) za podršku velikim ili složenim aplikacijama (posebno kada je riječ o promjeni orijentacije ekrana, promjeni veličine, istezanju, skupljanju itd.) ...

Komentar: Izgled Flexbox-a je najprikladniji za dijelove aplikacija i male rasporede, dok je raspored mreže više korišten za rasporede velikih razmjera.

Osnove

Jer flexbox je cijeli modul, a ne samo jedno svojstvo, on grupira mnoga svojstva. Neke od njih treba primijeniti na spremnik (nadređeni element, tzv flex kontejner) dok se druga svojstva primjenjuju na djecu ili flex predmeti.

Dok se redoviti raspored zasniva na smjerovima protoka blokovskih i unutarnjih elemenata, fleksibilni rasporedi temelje se na "fleksibilnim smjerovima protoka". Pogledajte ovu shemu iz specifikacije kako biste objasnili osnovnu ideju koja stoji iza flex izgleda.

U osnovi, elementi će se distribuirati zajedno glavna osa(od glavni start prije glavni kraj) ili duž poprečna os(od unakrsni start prije cross-end).

  • glavna osa- glavna os duž koje su položeni elementi savijanja. Imajte na umu da to ne mora biti vodoravno, sve ovisi o svojstvu flex-direction (vidi dolje).
  • glavni start | glavni kraj- fleksibilni predmeti se stavljaju u posudu od glavnog početnog do glavnog krajnjeg položaja.
  • glavna veličina- širina ili visina fleksibilnog predmeta, ovisno o odabranoj osnovnoj vrijednosti. Osnovna vrijednost može biti širina ili visina elementa.
  • poprečna os- poprečna os okomita na glavnu. Njegov smjer ovisi o smjeru glavne osi.
  • unakrsni start | cross-end- fleks linije se popunjavaju predmetima i stavljaju u posudu od poprečnog položaja do poprečnog položaja.
  • ukrštena veličina- širina ili visina savitljivog predmeta, ovisno o odabranoj dimenziji, jednaka je ovoj vrijednosti. Ovo svojstvo odgovara širini ili visini elementa, ovisno o odabranoj dimenziji.

Svojstva

prikaz: flex | inline-flex;

Odnosi se na:

Definira flex kontejner (inline ili block, ovisno o odabranoj vrijednosti), povezuje flex kontekst za sve njegove neposredne potomke.

prikaz: ostale vrijednosti | flex | inline-flex;

Imajte na umu:

  • CSS stupci ne rade s flex spremnikom
  • plutajuće, prozirno i okomito poravnanje ne rade s fleksibilnim predmetima

flex-direction

Odnosi se na: roditelj flex spremnika.

Postavlja glavnu os glavnoj osi, određujući na taj način smjer fleksibilnih predmeta smještenih u spremniku.

flex-direction: red | red unazad | stupac | stupac-revers
  • red (zadano): slijeva nadesno za ltr, zdesna nalijevo za rtl;
  • red unazad: zdesna ulijevo za ltr, slijeva udesno za rtl;
  • stupac: isti kao i red, od vrha do dna;
  • stupac-obrnuto: Slično obrnutom redu, odozdo prema gore.

flex-wrap

Odnosi se na: roditelj flex spremnika.

Određuje hoće li spremnik biti jednolinijski ili višelinijski, te smjer poprečne osi, koji određuje smjer u kojem će se nove linije postavljati.

flex-wrap: nowrap | omotaj | premotavanje unazad
  • Nowrap (zadano): jedan red / slijeva udesno za ltr, zdesna ulijevo za rtl;
  • omot: višeredni / slijeva udesno za ltr, zdesna ulijevo za rtl;
  • premotavanje unazad: više redova / zdesna ulijevo za ltr, slijeva udesno za rtl.

flex-flow

Odnosi se na: roditelj flex spremnika.

Ovo je skraćenica za svojstva savijanja i savijanja, koja zajedno definiraju glavnu i poprečnu os. Podrazumijeva se da se redoslijed sada prebaci.

flex-flow:<"flex-direction" > || <"flex-wrap" >

Odnosi se na: roditelj flex spremnika.

Određuje poravnanje u odnosu na glavnu osu. Pomaže u raspodjeli preostalog slobodnog prostora u slučaju kada se elementi linije ne „protežu“ ili protežu, ali su već dostigli maksimalnu veličinu. Omogućava i neku vrstu kontrole poravnanja elemenata kada izađu iz okvira.

: fleks-start | flex-end | centar | razmak između | svemir okolo
  • flex-start (zadano): stavke su pomaknute na početak retka;
  • flex-end: stavke se guraju na kraj retka;
  • sredina: stavke su poredane prema sredini linije;
  • razmak između: elementi su ravnomjerno raspoređeni (prvi je element na početku retka, posljednji je na kraju);
  • oko prostora: stavke su ravnomjerno raspoređene s jednakim razmakom između sebe i granica linija.

Odnosi se na: roditelj flex spremnika.

Definira zadano ponašanje za to kako se fleks stavke postavljaju u odnosu na poprečnu os na trenutnoj liniji. Zamislite ovo kao verziju poravnanja sadržaja (okomito na glavnu osu) preko osi.

: fleks-start | flex-end | centar | osnovno | rastezanje
  • flex-start: granica unakrsnog starta za stavke postavljena je na poziciji cross-start;
  • flex-end: poprečna ivica za predmete postavljena je na poprečnom položaju;
  • sredina: predmeti su poravnati prema središtu poprečne osi;
  • osnovna linija: elementi su poravnati sa svojom osnovnom linijom;
  • stretch (zadano): Elementi se rastežu kako bi ispunili spremnik (na temelju minimalne širine / maksimalne širine).

Odnosi se na: roditelj flex spremnika.

Poravnava redove fleksibilnog spremnika kada ima slobodnog prostora na poprečnoj osi, slično onome kako opravdava-sadržaj na glavnoj osi.

Komentar: Ovo svojstvo ne radi s jednorednim flexbox-om.

: fleks-start | flex-end | centar | razmak između | svemir oko | rastezanje
  • flex-start: linije su poravnate u odnosu na početak spremnika;
  • flex-end: linije su poravnate u odnosu na kraj spremnika;
  • sredina: linije su poredane prema sredini spremnika;
  • razmak između: redovi su ravnomjerno raspoređeni (prvi redak je na početku reda, posljednji je na kraju);
  • oko prostora: linije su ravnomjerno raspoređene s jednakim razmakom;
  • istezanje (zadano): Linije se protežu kako bi popunile slobodan prostor.

red

Odnosi se na:

Prema zadanim postavkama, flex stavke su poredane u izvornom redoslijedu. Međutim, svojstvo narudžbe može kontrolirati redoslijed kojim se stavljaju u spremnik.

Redoslijed:<cijeli broj>

fleks-rasti

Odnosi se na: dijete / flex predmet.

Određuje sposobnost da fleksibilni predmet "raste" po potrebi. Uzima jedinicu vrijednosti koja služi kao proporcija. Određuje koliko slobodnog prostora unutar spremnika može uzeti element.

Ako su svi predmeti postavljeni na flex-grow postavljeni na 1, tada će svako dijete dobiti istu veličinu unutar spremnika. Ako jednom od djece postavite na 2, tada će zauzeti dvostruko više prostora od ostalih.

Flex-raste:<broj>(zadano 0)

fleksibilno skupljanje

Odnosi se na: dijete / flex predmet.

Utvrđuje sposobnost savijanja predmeta po potrebi.

Fleksibilno skupljanje: (zadano 1)

Negativni brojevi nisu prihvaćeni.

fleks-osnova

Odnosi se na: dijete / flex predmet.

Određuje zadanu veličinu elementa prije dodjele prostora u spremniku.

Fleksibilna osnova:<dužina>|. | auto (zadani automatski)

fleks

Odnosi se na: dijete / flex predmet.

Ovo je skraćenica za flex-grow, flex-shrink i flex-osnovu. Drugi i treći parametar (flex-shrink, flex-basis) nisu obavezni. Zadana vrijednost je 0 1 auto.

flex: nema | [<"flex-grow" > <"flex-shrink" >? || <"flex-basis" > ]

poravnati-sebe

Odnosi se na: dijete / flex predmet.

Omogućuje vam da nadjačate zadano poravnanje ili poravnanje-stavke za pojedine fleks stavke.

Pogledajte opis svojstva align-items za bolje razumijevanje dostupnih vrijednosti.

align-self: auto | fleks-start | flex-end | centar | osnovno | rastezanje

Primjeri

Počnimo s vrlo, vrlo jednostavnim primjerom koji viđamo gotovo svakodnevno: poravnavanje tačno prema centru. Ne može biti lakše koristiti flexbox.

.vid (prikaz: fleks; visina: 300px; / * Ili šta već * /) .child (širina: 100px; / * Ili šta već * / visina: 100px; / * Ili šta već * / marža: auto; / * Magic! * /)

Ovaj se primjer oslanja na činjenicu da je marža flex kontejnera postavljena na automatski apsorbira dodatni prostor, pa će postavljanje obloga na ovaj način poravnati element tačno po sredini na obje osi.

Koristimo sada neka svojstva. Zamislite set od 6 elemenata fiksne veličine (za ljepotu), ali s mogućnošću promjene veličine spremnika. Želimo ih distribuirati ravnomjerno vodoravno, tako da sve izgleda dobro kada se promijeni veličina prozora pretraživača (bez upita @media!).

.flex-container ( / * Prvo, kreirajte fleks kontekst * / zaslon: flex; / * Sada definirajte smjer toka i ako želimo da se stavke premotaju u novu liniju * ​​Sjetite se da je to isto kao: * flex-direction: row; * flex-wrap: omot; * / flex-flow: premotavanje reda; / * Ajmo sada definirati kako će se prostor dodijeliti * /: prostor okolo; )

Spremni. Sve ostalo je stvar registracije. Ispod je CodePen koji demonstrira ovaj primjer. Obavezno pokušajte rastezati / smanjivati ​​prozor preglednika i vidjeti što će se dogoditi.

Pogledajte ovu olovku!

Pokušajmo nešto drugo. Zamislite da želimo navigaciju udesno na samom vrhu naše web stranice, ali želimo da bude poravnata prema sredini za srednje veličine ekrana i postane jedan stupac za male ekrane. Prilično je jednostavno.

/ * Veliki ekrani * /.navigation (prikaz: flex; flex-flow: premotavanje redova; / * Pomiče elemente na kraj linije duž glavne osi * /: flex-end; ) @media all i (max-width: 800px) (.navigation ( / * Za ekrane srednje veličine centriramo navigaciju, ravnomjerno raspoređujući slobodni prostor između elemenata * /: prostor okolo; )) / * Mali ekrani * /@media all i (max-width: 500px) (.navigation ( / * Na malim ekranima, umjesto u liniju, stavimo stavke u stupac * / pravac savijanja: stupac; )) Pogledajte ovu olovku!

Pokušajmo nešto bolje i poigrajmo se fleksibilnošću flex predmeta! Kako bi bilo da se usredsredite na mobilni uređaji raspored u tri kolone sa zaglavljem i podnožjem pune širine? I to drugačijim redoslijedom.

.wrapper (prikaz: flex; flex-flow: red wrap;) / * Postavite sve elemente na 100% širinu * /.header, .main, .nav, .aside, .footer (fleks: 1 100%;) / * U ovom se slučaju oslanjamo na originalnu narudžbu za ciljanje * mobilnih uređaja: * 1. zaglavlje * 2. nav * 3. glavno * 4. sa strane * 5. podnožje * / / * Srednji ekrani * /@media all i (minimalna širina: 600px) ( / * Obje su bočne trake na istoj liniji * /.aside (fleks: 1 automatski;)) / * Veliki ekrani * /@media all i (minimalna širina: 800px) ( / * Zamijenimo .aside-1 i .main elemente i kažemo * .ain elementu da zauzme dvostruko više prostora od bočnih traka. * /.main (flex: 2 0px;) .aside-1 (order: 1;) .main (order: 2;) .aside-2 (order: 3;) .footer (order: 4;))

Ukratko, raspored sa Flexboxom daje nam jednostavna rješenja za nekada teške zadatke. Na primjer, kada trebate poravnati element vertikalno ili pritisnuti podnožje na dnu zaslona ili jednostavno umetnuti nekoliko blokova u jedan red tako da zauzmu sav slobodni prostor. Slični zadaci mogu se riješiti bez fleksibilnosti. Ali u pravilu su ova rješenja više poput "štaka" - trikova za korištenje css-a u druge svrhe. Dok se kod flexbox-a takvi zadaci rješavaju točno onako kako je model flex-a planirao.

CSS modul fleksibilnog okvira, ukratko, flexbox, stvoren je kako bi uklonio nedostatke u stvaranju širokog spektra HTML struktura, uključujući one prilagođene različitim širinama i visinama, i kako bi izgled učinio logičnim i jednostavnim. Logičan pristup, u pravilu, djeluje na neočekivanim mjestima, gdje rezultat nije provjeren - logika je naše sve!

Flexbox vam omogućava elegantno upravljanje širokim rasponom svojstava elemenata unutar spremnika: smjer, redoslijed, širina, visina, uzdužno i poprečno poravnanje, raspodjela slobodnog prostora, istezanje i skupljanje elemenata.

Osnovno znanje

FlexBox se sastoji od spremnika i njegovih predmeta (fleks predmeta).

Da bi omogućio flexbox, bilo ko HTML element samo dodijelite svojstvo display: flex css-u; ili prikaz: inline-flex; ...

1
2

Nakon omogućavanja svojstva flex, unutar spremnika kreiraju se dvije osi: glavna i poprečna (okomita (⊥), poprečna os). Svi ugniježđeni elementi (prvi nivo) poravnati su duž glavne osi. Prema zadanim postavkama, glavna os je vodoravna i ima smjer s lijeva na desno (→), a poprečna os je vertikalna i usmjerena odozgo prema dolje (↓).

Glavna i poprečna osa mogu se zamijeniti, tada će se elementi nalaziti odozgo prema dolje (↓), a kada prestanu odgovarati visini, pomicat će se slijeva udesno (→) - odnosno osi će se jednostavno zamijeniti. U tom se slučaju početak i kraj rasporeda elemenata ne mijenjaju - mijenjaju se samo smjerovi (osi)! Zbog toga trebate zamisliti osi unutar posude. Međutim, ne treba misliti da postoje neke "fizičke" osi i da one utječu na nešto. Os je ovdje samo smjer kretanja elemenata unutar spremnika. Na primjer, ako smo specificirali poravnanje elemenata u središtu glavne osi, a zatim promijenili smjer ove glavne osi, tada će se i poravnanje promijeniti: elementi su bili u sredini vodoravno, a u sredini vertikalno. Pogledajte primjer.

Još jedna važna karakteristika Flex-boksa je prisustvo redova u poprečnom smjeru. Da bismo razumjeli o čemu govorimo, zamislimo da postoji glavna vodoravna os, ima mnogo elemenata i oni se ne "penju" u spremnik, pa se premještaju u drugi red. Oni. spremnik izgleda ovako: spremnik, unutar njega se nalaze dva reda, svaki red sadrži nekoliko elemenata. Jeste li predstavili? Sad zapamtite da vertikalno možemo poravnati ne samo elemente, već i redove! Kako to funkcionira, jasno se vidi iz primjera za imovinu. I evo kako shematski izgleda:

CSS svojstvašto može utjecati na model izgleda: plutajući, prozirni, vertikalno poravnati, stupci ne rade u flex dizajnu. Za izgradnju izgleda koristi drugačiji model i ta css svojstva se jednostavno zanemaruju.

Flexbox CSS svojstva

Flexbox sadrži različita css pravila za kontrolu cjelokupnog flex dizajna. Neke treba primijeniti na glavni spremnik, a druge na elemente ovog spremnika.

Za kontejner

prikaz:

Uključuje svojstvo flex za stavku. Sam element i njegovi ugniježđeni elementi potpadaju pod ovo svojstvo: to utječe samo na potomke prvog nivoa - oni će postati elementi flex spremnika.

  • fleks- element se proteže u punoj širini i ima puni prostor među okolnim blokovima. Linije su omotane na početku i na kraju bloka.
  • inline-flex- element je omotan oko ostalih elemenata. Istovremeno, njegov unutarnji dio je formatiran kao blok element, a sam element formatiran je kao inline.

flex i inline-flex razlikuju se po tome što različito komuniciraju sa okolnim elementima, poput display: block i display: inline-block.

flex-direction:

Mijenja smjer glavne osi spremnika. U skladu s tim mijenja se i poprečna os.

  • red (zadano)- smjer elemenata slijeva udesno (→)
  • stupac- smjer elemenata od vrha do dna (↓)
  • red-unazad- smjer elemenata zdesna nalijevo (←)
  • stupac-revers- smjer elemenata odozdo prema gore ()
flex-wrap:

Kontrolira prijenos predmeta koji nisu u kontejneru.

  • nowrap (zadano)- ugniježđeni elementi raspoređeni su u jedan red (s smjerom = red) ili u jedan stupac (s smjerom = stupac), bez obzira na to jesu li smješteni u spremnik ili ne.
  • zamotati- uključuje prijenos elemenata u sljedeći red ako se ne uklapaju u spremnik. Ovo uključuje kretanje elemenata duž poprečne osi.
  • premotavanje unazad- takođe da umotavanje samo prijenosa neće biti prema dolje, već prema gore (u suprotnom smjeru).
flex-flow: omotavanje u smjeru

Kombinira svojstva savijanja i savijanja. Često se koriste zajedno, pa je svojstvo flex-flow stvoreno za pisanje manje koda.

flex-flow prihvaća vrijednosti ove dvije osobine, odvojene razmakom. Ili možete odrediti jednu vrijednost za bilo koje svojstvo.

/ * samo flex-direction * / flex-flow: red; fleks-protok: red-unazad; flex-flow: stupac; fleks-protok: stupac-rikverc; / * samo flex-wrap * / flex-flow: nowrap; flex-flow: omot; flex-flow: premotavanje unazad; / * obje vrijednosti odjednom: flex-direction i flex-wrap * / flex-flow: row nowrap; flex-flow: omotavanje stupa; flex-flow: stupac-reverzni omotač-obrnuti; justify-content:

Poravnava elemente duž glavne osi: ako je smjer = red, onda vodoravno, a ako je smjer = stupac, onda okomito.

  • flex-start (zadano)- elementi će početi od početka (na kraju može biti mjesta).
  • flex-end- elementi su poravnati do kraja (razmak će ostati na početku)
  • centar- u sredini (prostor će ostati lijevo i desno)
  • razmak između- ekstremni elementi su pritisnuti uz ivice (prostor između elemenata je ravnomjerno raspoređen)
  • svemir okolo- slobodni prostor se ravnomjerno raspoređuje između elemenata (ekstremni elementi se ne pritiskaju na ivice). Prostor između ruba spremnika i najudaljenijih elemenata bit će polovica prostora između elemenata u sredini reda.
  • prostorno ravnomjerno
align-content:

Poravnava redove koji sadrže stavke duž poprečne osi. Isto kao i justify-content samo za suprotnu osu.

Napomena: Radi kada postoje najmanje 2 reda, tj. ako postoji samo 1 red, ništa se neće dogoditi.

Oni. if flex-direction: row onda će ovo svojstvo poravnati nevidljive redove vertikalno ¦. Ovdje je važno napomenuti da visina bloka mora biti strogo postavljena i mora biti veća od visine redova, inače će redovi sami rastezati spremnik i svako poravnanje gubi svoje značenje, jer između njih nema slobodnog prostora ... Ali kada se flex-direction: stupac, tada se redovi pomiču vodoravno → i širina spremnika je gotovo uvijek veća od širine redova i poravnanje redova odmah ima smisla ...

  • rastezanje (zadano)- redovi se protežu da bi se linija u potpunosti popunila
  • flex-start- redovi su grupirani na vrhu spremnika (na kraju može biti mjesta).
  • flex-end- redovi su grupirani na dnu spremnika (prostor će ostati na početku)
  • centar- redovi su grupirani u sredini spremnika (prostor će ostati na rubovima)
  • razmak između- vanjski redovi su pritisnuti uz rubove (prostor između redova je ravnomjerno raspoređen)
  • svemir okolo- slobodni prostor se ravnomjerno raspoređuje između redova (ekstremni elementi nisu pritisnuti uz ivice). Prostor između ruba spremnika i najudaljenijih elemenata bit će polovica prostora između elemenata u sredini reda.
  • prostorno ravnomjerno- isto kao i prostor okolo, samo je udaljenost od vanjskih elemenata do rubova spremnika jednaka kao i između elemenata.
align-items:

Poravnava elemente duž poprečne osi unutar reda (nevidljivi red). Oni. sami redovi su poravnati kroz align-content, a elementi unutar ovih redova (linije) kroz align-items, i sve to duž poprečne osi. Ne postoji takvo razdvajanje duž glavne osi, ne postoji koncept redova i elementi su poravnati putem justify-content.

  • rastezanje (zadano)- elementi su rastegnuti kako bi u potpunosti ispunili liniju
  • flex-start- elementi su pritisnuti na početak reda
  • flex-end- elementi su pritisnuti na kraj reda
  • centar- elementi su poravnati prema sredini reda
  • osnovno stanje- elementi su poravnati s osnovnom linijom teksta

Za elemente kontejnera

flex-grow:

Određuje faktor povećanja stavke kada u spremniku ima slobodnog prostora. Prema zadanim postavkama flex-grow: 0 tj. nijedan od elemenata ne smije rasti i ispunjavati prazan prostor u spremniku.

Zadani flex-grow: 0

  • Ako su svi elementi postavljeni na fleks-rast: 1, tada se svi istežu na isti način i ispunjavaju sav slobodni prostor u spremniku.
  • Ako je naveden jedan od elemenata flex-grow: 1, tada će ispuniti sav slobodni prostor u spremniku, a poravnanje putem justify-content više neće raditi: nema slobodnog prostora, nema se što poravnati ...
  • Sa fleks-rastom: 1. Ako jedan od njih ima fleks-rast: 2, tada će biti 2 puta veći od svih ostalih.
  • Ako sve fleks kutije unutar fleks kontejnera imaju flex-grow: 3, tada će biti iste veličine
  • Sa fleks-rastom: 3. Ako jedan od njih ima fleks-rast: 12, tada će biti 4 puta veći od svih ostalih.

Kako radi? Recimo da je spremnik širok 500 piksela i sadrži dva elementa, svaki s osnovnom širinom od 100 piksela. To znači da u spremniku ima 300 slobodnih piksela. Ako je prvi element postavljen na flex-grow: 2; a drugi fleks-rast: 1; , tada će blokovi zauzimati cijelu dostupnu širinu spremnika, a širina prvog bloka bit će 300px, a drugog će biti 200px. To se objašnjava činjenicom da je raspoloživih 300 piksela slobodnog prostora u kontejneru bilo raspoređeno između elemenata u omjeru 2: 1, + 200 piksela za prvi i + 100 piksela za drugi.

Napomena: vrijednost se može navesti razlomljeni brojevi na primjer: 0,5 - fleks-rast: 0,5

flex-shrink:

Određuje faktor smanjenja za element. Suprotno od flex-grow određuje kako će se element smanjiti ako u spremniku nema mjesta. Oni. svojstvo počinje raditi kada je zbroj veličina svih elemenata veći od veličine spremnika.

Zadani flex-shrink: 1

Recimo da je kontejner širok 600 piksela i sadrži dva predmeta širine 300 piksela - fleksibilna osnova: 300 piksela; ... Oni. dva elementa u potpunosti ispunjavaju posudu. Prva stavka je fleksibilno skupljanje: 2; , a drugo savijanje: 1; ... Sada smanjimo širinu spremnika za 300px, tj. elementi se moraju smanjiti za 300 piksela da bi se uklopili u posudu. Smanjit će se u omjeru 2: 1, tj. prvi blok će se smanjiti za 200px, a drugi za 100px, a nove veličine elemenata bit će 100px i 200px.

Napomena: u vrijednosti možete koristiti razlomljene brojeve, na primjer: 0,5 - flex-shrink: 0,5

fleksibilna osnova:

Postavlja osnovnu širinu elementa - izračunava se širina prije ostalih uvjeta koji utječu na širinu elementa. Vrijednost se može navesti u px, em, rem,%, vw, vh itd. Konačna širina ovisit će o osnovnoj širini i flex-grow-u, flex-shrink-u i sadržaju unutar bloka. Uz auto, elementu se daje osnovna širina u odnosu na sadržaj unutar njega.

Zadano: auto

Ponekad je bolje postaviti širinu elementa teško koristeći poznato svojstvo width. Na primjer, širina: 50%; značit će da će element unutar spremnika biti tačno 50%, ali to će i dalje održavati svojstva flex-grow i flex-shrink. Ovo može biti korisno kada se element proteže za sadržaj unutar njega izvan navedene fleks-osnove. Primjer.

flex-osnova bit će "kruta" ako se očiste rastezanje i skupljanje: flex-osnova: 200px; fleks-rast: 0; fleksibilno skupljanje: 0; ... Sve se to može napisati ovako: 0 0 200px; ...

fleks: (rasti skupljanje osnova)

Ukratko, tri svojstva: flex-grow flex-shrink flex-osnova.

Zadano: flex: 0 1 auto

Međutim, možete navesti jednu ili dvije vrijednosti:

Flex: nema; / * 0 0 auto * / / * broj * / flex: 2; / * flex-grow (flex-osnova ide na 0) * / / * nije broj * / flex: 10em; / * flex-osnova: 10em * / flex: 30px; / * flex-osnova: 30px * / flex: automatski; / * fleks osnova: automatski * / fleks: sadržaj; / * flex-osnova: sadržaj * / flex: 1 30px; / * flex-raste i flex-osnova * / flex: 2 2; / * flex-raste i flex-shrink (flex-osnova ide na 0) * / flex: 2 2 10%; / * flex-grow i flex-shrink i flex-osnova * / align-self:

Omogućuje vam da promijenite svojstvo align-items samo za jednu stavku.

Zadano: iz kontejnera align-items

  • rastezanje- element je razvučen da u potpunosti popuni liniju
  • flex-start- element je pritisnut na početak retka
  • flex-end- element je pritisnut na kraj reda
  • centar- element je poravnat prema sredini linije
  • osnovno stanje- element je poravnat s osnovnom linijom teksta

narudžba:

Omogućuje vam promjenu redoslijeda (položaja, položaja) elementa u zajedničkom redu.

Zadano: poredak: 0

Po defaultu, elementi imaju redoslijed: 0 i postavljaju se prema redoslijedu njihovog pojavljivanja u HTML kodu i smjeru reda. Ali ako promijenite vrijednost svojstva naloga, tada će elementi biti poredani redoslijedom vrijednosti: -1 0 1 2 3 .... Na primjer, ako odredite redoslijed: 1 za jedan od elemenata, prvo će ići sva nula, a zatim element s 1.

Tako, na primjer, prvi element možete baciti do kraja, a pritom ne mijenjati smjer kretanja ostalih elemenata ili HTML koda.

Napomene

Koja je razlika između fleksibilne osnove i širine?

Ispod su važne razlike između savitljive osnove i širine / visine:

    flex-osnova radi samo za glavnu os. To znači da sa flex-direction: row flex-base kontrolira širinu, a flex-direction: column kontrolira visinu. ...

    flex-osnova odnosi se samo na flex predmete. To znači da ako isključite fleksibilnost na spremniku, ovo svojstvo neće imati učinka.

    Apsolutni elementi spremnika ne sudjeluju u flex dizajnu ... što znači da flex-osnova ne utječe na elemente flex spremnika sve dok su apsolutni položaj: apsolutni. Morat će odrediti širinu / visinu.

  • Kada se koristi svojstvo flex 3, vrijednosti (flex-grow / flex-shrink / flex-basis) mogu se kratko kombinirati i napisati, dok širina raste ili smanjuje mora se napisati odvojeno. Na primjer: flex: 0 0 50% == širina: 50%; fleksibilno skupljanje: 0; ... Ponekad je jednostavno nezgodno.

Dajte prednost fleksibilnoj osnovi kad god je to moguće. Koristite širinu samo kada flex-osnova nije prikladna.

Da li se flex-osnova razlikuje od širine - greška ili karakteristika?

Sadržaj unutar flex stavke ga proširuje i ne može van njega. Međutim, ako širinu postavite preko širine ili maksimalne širine, a ne na osnovi flex, tada će element unutar flex spremnika moći ići dalje od ovog spremnika (ponekad je to ponašanje koje vam treba). Primjer:

Primjeri fleks rasporeda

Primjeri nikada ne koriste prefikse za kompatibilnost s više pregledača. Učinio sam ovo radi lakšeg čitanja css-a. Stoga, pogledajte primjere u posljednjem Chrome verzije ili Firefox.

# 1 Jednostavan primjer s okomitim i vodoravnim poravnanjem

Počnimo s najjednostavnijim primjerom - poravnavanjem vertikalno i vodoravno u isto vrijeme i na bilo kojoj visini bloka, čak i gumenoj.

Srednji tekst

Ili ovako, bez bloka iznutra:

Srednji tekst

# 1.2 Razdvajanje (zazor) između elemenata bloka savijanja

Da biste pozicionirali elemente spremnika duž rubova i proizvoljno odabrali element nakon kojeg će doći do prekida, morate koristiti svojstvo margin-left: auto ili margin-right: auto.

# 2 fleksibilni fleksibilni meni

Napravimo meni na samom vrhu stranice. Na širokom ekranu trebao bi biti s desne strane. Poravnajte u prosjeku u sredini. A na malom bi svaki element trebao biti na novoj liniji.

# 3 reaktivna 3 stupca

Ovaj primjer pokazuje koliko je brzo i povoljno napraviti 3 stupca, koji će se, kada se suze, pretvoriti u 2, a zatim u 1.

Imajte na umu da to možete učiniti bez korištenja medijskih pravila, sve je na fleksu.

1
2
3
4
5
6

Idite na jsfiddle.net i promijenite širinu odjeljka "rezultat"

# 4 Responzivne kutije na fleksu

Recimo da trebamo prikazati 3 bloka, jedan veliki i dva mala. U ovom slučaju potrebno je da se blokovi prilagode malim ekranima. Mi radimo:

1
2
3

Idite na jsfiddle.net i promijenite širinu odjeljka "rezultat"

# 5 Galerija o fleksu i tranziciji

Ovaj primjer pokazuje koliko brzo možete napraviti lijepu flex harmoniku sa slikama. Primijetite svojstvo prijelaza za flex.

# 6 Flex to flex (samo primjer)

Zadatak je napraviti fleksibilni blok. Tako da je početak teksta u svakom bloku na istoj vodoravnoj liniji. Oni. kako se širina sužava, blokovi rastu u visinu. Potrebno je da je slika na vrhu, dugme je uvijek na dnu, a tekst u sredini počinje duž jedne vodoravne crte ...

Da bi se taj problem riješio, sami se blokovi fleksibilno rastežu i za njih se postavlja najveća moguća širina. Svaki unutrašnji blok je takođe fleksibilna konstrukcija, sa rotiranim fleks-pravcem: stupac; a element u sredini (gdje je tekst) je razvučen fleks-rast: 1; da se popuni sav slobodni prostor, tako se postiže rezultat - tekst je počeo u jednom retku ...

Još primjera

Podrška za pregledač - 98,3%

Naravno, ne postoji puna podrška, ali sve moderni pretraživači podržavaju flexbox dizajne. Za neke još trebaju biti navedeni prefiksi. Za stvarnu sliku, pogledajmo caniuse.com i vidjet ćemo da će 96,3% pregledača koji se danas koriste raditi bez prefiksa, sa 98,3% prefiksa. Ovo je sjajan pokazatelj za pouzdanu upotrebu flexboxa.

Da bih znao koji su prefiksi relevantni danas (lipanj 2019.), daću primjer svih flex pravila sa potrebne prefikse:

/ * Kontejner * / .flex (display: -webkit-box; display: -ms-flexbox; display: flex; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-orijent: vertikalno; -webkit-box-smjer: normalno; -ms-flex-pravac: stupac; flex-smjer: stupac; -ms-flex-wrap: wrap; flex-wrap: wrap; -ms -flex-flow: premotavanje stupaca; flex-flow: premotavanje stupaca; -webkit-box-pack: opravdati; -ms-flex-paket: opravdati; opravdati-sadržaj: razmak između; distribuirati; align-content: space-around;) / * Artikli * / .flex-item (-webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; -ms-flex- negativno: 2; flex-shrink: 2; -ms-flex-preferirana-veličina: 100px; flex-osnova: 100px; -ms-flex: 1 2 100px; flex: 1 2 100px; -ms-flex-item-align : centar; poravnaj-samo: centar; -webkit-box-redni-grupa: 3; -ms-flex-poredak: 2; redoslijed: 2;)

Bolje je da prefiksirana svojstva idu prije originalnog svojstva.
Na ovom popisu nema nepotrebnih prefiksa za danas (prema caniuse), ali općenito ima više prefiksa.

Chrome Safari Firefox Opera IE Android iOS
20- (staro) 3,1+ (staro) 2-21 (stara) 10 (tweener) 2,1+ (staro) 3,2+ (stara)
21+ (novo) 6,1+ (novo) 22+ (novo) 12,1+ (novo) 11+ (novo) 4,4+ (novo) 7,1+ (novo)
  • (novo) - nova sintaksa: display: flex; ...
  • (tweener) - stara neslužbena sintaksa iz 2011. godine: display: flexbox; ...
  • (stara) - stara sintaksa iz 2009: prikaz: okvir;

Video

Pa, ne zaboravite na video, tamo je ponekad i zanimljiv i razumljiv. Evo nekoliko popularnih:

Korisni fleksibilni linkovi

    flexboxfroggy.com je obrazovna flexbox igra.

    Flexplorer je intuitivni graditelj fleks koda.