Izgled pomoću CSS Flexboxa. Izgled pomoću CSS Flexboxa Fragment izgleda odjeljka s obrascem

07.09.2020 Sigurnost

Ukratko, izgled s Flexboxom nam daje jednostavna rješenja nekoć teške zadatke. Na primjer, kada trebate okomito poravnati element ili pritisnuti podnožje na dno zaslona ili jednostavno umetnuti nekoliko blokova u jedan red tako da zauzmu sav slobodni prostor. Slični problemi mogu se riješiti i bez fleksa. Ali u pravilu, ta su rješenja više poput "štaka" - tehnika za korištenje CSS-a u svrhe koje nisu predviđene. Dok se s flexboxom takvi zadaci rješavaju točno onako kako je flex model namijenjen.

CSS Flexible Box Layout Module (CSS modul za rasporede s fleksibilnim blokovima), skraćeno flexbox, stvoren je kako bi uklonio nedostatke pri izradi najrazličitijih HTML dizajna, uključujući one prilagođene različitim širinama i visinama, te izgled učinio logičnim i jednostavnim . A logičan pristup, u pravilu, djeluje na neočekivanim mjestima, gdje rezultat nije provjeren - logika je sve!

Flexbox vam omogućuje elegantnu kontrolu najviše različite parametre elementi unutar spremnika: smjer, redoslijed, širina, visina, poravnanje uzduž i poprijeko, raspodjela slobodnog prostora, istezanje i sabijanje elemenata.

Osnovno znanje

FlexBox se sastoji od spremnika i njegovih stavki (fleksibilnih elemenata).

Da biste omogućili flexbox, bilo tko HTML element samo dodijelite CSS svojstvo display:flex; ili display:inline-flex; .

1
2

Nakon što omogućite svojstvo flex, unutar spremnika se stvaraju dvije osi: glavna i poprečna (okomita (⊥), poprečna os). Svi ugniježđeni elementi (prve razine) poredani su duž glavne osi. Standardno je glavna os vodoravna i usmjerena slijeva na desno (→), a poprečna os je odgovarajuće okomita i usmjerena odozgo prema dolje (↓).

Glavna i poprečna os se mogu zamijeniti, tada će elementi biti smješteni odozgo prema dolje (↓), a kada više ne odgovaraju po visini, pomaknut će se slijeva na desno (→) - odnosno osi su jednostavno zamijenile mjesta . U tom slučaju početak i kraj rasporeda elemenata se ne mijenjaju – mijenjaju se samo pravci (osi)! Zbog toga morate zamisliti sjekire unutar kontejnera. No, ne treba misliti da postoje neke “fizičke” osovine i da one na nešto utječu. Ovdje je os samo smjer kretanja elemenata unutar spremnika. Na primjer, ako smo odredili poravnanje elemenata prema središtu glavne osi i zatim promijenili smjer ove glavne osi, tada će se poravnanje promijeniti: elementi su bili u sredini vodoravno, ali su postali u sredini okomito... Pogledajte primjer.

Još jedna važna značajka Flexboxa je prisutnost redova u poprečnom smjeru. Da bismo razumjeli o čemu govorimo, zamislimo da postoji glavna vodoravna os, ima mnogo elemenata i oni ne “stanu” u spremnik, pa se pomiču u drugi red. Oni. spremnik izgleda ovako: spremnik s dva reda unutar njega, svaki red sadrži nekoliko elemenata. Predstavljeno? Zapamtite da možemo okomito poravnati ne samo elemente, već i retke! Kako to funkcionira jasno se vidi u primjeru nekretnine. A evo kako to shematski izgleda:

CSS svojstva koja mogu utjecati na model izgleda: float, clear, vertical-align, stupci ne rade u flex dizajnu. Ovdje se koristi drugačiji model za konstruiranje izgleda i ta se CSS svojstva jednostavno ignoriraju.

Flexbox CSS svojstva

Flexbox sadrži različite css pravila za kontrolu cjelokupnog savitljivog dizajna. Neke je potrebno primijeniti na glavni spremnik, a druge na elemente ovog spremnika.

Za kontejner

prikaz:

Omogućuje svojstvo flex za element. Ovo svojstvo pokriva sam element i njegove ugniježđene elemente: utječe samo na potomke prve razine - oni će postati elementi flex spremnika.

  • savijati- element se proteže cijelom širinom i ima svoj puni prostor među okolnim blokovima. Prijelomi redaka javljaju se na početku i na kraju bloka.
  • inline-flex- element je omotan oko drugih elemenata. U ovom slučaju, njegov unutarnji dio je formatiran kao blok element, a sam element je formatiran kao inline.

flex i inline-flex razlikuju se po tome što drugačije komuniciraju s okolnim elementima, slično kao display:block i display:inline-block.

smjer savijanja:

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

  • red (zadano)- smjer elemenata s lijeva na desno (→)
  • stupac- smjer elemenata odozgo prema dolje (↓)
  • red-obrnuti- smjer elemenata s desna na lijevo (←)
  • stupac-revers- smjer elemenata odozdo prema gore ()
flex-wrap:

Kontrolira prijenos elemenata koji ne stanu u spremnik.

  • Nowrap (zadano)- ugniježđeni elementi se postavljaju u jedan red (s direction=row) ili u jedan stupac (s direction=column) bez obzira da li stanu u spremnik ili ne.
  • omotati- uključuje premještanje elemenata u sljedeći red ako ne stanu u spremnik. Time je omogućeno pomicanje elemenata duž poprečne osi.
  • preokrenuti- isto što i wrap, samo prijenos neće biti dolje, već gore (u suprotnom smjeru).
flex-flow: smjerni omot

Kombinira svojstva savijanja i savijanja. Često se koriste zajedno, tako da je stvoreno svojstvo flex-flow da pomogne u pisanju manje koda.

flex-flow prihvaća vrijednosti ova dva svojstva, odvojena razmakom. Ili možete navesti jednu vrijednost za bilo koje svojstvo.

/* samo flex-direction */ flex-flow: red; flex-flow: row-reverse; flex-flow: stupac; flex-flow: stupac-obrnuti; /* samo flex-wrap */ flex-flow: nowrap; flex-flow: omotati; flex-flow: wrap-reverse; /* obje vrijednosti odjednom: flex-direction i flex-wrap */ flex-flow: row nowrap; flex-flow: omotač stupca; flex-flow: stupac-reverse wrap-reverse; opravdanje sadržaja:

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

  • fleksibilni početak (zadano)- elementi će ići od početka (možda će ostati nešto mjesta na kraju).
  • savitljivi kraj- elementi su poravnati na kraju (razmak će ostati na početku)
  • centar- u sredini (prostor će ostati lijevo i desno)
  • razmak između- krajnji vanjski elementi su pritisnuti uz rubove (razmak između elemenata je ravnomjerno raspoređen)
  • prostor-okolo- slobodni prostor je ravnomjerno raspoređen između elemenata (najudaljeniji elementi nisu pritisnuti uz rubove). Razmak između ruba spremnika i vanjskih elemenata bit će upola manji od razmaka između elemenata u sredini reda.
  • prostorno ravnomjerno
poravnati sadržaj:

Poravnava retke koji sadrže elemente duž poprečne osi. Isto kao i justify-content samo za suprotnu os.

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

Oni. ako je flex-direction: row, tada će ovo svojstvo okomito poravnati nevidljive retke. Ovdje je važno napomenuti da visina bloka mora biti rigidno postavljena i mora biti veća od visine redova, inače će sami redovi rastegnuti spremnik i svako njihovo poravnanje postaje besmisleno, jer između njih nema slobodnog prostora. njih... Ali kada je flex-direction: stupac, tada se redovi pomiču vodoravno → i širina spremnika je gotovo uvijek veća od širine redaka i poravnavanje redaka odmah ima smisla...

  • istezanje (zadano)- redovi se razvlače kako bi se red u potpunosti ispunio
  • flex-start- redovi su grupirani na vrhu spremnika (može ostati nešto prostora na kraju).
  • savitljivi kraj- redovi su grupirani na dnu spremnika (prostor će ostati na početku)
  • centar- redovi su grupirani u središtu spremnika (prostor će ostati na rubovima)
  • razmak između- vanjski redovi su pritisnuti uz rubove (razmak između redova je ravnomjerno raspoređen)
  • prostor-okolo- slobodni prostor je ravnomjerno raspoređen između redova (najudaljeniji elementi nisu pritisnuti na rubove). Razmak između ruba spremnika i vanjskih elemenata bit će upola manji od razmaka između elemenata u sredini reda.
  • prostorno ravnomjerno- isto kao space-around, samo je udaljenost između vanjskih elemenata i rubova spremnika ista kao i između elemenata.
poravnanje stavki:

Poravnava elemente duž poprečne osi unutar retka (nevidljivi red). Oni. Sami redovi se poravnavaju preko align-content , a elementi unutar tih redova (redova) se poravnavaju preko align-items i to po cijeloj poprečnoj osi. Ne postoji takva podjela po glavnoj osi, nema koncepta redaka i elementi se poravnavaju kroz justify-content.

  • istezanje (zadano)- elementi se razvlače tako da popune liniju u potpunosti
  • flex-start- elementi su pritisnuti na početak reda
  • savitljivi kraj- elementi su pritisnuti do kraja reda
  • centar- elementi su poravnati prema sredini retka
  • Osnovna linija- elementi su poravnati s osnovnom linijom teksta

Za elemente kontejnera

flex-grow:

Postavlja faktor povećanja elementa kada u spremniku ima slobodnog prostora. Zadani flex-grow: 0 tj. nijedan od elemenata ne bi trebao rasti i puniti se slobodno mjesto u kontejneru.

Zadani flex-grow: 0

  • Ako navedete flex-grow:1 za sve elemente, tada će se svi jednako rastegnuti i ispuniti sav slobodni prostor u spremniku.
  • Ako jednom od elemenata navedete flex-grow:1, on će ispuniti sav slobodni prostor u spremniku i poravnanja putem justify-contenta više neće raditi: nema slobodnog prostora za poravnanje...
  • Uz flex-grow:1 . Ako jedan od njih ima flex-grow:2 tada će biti 2 puta veći od svih ostalih
  • Ako sve flex kutije unutar flex spremnika imaju flex-grow:3 tada će biti iste veličine
  • Uz flex-grow:3 . Ako jedan od njih ima flex-grow:12 onda ć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 je u spremniku ostalo 300 slobodnih piksela. Sada, ako navedemo flex-grow:2; , a drugi flex-grow: 1; , tada će blokovi zauzeti cijelu dostupnu širinu spremnika te će širina prvog bloka biti 300px, a drugog 200px. To se objašnjava činjenicom da je raspoloživih 300px slobodnog prostora u spremniku raspoređeno između elemenata u omjeru 2:1, +200px za prvi i +100px za drugi.

Napomena: u vrijednosti možete navesti razlomke, na primjer: 0,5 - flex-grow:0,5

savijanje:

Postavlja redukcijski faktor elementa. Svojstvo je suprotno od flex-grow i određuje kako bi se element trebao smanjiti ako u spremniku nema slobodnog prostora. Oni. svojstvo počinje raditi kada je zbroj veličina svih elemenata veći od veličine spremnika.

Zadano savijanje:1

Recimo da je spremnik širok 600px i sadrži dva elementa, svaki širok 300px - flex-basis:300px; . Oni. dva elementa potpuno ispunjavaju spremnik. Dajte prvom elementu flex-shrink: 2; , a drugi flex-shrink: 1; . Sada smanjimo širinu spremnika za 300px, tj. elementi se moraju smanjiti za 300px da bi stali u spremnik. Skupljat će se u omjeru 2:1, tj. prvi blok će se smanjiti za 200px, a drugi za 100px i nove veličine elemenata će postati 100px i 200px.

Napomena: u vrijednosti možete navesti razlomke, na primjer: 0,5 - flex-shrink:0,5

fleksibilna osnova:

Postavlja osnovnu širinu elementa - širinu prije nego što se izračunaju drugi uvjeti 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 vrijednostima flex-grow, flex-shrink i sadržaju unutar bloka. Uz auto, element dobiva osnovnu širinu u odnosu na sadržaj unutar njega.

Zadano: automatski

Ponekad je bolje postaviti širinu elementa kroz uobičajeno svojstvo širine. Na primjer, širina: 50%; će značiti da će element unutar spremnika biti točno 50%, ali svojstva savijanja rasta i savijanja skupljanja i dalje će raditi. Ovo može biti potrebno kada je element rastegnut sadržajem unutar njega, više nego što je navedeno u flex-basisu. Primjer.

flex-basis će biti "krut" ako su istezanje i skupljanje postavljeni na nulu: flex-basis:200px; flex-grow:0; savijanje-skupljanje:0; . Sve se to može napisati ovako: flex:0 0 200px; .

savijanje: (rast, skupljanje, baza)

Kratki sažetak tri svojstva: flex-grow flex-shrink flex-basis .

Zadano: fleksibilno: 0 1 automatski

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

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

Omogućuje promjenu svojstva align-items samo za jedan element.

Zadano: iz spremnika align-items

  • protežu se- element je rastegnut da u potpunosti ispuni liniju
  • flex-start- element je pritisnut na početak retka
  • savitljivi kraj- element je pritisnut do kraja retka
  • centar- element je poravnat sa središtem linije
  • Osnovna linija- element je poravnat s osnovnom linijom teksta

narudžba:

Omogućuje promjenu redoslijeda (pozicije, pozicije) elementa u općem retku.

Zadano: poredak: 0

Prema zadanim postavkama, elementi imaju redoslijed: 0 i postavljaju se redoslijedom pojavljivanja u HTML kodu i smjerom retka. Ali ako promijenite vrijednost svojstva poredak, tada će elementi biti raspoređeni po redoslijedu vrijednosti: -1 0 1 2 3 ... . Na primjer, ako navedete redoslijed: 1 za jedan od elemenata, tada će prvo ići sve nule, a zatim element s 1.

Na taj način, primjerice, možete pomaknuti prvi element do kraja bez promjene smjera kretanja ostalih elemenata ili HTML koda.

Bilješke

Koja je razlika između flex-basis i širine?

Ispod su važne razlike između flex-basis i širine/visine:

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

    flex-basis odnosi se samo na flex elemente. To znači da ako onemogućite flex za spremnik, ovo svojstvo neće imati učinka.

    Apsolutni elementi spremnika ne sudjeluju u konstrukciji flex-a... To znači da flex-basis ne utječe na flex elemente spremnika ako su apsolutni position:absolute . Morat će navesti širinu/visinu.

  • Kada koristite svojstvo flex, 3 vrijednosti (flex-grow/flex-shrink/flex-basis) mogu se kombinirati i kratko napisati, ali za širinu grow ili shrink morate pisati odvojeno. Na primjer: flex:0 0 50% == width:50%; savijanje-skupljanje:0; . Ponekad je jednostavno nezgodno.

Ako je moguće, ipak preferirajte fleksibilnu bazu. Koristite širinu samo kada fleksibilna osnova nije prikladna.

Razlika između flex-basis i width - greška ili značajka?

Sadržaj unutar flex elementa ga gura i ne može ići izvan njega. Međutim, ako postavite širinu koristeći width ili max-width umjesto flex-basis, tada će se element unutar flex spremnika moći proširiti izvan granica tog spremnika (ponekad je to upravo ono ponašanje koje želite). Primjer:

Primjeri Flex rasporeda

Nigdje u primjerima ne koriste se prefiksi za kompatibilnost s više preglednika. Ovo sam učinio za lakše čitanje css-a. Stoga pogledajte primjere u najnovije verzije Chrome ili Firefox.

#1 Jednostavan primjer s okomitim i vodoravnim poravnanjem

Krenimo od samog početka jednostavan primjer- vertikalno i horizontalno poravnanje istovremeno i na bilo kojoj visini bloka, čak i gume.

Tekst u sredini

Ili ovako, bez bloka unutra:

Tekst u sredini

#1.2 Razdvajanje (prekid) između savitljivih blok elemenata

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

#2 Prilagodljivi izbornik na flexu

Napravimo izbornik na samom vrhu stranice. Na širokom zaslonu trebao bi biti s desne strane. U prosjeku poravnajte u sredini. A na malom svaki element mora biti u novom retku.

#3 Prilagodljiva 3 stupca

Ovaj primjer pokazuje kako brzo i praktično napraviti 3 stupca, koji će se, kada se suže, pretvoriti u 2, a zatim u 1.

Imajte na umu da se to može učiniti bez korištenja medijskih pravila, sve je na flex-u.

1
2
3
4
5
6

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

#4 Adaptivni blokovi na savitljivosti

Recimo da trebamo ispisati 3 bloka, jedan veliki i dva mala. Pritom je potrebno blokove prilagoditi malim ekranima. Radimo:

1
2
3

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

#5 Galerija sa savijanjem i prijelazom

Ovaj primjer pokazuje kako brzo možete napraviti slatku harmoniku sa slikama koristeći flex. Obratite pozornost na svojstvo prijelaza za flex.

#6 Flex to Flex (samo primjer)

Zadatak je napraviti fleksibilan blok. Tako da početak teksta u svakom bloku bude u istoj liniji vodoravno. Oni. Kako se širina sužava, blokovi rastu u visinu. Potrebno je da je slika na vrhu, gumb je uvijek na dnu, a tekst u sredini počinje duž jedne horizontalne linije...

Kako bi se riješio ovaj problem, sami blokovi se rastežu fleksom i postavljaju na najveću moguću širinu. Svaki unutarnji blok također je fleksibilna struktura, s rotiranom osi flex-direction:column; a element u sredini (gdje je tekst) je rastegnut flex-grow:1; popuniti sav slobodan prostor, ovako se postiže rezultat - tekst je počeo jednim redom...

Više primjera

Podrška preglednika - 98,3%

Naravno, ne postoji puna podrška, ali svi moderni preglednici podržavaju flexbox dizajne. Neki i dalje zahtijevaju prefikse. Za pravu sliku, pogledajmo caniuse.com i vidjet ćemo da će 96,3% preglednika koji se danas koriste raditi bez prefiksa, a 98,3% koristi prefikse. Ovo je izvrstan pokazatelj za pouzdano korištenje flexboxa.

Kako bih znao koji su prefiksi relevantni danas (lipanj 2019.), dat ću primjer svih flex pravila s s potrebnim prefiksima:

/* Spremnik */ .flex ( display:-webkit-box; display:-ms-flexbox; display:flex; display:-webkit-inline-box; display:-ms-inline-flexbox; display:inline-flex; -webkit-box-orient:vertical; -webkit-box-direction:normal; -ms-flex-direction:column; flex-direction:column; -ms-flex-wrap:wrap; flex-wrap:wrap; -ms -flex-flow:prelom stupca; flex-flow:prelom stupca; -webkit-box-pack:poravnanje; -ms-flex-pack:poravnanje; opravdavanje-sadržaja:razmak-između; -ms-flex-line-pack: distribuirati; align-content:space-around; ) /* Elementi */ .flex-item ( -webkit-box-flex:1; -ms-flex-positive:1; flex-grow:1; -ms-flex- negative:2; flex-shrink:2; -ms-flex-preferred-size:100px; flex-basis:100px; -ms-flex:1 2 100px; flex:1 2 100px; -ms-flex-item-align :centar; align-self:center; -webkit-box-ordinal-group:3; -ms-flex-order:2; order:2; )

Bolje je ako svojstva s prefiksima idu ispred izvornog svojstva.
Ovaj popis ne sadrži prefikse koji su danas nepotrebni (prema caniuseu), ali općenito ima više prefiksa.

Krom Safari Firefox Opera tj. Android iOS
20- (stari) 3.1+ (staro) 2-21 (stari) 10 (tweener) 2.1+ (staro) 3.2+ (staro)
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.: display: flexbox; .
  • (staro) - stara sintaksa iz 2009.: display: box;

Video

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

Korisni linkovi na Flexu

    flexboxfroggy.com - flexbox obrazovna igra.

    Flexplorer je vizualni alat za sastavljanje fleksibilnog koda.

Htio bih razgovarati o FlexBoxu. Flexbox-layout modul (fleksibilna kutija - “fleksibilni blok”, na ovaj trenutak W3C Preporuka kandidata ima za cilj ponuditi više učinkovita metoda raspored, poravnanje i raspodjela slobodnog prostora između elemenata u spremniku, čak i kada je njihova veličina nepoznata i/ili dinamična (odatle riječ "fleksibilan").

Glavna ideja fleksibilnog izgleda je dati spremniku mogućnost promjene širine/visine (i redoslijeda) svojih elemenata kako bi se bolje ispunio prostor (u većini slučajeva, kako bi se podržali svi tipovi zaslona i veličine zaslona).Fleksibilni spremnik rasteže elemente da popune prostor ili ih sažima kako bi spriječio njihovo prelijevanje.

Ono što je najvažnije, flexbox raspored ne ovisi o smjeru, za razliku od konvencionalnih izgleda (blokovi raspoređeni okomito i inline elementi raspoređeni vodoravno).Iako je uobičajeni izgled izvrstan za web-stranice, nedostaje mu fleksibilnost za podršku velikim ili složenim aplikacijama (osobito kada je u pitanju promjena orijentacije zaslona, ​​promjena veličine, rastezanje, smanjivanje itd.).

Jer flexbox je cijeli modul, a ne samo jedno svojstvo, on kombinira mnoga svojstva.Neka od njih moraju se primijeniti na spremnik (roditeljski element, koji se naziva savitljivi spremnik), dok se druga svojstva primjenjuju na podređene elemente ili savitljive elemente.

Dok se uobičajeni raspored temelji na smjerovima protoka blok i inline elemenata, fleksibilni raspored temelji se na "fleksibilnim smjerovima protoka".

Flexbox

U osnovi, elementi će biti raspoređeni duž glavne osi (od glavnog početka do glavnog kraja) ili duž poprečne osi (od poprečnog početka do poprečnog kraja).

main-axis — glavna os duž koje se nalaze savitljivi elementi.Imajte na umu da mora biti vodoravan, sve ovisi o kvaliteti justify-sadržaja.
glavni početak | main-end - fleksibilni elementi se postavljaju u spremnik od glavne početne do glavne krajnje pozicije.
glavna veličina — širina ili visina savitljivog elementa ovisno o odabranoj glavnoj veličini.Osnovna veličina može biti širina ili visina elementa.
poprečna os - poprečna os okomita na glavnu.Njegov smjer ovisi o smjeru glavne osi.
unakrsni početak | cross-end - savitljive linije se pune elementima i stavljaju u spremnik od cross-start pozicije i cross-end pozicije.
Veličina križa — širina ili visina fleksibilnog elementa, ovisno o odabranoj dimenziji, jednaka je ovoj vrijednosti.Ovo svojstvo je isto kao širina ili visina elementa ovisno o odabranoj dimenziji.


Svojstva
zaslon: flex | inline-flex;

Definira flex spremnik (umetnuti ili blok ovisno o odabranoj vrijednosti), povezuje flex kontekst za sve njegove neposredne potomke.

prikaz: druge vrijednosti | savijati | inline-flex;

Imati na umu:

CSS stupci ne rade s flex spremnikomfloat, clear i vertical-align ne rade s fleksibilnim stavkama

flex-direction

Primjenjuje se prije nadređenog elementa fleksibilnog spremnika.

Postavlja glavnu os, čime se definira smjer savitljivih stavki smještenih u spremnik.

smjer savijanja: red | red-obrnuti | stupac | stupac-revers

red (zadano): slijeva nadesno za ltr, zdesna nalijevo za rtl;
red-obrnuti: zdesna nalijevo za ltr, slijeva nadesno za rtl;
stupac: sličan redu, odozgo prema dolje;
obrnuti stupac: slično obrnutom redu, odozdo prema gore.

flex-wrap

Primjenjuje se prije nadređenog elementa fleksibilnog spremnika.

Određuje je li spremnik jednolinijski ili višelinijski, kao i smjer poprečne osi, određuje smjer u kojem će se nalaziti nove linije.

flex-wrap: nowrap | omotati | preokrenuti

nowrap (zadano): jedna linija / slijeva nadesno za ltr, zdesna nalijevo za rtl;
prelomi: više reda / slijeva na desno za ltr, zdesna nalijevo za rtl;
wrap-reverse: više reda / zdesna nalijevo za ltr, slijeva nadesno za rtl.

flex-flow

Primjenjuje se prije nadređenog elementa fleksibilnog spremnika.

Ovo je skraćenica za svojstva flex-direction i flex-wrap, koja zajedno definiraju glavnu i poprečnu os.Zadana vrijednost je row nowrap.

flex-flow< ‘flex-direction’> || < ‘Flex-wrap’>

opravdati-sadržaj

Primjenjuje se prije nadređenog elementa fleksibilnog spremnika.

Definira poravnanje u odnosu na glavnu os.Pomaže u raspodjeli slobodnog prostora u slučaju kada se linijski elementi ne "rastežu" ili rastežu, ali su već dosegli svoju maksimalnu veličinu.Također omogućuje određenu kontrolu nad poravnavanjem elemenata kada idu izvan linije.

justify-content: flex-start | savitljivi kraj | centar | razmak između | prostor-okolo

flex-start (zadano): stavke se pomiču na početak retka;
flex-end: elementi se pomiču na kraj retka;
centar: elementi su poravnati na sredinu crte;
razmak između: elementi su ravnomjerno raspoređeni (prvi element na početku retka, posljednji na kraju)
space-around: elementi su ravnomjerno raspoređeni s jednakom udaljenošću između sebe i izvan linije.

opravdati-sadržaj
align-items

Primjenjuje se prije nadređenog elementa fleksibilnog spremnika.

Definira zadano ponašanje za pozicioniranje fleksibilnih stavki u odnosu na poprečnu os na trenutnom retku.Zamislite to kao verziju justify-content-a za poprečnu os (okomitu na glavnu).

align-items: flex-start | savitljivi kraj | centar | osnovna linija | protežu se

flex-start: poprečna početna granica za elemente koji se nalaze na poprečnoj početnoj poziciji;
flex-end: poprečni rub za elemente koji se nalaze na poprečnom položaju;
centar: elementi su poravnati prema središtu poprečne osi;
osnovna linija: elementi su poravnati sa svojom osnovnom linijom;
rastezanje (zadano): elementi se rastežu kako bi ispunili spremnik (uzimajući u obzir minimalnu/maksimalnu širinu).


align-items
poravnati sadržaj

Primjenjuje se prije nadređenog elementa fleksibilnog spremnika. Poravnava retke fleksibilnog spremnika kada ima slobodnog prostora na poprečnoj osi, slično kao što to čini justify-content na glavnoj osi. Napomena: ovo svojstvo ne radi s jednolinijskim fleksibilnim okvirima.

align-content: flex-start | savitljivi kraj | centar | razmak između | prostor-oko | protežu se

flex-start: linije su poravnate u odnosu na početak spremnika;
flex-end: linije su poravnate u odnosu na kraj spremnika;
centar: linije su poravnate sa središtem spremnika;
razmak između: redovi su ravnomjerno raspoređeni (prvi red na početku retka, posljednji na kraju)
space-around: linije su ravnomjerno raspoređene s jednakom međusobnom udaljenošću;
rastezanje (zadano): linije se rastežu kako bi ispunile raspoloživi prostor.

poravnati sadržaj
narudžba

Prema zadanim postavkama, fleksibilne stavke raspoređene su u izvornom redoslijedu.Međutim, svojstvo reda može kontrolirati redoslijed kojim se pojavljuju u spremniku.

narudžba 1

flex-grow

Primjenjuje se na element dijete/element flex. Definira sposobnost savitljivog elementa da "naraste" ako je potrebno.Poprima bezdimenzionalnu vrijednost i služi kao proporcija.Određuje koliko slobodnog prostora element može zauzeti unutar spremnika. Ako svi elementi imaju svojstvo flex-grow postavljeno na 1, tada će svako dijete dobiti istu veličinu unutar spremnika.Ako jedno od djece postavite na 2, zauzimat će dvostruko više prostora od ostalih.

flex-grow (zadano 0)

flex-shrink

Primjenjuje se na element dijete/element flex.

Definira mogućnost da se savitljiva stavka smanji kada je to potrebno.

flex-shrink (zadano 1)

Negativni brojevi se ne prihvaćaju.
flex-osnova

Primjenjuje se na element dijete/element flex. Definira zadanu veličinu za element prije dodjele prostora u spremniku.

flex-osnova | automatski (zadani automatski)

savijati

Primjenjuje se na element dijete/element flex. Ovo je skraćenica za flex-grow, flex-shrink i flex-basis.Drugi i treći parametar (flex-shrink, flex-basis) nisu obavezni.Zadana vrijednost je 0 1 automatski.

savijati: nema | [< ‘Flex-grow «> <» flex-shrink’>? || < ‘Flex-basis’>]

poravnati se

Primjenjuje se na element dijete/element flex. Omogućuje nadjačavanje zadanog ili poravnanja stavki poravnanja za pojedinačne fleksibilne stavke. Za bolje razumijevanje dostupnih vrijednosti pogledajte opis svojstva align-items.

align-self: auto | fleksibilni početak | savitljivi kraj | centar | osnovna linija | protežu se

Primjeri
Počnimo s vrlo, vrlo jednostavnim primjerom koji se pojavljuje gotovo svaki dan: poravnavanje točno u središte.Ništa lakše ako koristite flexbox.

Roditelj ( display: flex; height: 300px; ) .child ( width: 100px; / * Whatever * / height: 100px; / * Whatever * / margin: auto; / * Magic! * / )

Ovaj se primjer oslanja na činjenicu da margina ispod flex spremnika, postavljena na auto, zauzima dodatni prostor, tako da će zadatak uvlačenja na ovaj način poravnati element točno u središte obje osi. Sada upotrijebimo neka svojstva.Zamislite skup od 6 elemenata fiksne veličine (radi ljepote), ali s mogućnošću promjene veličine spremnika.Želimo ih ravnomjerno vodoravno rasporediti tako da kada promijenimo veličinu prozora preglednika sve izgleda dobro (bez @media upita!).

Flex-kontejner (
/ * Prvo, stvorimo flex kontekst * /
zaslon: savitljiv;

/* Sada odredimo smjer toka i želimo li elemente
prebačen na nova linija
*Zapamtite da je ovo isto što i:
* Flex-smjer: red;
* Flex-wrap: omot;
* /
flex-flow: omotavanje reda;

/ * Sada odredimo kako će prostor biti raspoređen * /
}

Spreman. Sve ostalo je stvar registracije. Pokušajmo nešto drugo.Zamislite da želimo desno poravnatu navigaciju na samom vrhu našeg web mjesta, ali želimo da bude središnje poravnata na zaslonima srednje veličine i da postane jedan stupac na malim zaslonima.Sve je vrlo jednostavno.

/*Veliki ekrani*/
.navigacija(
zaslon: savitljiv;
flex-flow: omotavanje reda;
/* Pomiče elemente na kraj retka duž glavne osi * /
justify-content: flex-end;
}

mediji sve i (maksimalna širina: 800 px) (
.navigacija(
/* Za srednje zaslone centriramo navigaciju,
ravnomjerno raspoređivanje slobodnog prostora između elemenata * /
justify-content: space-around;
}
}

/*Mali ekrani*/
mediji sve i (maksimalna širina: 500 px) (
.navigacija(
/ * Na malim ekranima, umjesto u red, elemente slažemo u stupac * /
smjer savijanja: stupac;
}
}

Igrajmo se s fleksibilnošću savitljivih predmeta!Što kažete na izgled s tri stupca prilagođen mobilnim uređajima s zaglavljem i podnožjem pune širine?I to drugačijim redoslijedom.

Omot (
zaslon: savitljiv;
flex-flow: omotavanje reda;
}

/ * Postavite sve elemente na 100% širine * /
.zaglavlje, .glavno, .nav, .strano, .podnožje (
savitljivost 1100%;
}

/* U ovom slučaju oslanjamo se na izvornu narudžbu da nas vodi
* Mobilni uredaji:
* 1 zaglavlje
* 2 nav
* 3 glavne
* 4 u stranu
* 5 podnožje
* /

/*Srednji zasloni*/
mediji sve i (min. širina: 600 px) (
/ * Obje bočne trake nalaze se na istoj liniji * /
.na stranu (flex: 1 auto; )
}

/*Veliki ekrani*/

Na primjeru oblika iz realnog ispitni zadatak, pokazat ću ti kako slagati BEM korištenjem flexbox. Možete pitati: “Zašto je potrebno slagati prema BEM + Flexbox?" Ovaj zahtjev dolazi od poslodavca. Citat iz izjave o radu: "Pokušajte slagati bez okvira (po mogućnosti na flexbox), jednostavno i jasno: izbjegavajte glomazne strukture i nepotreban kod, koristite metodologiju BEM."

Ulomak izgleda presjeka s formom

Moja pravila rasporeda

  1. Podijelite izgled na logične dijelove
  2. Svaki odjeljak započnite oznakom odjeljak
  3. Odvojeni dijelovi i CSS vladaju jedna od druge, prazna linija
  4. Dodijelite klasu svakoj oznaci
  5. Naziv klase za blok ili element, odgovara na pitanje - Što je to?
  6. Naziv modifikatora odgovara na pitanje - Koji?

HTML označavanje

Prvo napravim oznake, odredim ugniježđenost blokova i smislim nazive za klase. U donjem kodu imamo dvije ugrađene oznake - h2 I ulazni. Inline oznake su glavobolja i uzrok stresa za dizajnere izgleda početnike. Zašto? Ponašaju se vrlo loše - pokušavaju zauzeti cijelu dostupnu širinu i ne dopuštaju vam da postavite boju pozadine i dimenzije cijelog bloka.



osobne informacije











Što u ovom slučaju radi loš dizajner izgleda? Omotava ugrađene elemente u blok oznake div i postavlja sva potrebna svojstva omotne oznake. Podređeni ugrađeni elementi nasljeđuju ova svojstva. Vrijedi li se truditi oko dodatnog koda? Što bi kompetentan dizajner izgleda učinio? Redefinirat će umetnuti element u blok ili umetnuti blok CSS pravila

Prikaz: blok; // za ulaznu oznaku
prikaz: inline-block; // za h2 oznaku

Logika gniježđenja i imena blokova

Vidimo odjeljak s osobnim podacima, pa nazivamo odjeljak klasa - info. Odjeljak se sastoji od tri podređena elementa:

Ikona // naziv klase info__ikona
naslov // info__naslov
obrazac // info__obrazac

Poanta je u nazivima klasa BEM, sastoji se u pripadnosti podređenog elementa roditelju. Element se ne može imenovati ikona. Ovo nije bilo koja ikona, već ikona iz odjeljka info.

Kći i roditelj zajedno

Blok info__obrazac, imamo poseban - ugniježđen je u odjeljku info, ali u isto vrijeme sadrži polja obrazaca. Naziv ovog fenomena je multi-level nesting. Blok s obrascem ima samo funkciju omotača za unose, tako da možete jednostavno postaviti vanjske margine. Uostalom, upisi s malim slovima ponašaju se kao djeca (što i jesu), uopće se ne pokoravaju. Štoviše, drugi ulaz je kraći od svih ostalih i razlikuje se samo po širini.

Postavili smo jednu klasu za sve ulaze s istim svojstvima, osim širine - info__unos. Za redovne unose dodajte modifikator info__input_long, a kratki unos dobiva modifikator info__unos_kratko. Dopustite mi da vas podsjetim da modifikator BEM, treba odgovoriti na pitanje - Koji?









CSS pravila za modifikatore

.info__input_long(
širina: 520px;
}

Info__input_short(
širina: 320px;
}

CSS kod

U HTML markup stvara grubu strukturu stranice, u CSS, već postavljamo elemente prema rasporedu. Danas se nećemo dirati izgled, ali usredotočimo se na pozicioniranje elemenata. U našem dijelu nalaze se dva fleks kontejnera. Mora se reći da je upotreba fleksa, kada su svi elementi smješteni jedan po jedan na liniji, vrlo upitna. Jedina dobivena korist je imovina opravdati-sadržaj, centrirani, savitljivi elementi. U svoju obranu mogu reći da je ideja o fleksima besmislena samo u kontekstu ovog odjeljka. Pravi izgled za izgled obično ima više raznolikosti.

Informacije (
zaslon: savitljiv;
justify-content: centar;
align-items: center;
smjer savijanja: stupac;
margin-top: 77px;
visina: 100%;
}

Info__obrazac(
zaslon: savitljiv;
justify-content: centar;
smjer savijanja: stupac;
visina: 100%;
margin-top: 50px;

Svojstvo align-content specificira vrstu poravnanja linija unutar flex spremnika duž poprečne osi ako postoji slobodan prostor.

Odnosi se na: fleksibilni spremnik.

Zadana vrijednost: istezanje.

Flex-start Linije se nalaze na početku poprečne osi. Svaki sljedeći red je u ravnini s prethodnim. flex-end Redovi se postavljaju počevši od kraja poprečne osi. Svaki prethodni red je u ravnini sa sljedećim. središte Linije su postavljene u središte spremnika. space-between Linije su ravnomjerno raspoređene u posudi i udaljenost između njih je ista. space-around Linije su ravnomjerno raspoređene tako da je razmak između dvije susjedne crte isti. Prazan prostor prije prvog retka i iza zadnjeg retka jednak je polovici razmaka između dva susjedna retka. space-evenly Redovi su ravnomjerno raspoređeni. Bijeli prostor prije prvog retka i iza zadnjeg retka jednake je širine kao i ostali redovi. stretch Linije su ravnomjerno rastegnute kako bi ispunile raspoloživi prostor.

Svojstvo align-content poravnava linije fleksibilnog spremnika unutar fleksibilnog spremnika kada postoji dodatni prostor u poprečnoj osi, slično kao što justify-content poravnava pojedinačne stavke unutar glavne osi. Imajte na umu da ovo svojstvo nema učinka na jednolinijski fleksibilni spremnik. Vrijednosti imaju sljedeća značenja:

Napomena: Samo višelinijski savitljivi spremnici ikada imaju slobodan prostor u poprečnoj osi za linije koje treba poravnati, jer se u jednolinijskim savitljivim spremnicima jedina linija automatski rasteže kako bi ispunila prostor.

Odnosi se na:flex spremnici.

Početna: istezanje.

Flex-start linije su pakirane prema početku fleksibilnog spremnika. Poprečni početni rub prve linije u savitljivom spremniku postavlja se u ravnini s poprečnim početnim rubom savitljivog spremnika, a svaki sljedeći redak postavlja se u ravnini s prethodnim. flex-end Linije su pakirane prema kraju flex spremnika. Poprečni rub posljednje linije postavljen je u ravnini s poprečnim rubom fleksibilnog spremnika, a svaka prethodna linija postavljena je u ravnini s sljedećom linijom. središnje linije su pakirane prema sredini fleksibilnog spremnika. Linije u savitljivom spremniku postavljene su u ravnini jedna s drugom i poravnate u sredini savitljivog spremnika, s jednakim razmakom između poprečnog ruba sadržaja savitljivog spremnika i prvog retka u savitljivom spremniku, te između cross-end content rub flex spremnika i zadnji redak u flex spremniku. (Ako je preostali slobodni prostor negativan, linije će se prelijevati jednako u oba smjera.) space-between Linije su ravnomjerno raspoređene u flex spremniku. Ako je preostali slobodni prostor negativan, ova vrijednost je identična fleksibilnom startu. U suprotnom, poprečni rub prvog retka u fleksibilnom spremniku postavljen je u ravnini s poprečnim početnim rubom sadržaja fleksibilnog spremnika, poprečni rub zadnjeg retka u fleksibilnom spremniku postavljen je u ravnini s križnim krajnjeg ruba sadržaja savitljivog spremnika, a preostale linije u savitljivom spremniku raspoređene su tako da je razmak između bilo koje dvije susjedne linije isti. space-around Linije su ravnomjerno raspoređene u fleksibilnom spremniku, s razmacima upola veličine na oba kraja. Ako je preostali slobodni prostor negativan, ova vrijednost je identična središnjoj. U suprotnom, linije u fleksibilnom spremniku raspoređene su tako da je razmak između bilo koje dvije susjedne linije isti, a razmak između prvih/zadnjih redaka i rubova fleksibilnog spremnika polovica je veličine razmaka između fleksibilnih linija. space-evenly Linije su ravnomjerno raspoređene u fleksibilnom spremniku. Ako je preostali slobodni prostor negativan, ova vrijednost je identična središnjoj. Inače, linije u fleksibilnom spremniku su raspoređene tako da je razmak između svake fleksibilne linije isti. rastezanje Linije se rastežu kako bi zauzele preostali prostor. Ako je preostali slobodni prostor negativan, ova vrijednost je identična fleksibilnom startu. U suprotnom, slobodni prostor je jednako podijeljen između svih linija, povećavajući njihovu križnu veličinu.

U ovom ćemo članku predstaviti tehnologiju CSS Flexbox, osmišljenu za izradu fleksibilnih izgleda web stranica.

Svrha CSS Flexboxa

CSS Flexbox je za stvaranje fleksibilnih izgleda. Koristeći ovu tehnologiju možete vrlo jednostavno i fleksibilno rasporediti elemente u spremnik, raspodijeliti raspoloživi prostor između njih i poravnati ih na ovaj ili onaj način, čak i ako nemaju određene dimenzije.

CSS Flexbox vam omogućuje stvaranje adaptivni dizajn puno lakše nego korištenjem Float i pozicioniranja.

Flexbox se može koristiti i za CSS označavanje cijele stranice i njezinih pojedinačnih blokova.

Podrška preglednika za CSS Flexbox

CSS Flexbox podržavaju svi trenutno korišteni moderni preglednici(koristeći prefikse: IE10+, Edge12+, Firefox 2+, Chrome 4+, Safari 3.1+, Opera 12.1+, iOS Safari 3.2, Opera mini, Android 2.1+, Blackberry 7+).

Osnove CSS Flexboxa

Stvaranje CSS markupa pomoću Flexboxa počinje postavljanjem svojstva CSS prikaza potrebnog HTML elementa na flex ili flex-inline.

Nakon toga ovaj element postaje fleksibilni spremnik, i sve to direktno dječji elementi– savitljivi elementi. Štoviše, kada govorimo o flexboxu, mislimo samo na element s display:flex ili display:flex-inline i sve elemente direktno koji se nalazi u njemu. Dakle, u CSS Flexboxu postoje samo dvije vrste elemenata: flex kontejner i flex element.


Svojstva prefiksa i maksimalne širine dodana su u CSS za podršku izgleda u većini preglednika.

Da biste "pretvorili" blok u fleksibilni spremnik, koristite klasu reda. Postavljanje širine .col__article i .col__aside flex elemenata unutar flex spremnika vrši se korištenjem flex CSS svojstva.

Kao primjer, označimo još jedno podnožje pomoću flexboxa i stvorimo blok koji se sastoji od tri elementa u elementu .col__article (minimalna širina jednog elementa je 300 px). U podnožje ćemo postaviti četiri bloka (minimalna širina jednog bloka je 200px).