CSS flex indress între elemente. Alinierea blocurilor cu CSS utilizând recipientul Flex

CSS Flexbox. (Modul flexibil al layout-ului casetei) - modulul layout-ului flexibil al containerului este o metodă de elemente de așezare, bazată pe axa este bazată pe.

FlexBox este alcătuită din afară flex container (Flex Container) și elemente flexibile (elemente flexibile). Elementele flexibile pot fi construite în șir sau coloană, iar spațiul liber rămas este distribuit între ele în diferite moduri.

Modulul FlexBox vă permite să rezolvați următoarele sarcini:

  • Plasați elemente în una din cele patru direcții: de la stânga la dreapta, dreapta stânga, sus în jos sau de jos în sus.
  • Suprascrie procedura pentru afișarea elementelor.
  • Determină automat dimensiunile elementelor astfel încât să se potrivească în spațiul accesibil.
  • Rezolvați problema cu centrele orizontale și verticale.
  • Transferați elementele din interiorul recipientului fără a permite depășirea acestuia.
  • Creați coloane de aceeași înălțime.
  • Creați apăsat în partea de jos a paginii.

FlexBox rezolvă sarcini specifice - crearea unor dispozitive unidimensionale, de exemplu, panoul de navigație, deoarece elementele Flex pot fi plasate numai pe unul dintre axe.

Lista problemelor actuale ale modulului și soluțiilor transfrontaliere pentru ele puteți citi în articolul Philip Walton.

Ce este FlexBox

Sprijiniți browserele

Adică: 11.0, 10.0 -M-
Firefox: 28,0, 18,0 -Moz-
Crom: 29.0, 21.0 -Webkit-
Safari: 6.1 -Webkit-
Operă: 12.1 -Webkit.
iOS Safari: 7.0 -Webkit-
Opera mini: 8
Android Browser: 4.4, 4.1 -Webkit-
Chrome pentru Android: 44

1. Concepte de bază

Smochin. 1. Modelul FlexBox

Pentru a descrie modulul FlexBox, se utilizează un anumit set de termeni. Valoarea Flex-Flow și modul de înregistrare determină corespondența acestor termeni la direcțiile fizice: partea de sus / dreapta / jos / stânga, axe: verticală / orizontală și dimensiune: lățime / înălțime.

Axa principală - Axa de-a lungul căreia sunt stabilite elementele Flex. Se extinde în principal măsurarea.

Start principal și capătul principal - linii care definesc partea inițială și finală a containerului Flex, în raport cu care sunt stabilite elementele Flex (începând cu pornirea principală spre capătul principal).

Dimensiunea principală) - lățimea sau înălțimea containerului Flex sau a elementelor flexibile, în funcție de faptul că acestea sunt măsurate în principal, determină dimensiunea principală a recipientului Flex sau a elementului Flex.

Axa încrucișată. - Axa perpendiculară pe axa principală. Se extinde în dimensiunea transversală.

Cross Start și Cross capăt - Liniile care definesc partea inițială și cea finală a axei transversale față de care sunt stabilite elementele Flex.

Cruce) - Lățimea sau înălțimea elementelor flex-container sau flexibile, în funcție de ceea ce este în dimensiunea transversală, sunt dimensiunea lor transversală.


Smochin. 2. Modul de rând și coloana

2. Flex-container

Flex Container stabilește un nou context flexibil de formatare pentru conținutul său. Containerul Flex nu este un recipient bloc, prin urmare, astfel de proprietăți CSS, cum ar fi float, limpede, vertical-align nu funcționează pentru elementele copilului. De asemenea, recipientul Flex nu afectează proprietățile coloanei *, creând difuzoare în text și Pseudo-elemente :: First-Line și :: prima scrisoare.

Modelul MARKUP FLEXBOX este asociat cu o anumită valoare a proprietății CSS a afișării elementului HTML părinte care conține blocuri sub-electorale din interiorul în sine. Pentru a controla elementele utilizând acest model, trebuie să setați proprietatea afișată după cum urmează:

Flex-container (/ * generează un bloc Flex-container * / Afișaj: -Webkit-Flex; Afișaj: flex;) .flex-container (/ * generează un nivel de șir flex-container * / Afișaj: -Webkit-Inline-Flex ; Afișaj: Inline-Flex;)

După instalarea acestor valori de proprietăți, fiecare element copil devine automat un element Flex, setând într-un rând (de-a lungul axei principale). În acest caz, elementele de blocare și litere mici se comportă în mod egal, adică. Lățimea blocurilor este egală cu lățimea conținutului lor, luând în considerare câmpurile interioare și cadre ale elementului.


Smochin. 3. Elemente de aliniere în modelul FlexBox

Dacă blocul părinte conține text sau imagini fără ambalaje, ele devin elemente anonime de flexie. Textul este de nivelare peste marginea superioară a blocului de containere, iar înălțimea imaginii devine egală cu înălțimea blocului, adică. Este deformat.

3. Elemente flexibile

Elemente flexibile - Blocuri reprezentând conținutul recipientului Flex în flux. Containerul Flex stabilește un nou context de formatare pentru conținutul său, ceea ce determină următoarele caracteristici:

  • Pentru elementele Flex, valoarea lor a proprietății afișajului este blocată. Valoarea afișajului: blocul inline; și afișați: celulă de masă; calculat în afișaj: bloc; .
  • Spațiul gol între elemente dispare: nu devine propriul element flexibil, chiar dacă textul inter-element este înfășurat într-un element de flexic anonim. Pentru conținutul unui element flexic anonim, este imposibil să setați propriile stiluri, dar le va moșteni (de exemplu, parametrii fontului) de la recipientul Flex.
  • Elementul Flex absolut poziționat nu participă la aspectul layout.
  • Câmpurile de marjă, elementele flexibile adiacente nu sunt prăbușite.
  • Valorile procentuale ale marginii și umplerii sunt calculate din dimensiunea internă a blocului care le conține.
  • marja: Auto; Se extinde, absorbind un spațiu suplimentar în măsurarea corespunzătoare. Ele pot fi folosite pentru a se alinia sau răspândi elemente flexibile adiacente.
  • Dimensiunea minimă automată a elementelor flexibile în mod implicit este dimensiunea minimă a conținutului său, adică min-lățime: Auto; . Pentru derularea containerelor, dimensiunea minimă automată este de obicei zero.

4. Elemente flexibile și orientare

Conținutul containerului Flex poate fi descompus în orice direcție și în orice ordine (reordonarea elementelor flexibile din interiorul recipientului afectează numai redarea vizuală).

4.1. Direcția axei principale: Direcția Flex

Proprietatea aparține containerului Flex. Gestionează direcția axei principale, de-a lungul căreia elementele Flex sunt stivuite, în conformitate cu modul curent de înregistrare. Nu este moștenit.

direcție flexibilă.
Valori:
Rând Valoarea implicită de la stânga la dreapta (în RTL la stânga dreapta). Elementele flexibile sunt așezate în șir. Începutul (pornirea principală) și direcțiile de capăt (principalele) ale axei principale corespund începutului (inline-start) și un capăt (inline-capăt) axei inline (axa inline).
Row-Reverse. Direcția spre stânga stânga (în RTL la stânga la dreapta). Elementele flexibile sunt așezate în șirul față de marginea dreaptă a recipientului (în stânga RTL).
coloană. Direcția de sus în jos. Elementele Flex sunt stabilite în coloană.
Coloana-invers. Coloană cu elemente în ordine inversă, de jos în sus.
iniţială
moşteni.

Smochin. 4. Proprietatea flexibilă pentru limbile stângi la dreapta

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; -Webkit-Flex-Direcție: Row-Reverse; Afișaj: Flex; Flex-Direcție: Row-Reverse;)

4.2. Gestionarea containerului multi-flex: Flex-Wrap

Proprietatea determină dacă recipientul Flex va fi unic sau multi-linie și, de asemenea, stabilește direcția axei transversale, care determină direcția de a stabili noi linii de containere flexibile.

În mod implicit, elementele Flex sunt stivuite într-o singură linie de-a lungul axei principale. Când se scurge, vor depăși cadrul limită al recipientului Flex. Proprietatea nu este moștenită.


Smochin. 5. Gestionarea multi-stream utilizând proprietățile flex-wrap pentru LTR-limbi

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; -Webkit-Flex-Wrap: Wrap; Afișaj: Flex; Flex-Wrap: Wrap;)

4.3. Rezumatul direcției și multiplay-ului: Flex-flux

Proprietatea vă permite să determinați instrucțiunile axelor principale și transversale, precum și posibilitatea de a transfera elemente flexibile dacă este necesar pentru mai multe linii. Este o înregistrare abreviată a proprietăților Flex-Direcție și Flex-Wrap. Valoarea implicită este Flex-Flow: rândul Nowrap; . Proprietatea nu este moștenită.

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; -Webkit-Flex-Flow: Wrap Row; Afișaj: Flex, Flex-Flow: Înfășurator rând;)

4.4. Comandă de afișare a elementului Flex: comandă

Proprietatea determină ordinea în care elementele Flex sunt afișate și amplasate în interiorul recipientului Flex. Se aplică elementelor flexibile. Proprietatea nu este moștenită.

Inițial, toate elementele flexibile au ordine: 0; . Când specificați valoarea de la -1 pentru element, se mută la începutul timpului, valoarea 1 - până la capăt. Dacă mai multe elemente Flex au aceeași valoare a comenzii, acestea vor fi afișate în conformitate cu ordinea inițială.

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; Afișaj: Flex;) .flex-element (-Webkit-comandă: 1; Ordine: 1;)
Smochin. 6. Comandă de afișare cu elemente flexibile

5. Elemente flexibile flexibile

Aspectul determinant al unui aspect flexibil este abilitatea de a "îndoi" elementele flexibile, schimbarea lățimii / înălțimii lor (în funcție de dimensiunea pe axa principală) pentru a completa spațiul disponibil în dimensiunea principală. Acest lucru se face folosind proprietatea Flex. Containerul Flex distribuie spațiul liber între elementele copilului (proporțional cu coeficientul lor de creștere flexibilă) pentru a umple recipientul sau pentru a le comprima (proporțional cu coeficientul de contracție flexibilă) pentru a preveni scurgerea.

Elementul Flex va fi complet "inflexibil" dacă valorile sale Flex-Grow și Flex-Shrink sunt zero și altfel "flexibil".

5.1. Set de dimensiuni flexibile cu o proprietate: Flex

Proprietatea este o înregistrare abreviată a proprietăților Flex-crescătorie, flex-contracție și flexibilă. Valoare implicită: Flex: 0 1 Auto; . Puteți specifica atât una cât și toate cele trei proprietăți. Proprietatea nu este moștenită.

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; Afișaj: Flex;) .flex-element (-Webkit-Flex: 3 1 100px; -m-flex: 3 1 100px; Flex: 3 1 100px;)

5.2. Coeficientul de creștere: creșterea flexibilă

Proprietatea determină coeficientul de creștere al unui element flexibil față de alte elemente flexibile din recipientul Flex în timpul distribuției spațiului liber pozitiv. Dacă suma valorilor elementelor flexibile Flex-Grow în șir este mai mică de 1, ei ocupă mai puțin de 100% din spațiul liber. Proprietatea nu este moștenită.


Smochin. 7. Gestionarea spațiului liber în panoul de navigare utilizând Flex-Grow

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; Afișaj: Flex;) .flex-element (-webit-flex-crescă: 3; Flex-crescă: 3;)

5.3. Raportul de compresie: Flex-Shrink

Proprietatea indică coeficientul de compresie al elementului Flex față de alte elemente flexibile în timpul distribuției spațiului liber negativ. Se înmulțește cu dimensiunea de bază a bazei flexibile. Spațiul negativ este distribuit proporțional cu momentul în care elementul poate fi sancționat, de exemplu, un mic element Flex nu va scădea la zero până când elementul Flex este redus considerabil. dimensiune mai mare. Proprietatea nu este moștenită.


Smochin. 8. Ridicarea elementelor flexibile în șir

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; Afișaj: Flex;) .flex-element (-webkit-flex-contracție: 3; flex-contracție: 3;)

5.4. Dimensiune de bază: flex-bază

Proprietatea stabilește dimensiunea principală inițială a elementului Flex înainte de distribuirea spațiului liber în conformitate cu coeficienții de flexibilitate. Pentru toate valorile, cu excepția Auto și a conținutului, dimensiunea flexibilă de bază este definită, precum și lățimea în modurile de înregistrare orizontală. Valorile procentuale sunt determinate în raport cu dimensiunea recipientului Flex și, dacă dimensiunea nu este specificată, valoarea utilizată pentru flexibilă este dimensiunea conținutului său. Nu este moștenit.

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; Afișaj: flex;) .flex-element (-webit-flex-bază: 100px; flex-bază: 100px;)

6. Aliniere

6.1. Alinierea pe axa principală: justificați-conținutul

Proprietatea aliniază elementele flexibile de-a lungul axei principale a recipientului Flex, distribuind spațiul liber, neocupat de elemente Flex. Când elementul este convertit într-un recipient Flex, elementele implicite Flex sunt grupate împreună (dacă câmpul de margine nu este specificat). Se adaugă lacunele după calcularea valorilor marjei și creșterii flexibile. Dacă eventualele elemente au o valoare non-zero de Flex-Grow sau Margin: Auto; Proprietatea nu va avea nicio influență. Proprietatea nu este moștenită.

Valori:
Flex-start. Valoarea implicită. Elementele flexibile sunt așezate în direcția venind de la linia inițială a recipientului Flex.
Flex-end. Elementele flexibile sunt stabilite în direcția venită de la linia finală a recipientului Flex.
Centru Elementele Flex sunt aliniate în centrul recipientului Flex.
Spațiu-între. Elementele flexibile sunt distribuite uniform pe linie. Primul element Flex este plasat pe marginea liniei inițiale, ultimul element Flex este de a spăla cu marginea liniei finale, iar elementele Flex rămase de pe linie sunt distribuite astfel încât distanța dintre cele două elemente adiacente aceeași. Dacă spațiul liber rămas este negativ sau în șir, există un singur element Flex, această valoare este identică cu parametrul Flex-Start.
Spațiu-în jur. Elementele flexibile pe linii sunt distribuite astfel încât distanța dintre cele două elemente flexibile adiacente să fie aceeași, iar distanța dintre primele / ultimele elemente flexibile și marginile containerului Flex au variat de la distanța dintre elementele Flex.
iniţială Setează valoarea imobilului implicit.
moşteni. Moștenește valoarea proprietății de la elementul-mamă.

Smochin. 9. Alinierea elementelor și distribuția spațiului liber utilizând proprietățile de conținut justificate

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; -Webkit-Justify-Content: Flex-Start; Afișaj: Flex; Justify-Conținut: Flex-Start;)

6.2. Aliniați axa transversală: aliniați și aliniați-sine

Elementele Flex pot fi aliniate pe axa transversală a liniei curente a recipientului Flex. Align-elemente stabilește alinierea pentru toate elementele Flex-Container, inclusiv elemente flexibile anonime. Align-Self vă permite să înlocuiți această aliniere pentru elemente individuale flexibile. Dacă oricare dintre elementele transversale Flex este auto, align-sine nu are efect.

6.2.1. Aliniați-elemente.

Proprietatea aliniază elementele flexibile, inclusiv elemente flexibile anonime pe axa transversală. Nu este moștenit.

Valori:
Flex-start.
Flex-end.
Centru
De bază Liniile de bază ale tuturor elementelor flexibile implicate în aliniere coincid.
Întinde.
iniţială Setează valoarea imobilului implicit.
moşteni. Moștenește valoarea proprietății de la elementul-mamă.
Smochin. 10. Alinierea elementelor într-un recipient vertical

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; -Webkit-Align-elemente: Flex-Start; Afișaj: Flex; Align-elemente: Flex-start;)

6.2.2. Aliniați-sine.

Proprietatea este responsabilă pentru alinierea unui element flexibil separat în înălțimea recipientului Flex. Suprascrie alinierea specificată de elementele aliniere. Nu este moștenit.

Valori:
AUTO. Valoarea implicită. Elementul Flex utilizează alinierea specificată în proprietatea de containere flexibilă de aliniere.
Flex-start. Marginea superioară a elementului Flex este plasată îndeaproape cu linia Flex (sau la distanță, luând în considerare câmpurile de marjă specificate și cadrul de frontieră a elementului) trecând prin începerea axei transversale.
Flex-end. Marginea inferioară a elementului Flex este plasată îndeaproape cu linia Flex (sau la distanță, luând în considerare câmpurile de marjă specificate și cadrul de frontieră a elementului) care trece prin capătul axei transversale.
Centru Câmpurile elementului Flex sunt centrate pe axa transversală din linia Flex.
De bază Elementul Flex este aliniat la linia de bază.
Întinde. Dacă dimensiunea transversală a elementului Flex este calculată ca auto și nici una dintre valorile transversale ale marjei nu este egală cu Auto, elementul este întins. Valoarea implicită.
iniţială Setează valoarea imobilului implicit.
moşteni. Moștenește valoarea proprietății de la elementul-mamă.

Smochin. 11. Alinierea elementelor flexibile individuale

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; Afișaj: Flex;) .flex-element (-webkit-align-sine: centru; align-sine: centru;)

6.3. Linii de containere flexibile: aliniere-conținut

Proprietatea liniilor liniilor din recipientul Flex în prezența unui spațiu suplimentar pe axa transversală, în mod similar cu alinierea elemente individuale Pe axa principală utilizând proprietatea de conținut justificată. Proprietatea nu afectează recipientul flexibil cu o singură linie. Nu este moștenit.

Valori:
Flex-start. Rândurile sunt depozitate spre începutul recipientului Flex. Marginea primei linii este plasată aproape de marginea containerului Flex, fiecare ulterior - aproape de linia anterioară.
Flex-end. Rândurile sunt așezate spre capătul containerului Flex. Marginea ultimului rând este plasată aproape de marginea containerului Flex, fiecare anterioară - aproape de rândul următor.
Centru Rândurile sunt stocate spre centrul containerului Flex. Rândurile sunt situate aproape unul de celălalt și aliniate în centrul recipientului Flex cu o distanță egală între marginea inițială a conținutului recipientului Flex și primul șir și între marginea finală a conținutului recipientului Flex și ultimul șir.
Spațiu-între. Rândurile sunt distribuite uniform în recipientul Flex. Dacă spațiul liber rămas este negativ sau recipientul Flex are o singură linie Flex, această valoare este identică cu Flex-Start. În caz contrar, marginea primei linii este amplasată aproape de marginea inițială a conținutului recipientului Flex, marginea ultimului rând este aproape de marginea finală a conținutului containerului Flex. Liniile rămase sunt distribuite astfel încât distanța dintre cele două rânduri adiacente să fie aceeași.
Spațiu-în jur. Rândurile sunt distribuite uniform în recipientul Flex cu o jumătate de spațiu la ambele capete. Dacă spațiul liber rămas este negativ, această valoare este identică cu centrul central. În caz contrar, șirurile sunt distribuite astfel încât distanța dintre cele două rânduri adiacente să fie aceeași, iar distanța dintre primele / ultimele rânduri și marginile conținutului recipientului Flex a variat de la distanța dintre liniile.
Întinde. Valoarea implicită. Rândurile elementelor flexibile sunt întinse uniform, completând tot spațiul disponibil. Dacă spațiul liber rămas este negativ, această valoare este identică cu Flex-Start. În caz contrar, spațiul liber va fi împărțit în mod egal între toate rândurile, creșterea dimensiunii transversale.
iniţială Setează valoarea imobilului implicit.
moşteni. Moștenește valoarea proprietății de la elementul-mamă.
Smochin. 12. Alinierea multi-line a elementelor flexibile

Sintaxă

Flex-container (Afișaj: -Webkit-Flex; -Webkit-Flex-Flow: înfășurare rând; -Webkit-alin-content: Flex-end; Afișaj: Flex; Flex-Flow: înfășurarea rândului; Align-Conținut: Flex-end ; Înălțime: 100px;)

Modulul FlexBox Layout (caseta flexibilă) vizează furnizarea mai mult de metoda eficientă. Locația, alinierea și distribuția spațiului liber între elementele din recipient, chiar și atunci când dimensiunea lor este necunoscută în avans și / sau dinamică (prin urmare, cuvântul "flex").

Ideea de bază a marcajului flexibil (Flex) este de a furniza un container cu capacitatea de a schimba lățimea / înălțimea (și ordinea) elementelor sale pentru a cel mai bun mod Completați spațiul disponibil (în principal pentru plasare pe toate tipurile și dimensiunile ecranelor). Conteinerul FlexBox extinde elementele pentru a completa spațiul liber sau îi comprimă pentru a evita depășirea.

Cel mai important lucru este că Flexbox este un agnostic direcțional, spre deosebire de structurile obișnuite (blocuri bazate pe poziționarea verticală și elementele de șir bazate pe poziționarea orizontală). În ciuda faptului că acestea funcționează destul de bine, ele nu dispun de flexibilitate pentru a susține aplicații mari sau complexe (mai ales atunci când vine vorba de modificări ale orientării, schimbarea mărimii, întinderea, comprimarea etc.).

Notă. FlexBox este mai potrivit pentru componentele aplicației și lamelele mici, în timp ce grila CSS este proiectată pentru cayout-uri mai mari.

Bazele și terminologia

Deoarece FlexBox este un întreg modul, nu o proprietate separată, conține multe lucruri diferite, inclusiv un set de proprietăți întregi. Unele dintre ele sunt concepute pentru a-și instaura recipientul (elementul părinte cunoscut sub numele de "recipientul Flex"), în timp ce altele trebuie să fie instalate cu elemente copil (cunoscute sub numele de "elemente flexibile").

Dacă sistemul de aspect obișnuit se bazează pe direcții de bloc și șir, Flexbox se bazează pe "Direcții Flex-Flow". Vă rugăm să aruncați o privire la acest desen din specificațiile care explică ideea de bază a Flexbox.

Practic elemente vor fi localizate de-a lungul axa principală (de la începutul principal la capăt principal) sau axa încrucișată. (de la încrucișare la cruce).

Sprijiniți browserele

CSS Modul flexibil pentru aspectul casetei

Chrome pentru Android.

Browser BlackBerry Începând cu 10 versiuni suportă o nouă sintaxă.

Proprietăți pentru recipient

Proprietăți pentru elemente

Proprietăți pentru elementul părinte (Container Flex)

afişa

Determină recipientul Flex; Un șir sau un bloc depinde de valoarea transmisă. Include un context Flex pentru toate elementele sale directe, de copil.

Container (afișaj: flex; / * sau interline-flex * /)

Rețineți că coloanele CSS nu afectează recipientul Flex.

direcție flexibilă.


Setează axa principală, determină astfel direcția elementelor situate în recipient. FlexBox (în plus față de ambalajul opțional) este conceptul unui aspect unidirecțional. Gândiți-vă la elemente flexibile, în primul rând ca linii orizontale sau difuzoare verticale.

Container (direcție flexică: rând | rând-inversă | coloana | coloana-inversă;)

  • rând (implicit) - de la stânga la dreapta în LTR; Dreptul la stânga în RTL;
  • row-Reverse. - dreptul la stânga în LTR; De la stânga la dreapta în RTL;
  • coloană. - Același lucru este acel rând, doar de sus în jos;
  • coloana-invers. - Același lucru este invers, numai de la partea de jos în sus;

flex-wrap.


Implicit, elementele vor încerca să completeze doar o singură linie. Puteți schimba acest comportament și permiteți ca elementele să fie transferate la linia următoare, dacă este necesar.

Container (flex-wrap: noyrap | wrap | wrap-inversă;)

  • nowrap (implicit) - toate elementele Flex vor fi amplasate pe o singură linie;
  • Înfășurați. - elementele Flex vor fi amplasate pe mai multe linii, sus în jos;
  • Înfășurați înapoi. - elementele Flex vor fi amplasate pe mai multe linii, de jos în sus;

justificați-conținutul


Determină alinierea de-a lungul axei principale. Ajută la distribuirea spațiului liber rămas după toate elementele fixe și nu fixe în lățime elementele Flex au atins dimensiunea maximă. De asemenea, ajută la efectuarea unor control asupra alinierii elementelor atunci când acestea depășesc șirul.

Container (justificați conținutul: Flex-Start | Flex-end | centru | spațiu-între | spațiu-înot;)

  • flex-Start (implicit) - elementele sunt presate la începutul liniei;
  • flex-end. - elementele sunt presate spre capătul șirului;
  • centru - elementele sunt situate în centrul de-a lungul șirului;
  • spațiu-între. - elementele sunt plasate uniform pe linie; Primul element este la începutul liniei, ultimul element Situat la capătul liniei;
  • spațiu-în jur. - Elementele sunt plasate uniform pe linia cu același spațiu în apropierea lor. Vă rugăm să rețineți că spațiul vizual nu este același, deoarece toate elementele au același spațiu pe ambele părți. Primul element va avea o unitate de spațiu din partea containerului, dar două unități între ele și elementul următor, deoarece următorul element are, de asemenea, o unitate de la două laturi.

aliniați-elemente.


Această proprietate determină comportamentul elementelor flexibile de-a lungul axei transversale de pe linia curentă. Gândiți-vă la asta ca O, numai pentru axa transversală (axa principală perpendiculară).

Container (articole aliniere: Flex-Start | Flex-capăt | Centrul de bază | Stretch;)

  • flex-start - Elementele sunt plasate la începutul axei transversale;
  • flex-end - Elementele sunt plasate la capătul axei transversale;
  • centru - Elementele sunt situate în centrul axei transversale;
  • de bază - elementele sunt aliniate prin linia de bază;
  • stretch (implicit) - întinderea pentru a umple întregul recipient (lățimea min-lățime / maximă este încă observată);

aliniere-conținutul.


Notă. Această proprietate nu funcționează atunci când există o singură linie de elemente flexibile.

Container (conținutul de aliniere: Flex-Start | Flex-capăt | Centrul | Spațiu-între | Spațiu-în jurul Spațiu-vă întind;)

  • flex-start. - rândurile sunt situate la începutul recipientului;
  • flex-end. - liniile sunt situate la capătul containerului;
  • centru - rândurile sunt plasate în centrul recipientului;
  • spațiu-între. - rândurile sunt distribuite uniform, prima linie este situată la începutul recipientului, iar ultima linie de la sfârșitul anului;
  • spațiu-în jur. - rândurile sunt distribuite uniform, cu aceeași distanță între ele;
  • stretch (implicit) - rândurile sunt întinse peste lățime pentru a ocupa spațiul rămas;

Proprietăți pentru filiale (Elemente Flex)

ordin


În mod implicit, toate elementele sunt situate în ordinea inițială. Cu toate acestea, proprietatea comenzii gestionează ordinea în care sunt localizate elementele din interiorul recipientului.

(Ordine: ; }

flex-cresc.


Proprietatea determină capacitatea de a crește elementul în dimensiune, dacă este necesar. Este nevoie de o valoare fără dimensiuni ca proporție care determină modul în care cantitatea de spațiu liber din interiorul recipientului ar trebui să ocupe elementul.

Dacă toate elementele au o proprietate flex-crescă instalată în 1, atunci spațiul liber din interiorul containerului va fi distribuit uniform între toate elementele. Dacă una din valoarea elementelor este setată la 2, elementul va fi de două ori mai mult spațiu decât restul (cel puțin încercați).

(Flex-cresc: ; / * implicit 0 * /)

Este imposibil să indicați numere negative.

baza flexibilă.

Determină dimensiunea elementului implicit, înainte de distribuirea spațiului rămas. Poate fi lungime (20%, 5rem etc.) sau cuvânt cheie.. Cuvântul auto auto înseamnă "arata ca spitalul meu de lățime sau înălțime". Cuvântul cheie de conținut înseamnă că "dimensiunea se bazează pe conținutul elementului" este cuvântul cheie, dar nu este foarte bine acceptat, deci este dificil să o verificați și chiar mai greu de aflat ceea ce face conținutul său minut, max- Conținutul și conținutul de fit.

Element (flex-bază: | AUTO; / * Auto implicit * /)

Dacă este setat la 0, atunci spațiul suplimentar din jurul conținutului nu va fi luat în considerare. Dacă instalați Auto, spațiul suplimentar va fi distribuit pe baza valorii.

contracta

Aceasta este o reducere și. Al doilea și al treilea parametrii (flex-subțire și flex-bază) nu sunt obligatorii. Valoarea implicită este setată la 0 1 Auto.

Element (Flex: Nici unul | [<"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }

aliniați-sine.


Această proprietate vă permite să înlocuiți alinierea implicită (sau specificată utilizând proprietatea) pentru elemente individuale flexibile.

Vă rugăm să vă uitați la explicația proprietăților pentru a înțelege valorile disponibile.

Element (align-sine: Auto | Flex-Start | Flex-end | Centrul de bază | Stretch;)

Vă rugăm să rețineți că alinierea flotor, clară și verticală nu are nicio influență asupra elementului Flex.

Exemple

Sa incepem cu exemplu simpluSarcina decisivă care apare aproape în fiecare zi: Centrarea perfectă. Nu poate fi ceva mai ușor dacă utilizați Flexbox.

Părinte (afișaj: flex; înălțime: 300px;) .Child (lățime: 100px; înălțime: 100px; margine: Auto;)

Depinde de faptul că marja instalată în Auto din recipientul Flex absoarbe spațiul suplimentar. Astfel, instalarea marjei verticale în Auto la element va face un element perfect centrat pe ambele axe.

Acum, să folosim mai multe proprietăți. Luați în considerare o listă de 6 elemente, toate cu o dimensiune fixă \u200b\u200bîn termeni estetici, dar ele pot fi automate. Vrem ca ei să fie distribuiți uniform de-a lungul axei orizontale și, atunci când schimbarea dimensiunii browserului totul a fost în ordine (fără cereri media!).

Flex-container (Afișaj: Flex, Flex-Flow: înfășurarea rândului, justificați-conținutul: spațiu-înot;)

Gata! Orice altceva este doar câteva probleme de proiectare. Mai jos este un exemplu pe CodePen, asigurați-vă că mergeți acolo și încercați să schimbați dimensiunea ferestrelor pentru a vedea ce se întâmplă.

Să încercăm altceva. Imaginați-vă că avem navigație situată la marginea dreaptă în partea de sus a ecranului, dar dorim să fie localizată în centrul ecranelor de dimensiuni medii și a fost într-o singură coloană pe ecrane mici. La fel de ușor ca plăcintă.

Navigare (Afișare: Flex, Flex-Flow: înfășurarea rândului; Justiune-Conținut: Flex-end;) @media toate și (max-lățime: 800px) (.Navigare (justificare-conținut: spațiu-înot;)) @Media toate și (Max-lățime: 500px) (.Navigați (Direcția Flex: Coloană;))

Să încercăm să facem ceva mai bun, jucând cu flexibilitatea elementelor noastre Flex! Ce se întâmplă cu cel de-al treilea aspect mobil cu un capac și un subsol la întreaga lățime a ecranului și că nu există dependență de ordinea inițială a elementelor.

Wrapper (Afișaj: Flex, Flex-Flow: Row Wrap;) .header, .main, .nav,. -Ar, (Flex: 1 auto;)) @Media All și (min-lățime: 800px) ((Flex: 2 0px;) .Aside-1 (ordin: 1;) (Ordine: 2;) .Aside 2 (Ordinul: 3;) .Footer (Ordine: 4;))

Proprietăți conexe

Erori

Desigur, FlexBox nu este fără erori. Cea mai bună colecție pe care am văzut-o este reprezentată de FlexBugs FlexBugs Filip Walton și Greg Whitworth "Acesta este un loc open source pentru a urmări toate erorile, așa că cred că este mai bine să părăsiți link-ul.

Proprietatea comenzii gestionează ordinea în care elementele copilului apar în interiorul recipientului Flex. În mod implicit, acestea sunt situate în ordinea adăugată inițial la recipientul Flex.

Valori

.flex-element (comandă:<целое число>; }

elementele Flex pot fi reordonate folosind această proprietate simplă fără a schimba codul HTML.

Valoare implicită: 0.

flex-cresc.

Această proprietate stabilește coeficientul de creștere care determină cât de departe elementul Flex va crește în raport cu elementele flexibile rămase din recipientul Flex, atunci când distribuie un spațiu liber pozitiv.

Valori

.flex-element (Flex-cresc:<число>; }

Dacă toate elementele Flex au aceeași valoare flexibilă, toate elementele vor avea aceeași dimensiune în recipient.

Cel de-al doilea element Flex are mai mult spațiu în raport cu dimensiunea altor elemente flexibile.

Valoare implicită: 0.

flex-psihic.

flex-Shrink Setează un coeficient de compresie care determină cât de departe elementul Flex va fi comprimat în raport cu elementele flexibile rămase din recipientul Flex, în timpul distribuției spațiului liber negativ.

Valori

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

În mod prestabilit, toate elementele Flex pot fi comprimate, dar dacă setăm valoarea Flex-Shrink Zero (fără comprimare), atunci elementele păstrează dimensiunea originală.

Valoare implicită: 1.

Numerele negative sunt inacceptabile.

baza flexibilă.

Această proprietate ia aceleași semnificații ca și proprietățile lățimii și înălțimii și definește dimensiunea principală inițială a elementului Flex, înainte ca spațiul liber să fie distribuit în conformitate cu coeficienții.

Valori

.flex-element (flex-bază: Auto |<ширина>; }

baza flexibilă este specificată pentru cel de-al patrulea element Flex și dictează dimensiunea sa inițială.

Valoare implicită: Auto.

contracta

Această proprietate este o reducere pentru proprietățile Flex-cresc, flex-subțire și flex-bază. Cultură de alte valori poate fi, de asemenea, instalată Auto (1 1 Auto) și nici unul (0 0 Auto).

Valori

.flex-element (Flex: Nici unul | Auto | [ ? || ]; }

Valoare implicită: 0 1 Auto.

W3C recomandă utilizarea proprietății Flex abreviate, în loc de proprietăți individuale, deoarece Flex se resetează corect orice componente nespecificate pentru utilizare tipică.

aliniați-sine.

Alinierea proprietății vă permite să înlocuiți alinierea implicită (sau valoarea specificată prin aliniere) pentru elemente flexibile individuale. Pentru a înțelege valorile disponibile, consultați descrierea elementelor aliniere pentru recipientul Flex.

Valori

.flex-element (align-sine: Auto | Flex-Start | Flex-end | Centrul de bază | Stretch;)

Pentru cel de-al treilea și al patrulea element flexibil, alinierea este suprascrisă prin proprietatea alinierei.

Modul Flexbox-Leuauta (Cutie flexibilă - "bloc flexibil", pe acest moment Recomandarea Candidatului W3C) Pune sarcina de a oferi o modalitate mai eficientă de stabilire, nivelare și distribuire a spațiului liber între elementele dintr-un recipient, chiar și atunci când dimensiunea lor este necunoscută și / sau dinamică (prin urmare, cuvântul "flexibil").

Ideea principală a dispozitivului de protecție Flex în container dotată cu capacitatea de a schimba lățimea / înălțimea (și ordinea) elementelor sale pentru cea mai bună umplere a spațiului (în majoritatea cazurilor - pentru a susține toate tipurile de afișaje și dimensiunea ecranelor ). Containerul Flex se întinde pe elementele pentru a completa spațiul liber sau le comprimă pentru a preveni granița.

Cea mai importantă, FlexBox-Leiaut nu depinde de direcție, spre deosebire de legări obișnuite (blocuri, amplasate vertical, iar elementele inline sunt orizontale). În timp ce leiautul obișnuit este excelent pentru paginile web, nu are flexibilitate (fără canalybur) pentru a susține aplicații mari sau complexe (mai ales atunci când vine vorba de schimbarea orientării ecranului, redimensionarea, întinderea, comprimarea etc.).

cometariu: Flexbox-LEUAOUT este cel mai potrivit pentru părțile compozite ale aplicației și leauutica la scară mică, în timp ce grila este mai folosită pentru Ladians o scară largă.

Bazele

pentru că FlexBox este un modul întreg, și nu doar o singură proprietate, combină multe proprietăți. Unele dintre ele trebuie aplicate la container (elementul părinte, așa-numitul flex recipient), în timp ce alte proprietăți se aplică elementelor copilului sau elemente flexibile.

Dacă leucul obișnuit se bazează pe instrucțiunile elementelor de bloc și inline, Flex-Liaut se bazează pe "Direcțiile Flex-Flow". Verificați această schemă din specificațiile care explică ideea de bază a Flex-Leuetov.

Cele mai multe elemente vor fi distribuite fie împreună axa principală (din Începerea principală. inainte de capăt principal.) sau de-a lungul axa transversală (din pornirea încrucișată. inainte de cross-capăt.).

  • axa principală - Axa principală de-a lungul căreia se află elementele Flex. Notă, nu este neapărat orizontală, totul depinde de proprietatea direcției flexibile (vezi mai jos).
  • Începerea principală. | capăt principal. - Elementele Flex sunt plasate într-un container din poziția inițială de pornire la poziția principală.
  • dimensiunea principală. - lățimea sau înălțimea elementului Flex în funcție de valoarea primară selectată. Valoarea principală poate fi o înălțime de lățime sau element.
  • axa încrucișată. - Axa transversală perpendiculară pe cea principală. Direcția sa depinde de direcția axei principale.
  • pornirea încrucișată. | cross-capăt. - Rândurile flexibile sunt umplute cu elemente și sunt situate într-un recipient din poziția de pornire încrucișată în poziția transversală.
  • cross Dimensiune - Lățimea sau înălțimea elementului Flex, în funcție de dimensiunea dimensiunii, este egală cu această magnitudine. Această proprietate coincide cu lățimea sau înălțimea elementului în funcție de dimensiunea dimensiunii.

Proprietăți

afișaj: Flex | Inline-flex;

Se aplică:

Determină recipientul Flex (Inline sau Bloc, în funcție de valoarea selectată), conectează contextul Flex pentru toți descendenții săi imediați.

Afișaj: Alte valori | Flex | Inline-flex;

Ține minte:

  • Coloanele CSS nu funcționează cu un recipient flex
  • float, Align clar și vertical nu funcționează cu elemente flexibile

direcție flexibilă.

Se aplică: Element parental Flex-container.

Setează axa principală a axei principale, determinând astfel direcția pentru elementele flexibile plasate în recipient.

Direcția Flex: rând | Row-Reverse | Coloana | Coloana-invers.
  • rând (implicit): de la stânga la dreapta pentru LTR, dreptul la stânga pentru RTL;
  • row-Reverse: dreapta stânga pentru LTR, de la stânga la dreapta pentru RTL;
  • coloană: similară cu rândul, sus în jos;
  • coloana-Reverse: similară cu rândul-invers, de jos în sus.

flex-wrap.

Se aplică: Element parental Flex-container.

Stabilește dacă recipientul va fi o singură linie sau multi-linie, precum și direcția axei transversale care determină direcția în care vor fi localizate noi linii.

Flex-Wrap: Nowrap | Înfășurați | Înfășurați înapoi.
  • nowrap (implicit): o singură linie / de la stânga la dreapta pentru LTR, dreapta la stânga pentru RTL;
  • Înfășurați: multi-linie / de la stânga la dreapta pentru LTR, dreapta la stânga pentru RTL;
  • wrap-Reverse: Multi-Line / dreapta la stânga pentru LTR, de la stânga la dreapta pentru RTL.

flex-flux.

Se aplică: Element parental Flex-container.

Aceasta este o reducere a proprietăților direcției flexibile și a folii flexibile, care, împreună, definesc axa principală și transversală. Implicit necesită valoarea rândului NowRAP.

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

Se aplică: Element parental Flex-container.

Determină alinierea față de axa principală. Ajută la distribuirea spațiului liber rămas în cazul în care elementele liniei nu sunt "întinderea" sau întinderea, dar și-au atins deja dimensiunea maximă. Permite, de asemenea, într-un fel de a controla alinierea elementelor când șirul este eliberat.

: Flex-start | Flex-end | Centrul | Spațiu-între | Spațiu-în jur.
  • flex-Start: elementele sunt mutate la începutul liniei;
  • flex-end: elementele sunt deplasate până la capătul șirului;
  • centrul: elementele sunt aliniate în centrul liniei;
  • spațiul - între elementele sunt distribuite uniform (primul element la începutul liniei, ultimul - la sfârșit);
  • spațiul - în jurul valorii de: elementele sunt distribuite uniform cu o distanță egală între ele și limitele șirului.

Se aplică: Element parental Flex-container.

Definește comportamentul implicit pentru elementele Flex sunt relative la axa transversală de pe linia curentă. Luați în considerare această versiune de conținut de justificare pentru axa transversală (perpendiculară pe principală).

: Flex-start | Flex-end | Centrul | Linia de bază | Întinde.
  • flex-Start: Limita de pornire încrucișată pentru elementele este localizată în poziția de pornire încrucișată;
  • flex-end: marginea transfrontalieră pentru elementele este situată pe poziția transversală;
  • centrul: elementele sunt aliniate în centrul axei transversale;
  • linia de bază: elementele sunt aliniate pentru linia de bază;
  • stretch (implicit): Elemente sunt întinse, umplând recipientul (luând în considerare lățimea min-lățime / max).

Se aplică: Element parental Flex-container.

ALiniază liniile de containere flexibile în prezența unui spațiu liber pe axa transversală, în același mod ca și conținutul justificat pe axa principală.

cometariu: Această proprietate nu funcționează cu o singură cutie flexibilă.

: Flex-start | Flex-end | Centrul | Spațiu-între | Spațiu-în jurul Întinde.
  • flex-Start: Linii sunt aliniate în raport cu începutul recipientului;
  • flex-end: rândurile sunt aliniate în raport cu sfârșitul recipientului;
  • centrul: Rândurile sunt aliniate în centrul recipientului;
  • spațiul - între: rândurile sunt distribuite uniform (prima linie de la începutul liniei, acesta din urmă este la sfârșit);
  • spațiu-în jurul valorii: rândurile sunt distribuite uniform cu o distanță egală;
  • stretch (implicit): Rândurile sunt întinse, completând spațiu liber.

ordin

Se aplică:

Implicit, elementele Flex sunt situate în ordinea inițială. Cu toate acestea, proprietatea comenzii poate controla ordinea locației lor în recipient.

Ordin:<integer\u003e

flex-cresc.

Se aplică: Un element fiic / element Flex.

Determină pentru elementul Flex capacitatea de a "crește" dacă este necesar. Ia o valoare indexată care servește drept proporție. Acesta determină ce fracțiune dintr-un spațiu liber în interiorul recipientului poate ocupa un element.

Dacă toate elementele au o proprietate flexibilă ca 1, atunci fiecare descendent va primi aceeași dimensiune în interiorul containerului. Dacă ați setat unul dintre descendenți la 2, atunci va dura de două ori mai mult spațiu decât alții.

Flex-cresc:<număr\u003e (Implicit 0)

flex-psihic.

Se aplică: Un element fiic / element Flex.

Determină pentru elementul Flex capacitatea de a comprima dacă este necesar.

Flex-Shrink: (Implicit 1)

Numerele negative nu sunt acceptate.

baza flexibilă.

Se aplică: Un element fiic / element Flex.

Determină dimensiunea implicită pentru element înainte de distribuirea spațiului din container.

Baza flexibilă:<lungime\u003e | Auto (Auto implicit)

contracta

Se aplică: Un element fiic / element Flex.

Aceasta este o reducere pentru creșterea flex-ului, flex-subțire și flexibilă. Al doilea și al treilea parametrii (flex-contracție, flex-bază) sunt opționale. Valoarea implicită este 0 1 Auto.

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

aliniați-sine.

Se aplică: Un element fiic / element Flex.

Vă permite să înlocuiți alinierea implicită sau în elementele de aliniere, pentru elementele flexibile individuale.

Consultați descrierea proprietății alinierelor pentru o mai bună înțelegere a valorilor disponibile.

Align-sine: Auto | Flex-start | Flex-end | Centrul | Linia de bază | Întinde.

Exemple

Să începem cu un exemplu foarte, foarte simplu, care apare aproape în fiecare zi: alinierea exact în centru. Nu este nimic mai ușor dacă utilizați Flexbox.

.Parent (afișaj: flex; înălțime: 300px; / * Sau orice * / ) .Child (lățime: 100px; / * Sau orice * / Înălțime: 100px; / * Sau orice * / Marja: Auto; / * Magic! * /)

Acest exemplu se bazează pe faptul că marja din recipientul Flex specificată ca auto absoarbe spațiul inutil, astfel încât sarcina de referință liniile elementului exact în centrul ambelor axe.

Acum, să folosim niște proprietăți. Prezentați un set de 6 elemente de dimensiune fixă \u200b\u200b(pentru frumusețe), dar cu capacitatea de a schimba dimensiunea recipientului. Vrem să le distribuim în mod egal orizontal, astfel încât atunci când este redimensionată fereastra browserului, totul a arătat bine (fără @ Media-Recorder!).

.flex-container ( / * Creați mai întâi un context Flex * / Afișaj: Flex; / * Acum vom defini direcția fluxului și dacă dorim ca elementele să fie transferate într-un șir nou * Amintiți-vă că acest lucru este același ca: * Direcția Flex: rând; * Flex-Wrap: Înfășurați; * / Flex-flux: înveliș de rând; / * Acum definim modul în care spațiul * / : Spațiu-în jur; )

Gata. Orice altceva este o chestiune de înregistrare. Mai jos este localizat CodePen, care demonstrează acest exemplu. Asigurați-vă că încercați să întindeți / stoarce fereastra browserului și să vedeți ce se întâmplă.

Verificați acest stilou!

Să încercăm altceva. Imaginați-vă că avem nevoie de o navigație aliniată la marginea dreaptă la începutul site-ului nostru, dar dorim să se alinieze în centrul ecranelor de dimensiuni medii și să se transforme într-o singură coloană pe mici. Totul este destul de simplu.

/ * Ecrane mari * / .Navigare (afișaj: Flex; Flex-Flow: învelitoare de rând; / * Schimbă elementele până la capătul liniei de pe axa principală * / : flex-capăt; ) @Media toate și (max lățime: 800px) ( / * Pentru ecranele de dimensiuni medii, alinim navigarea în centru, distribuind uniform spațiul liber între elementele * / : Spațiu-în jur; )) / * Ecrane mici * / @Media toate și (max-lățime: 500px) ( / * Pe ecrane mici în loc de un șir avem elemente în coloană * / Flex-direcție: coloană; )) Verificați acest stilou!

Să încercăm ceva mai bun și să jucăm cu flexibilitatea elementelor flexibile! Ce zici de orientat pe dispozitive mobile Trei aspect cu capac și subsol complet? Și un alt ordin de locație.

.Wrapper (afișaj: Flex, Flex-Flow: înfășurarea rândului;) / * Specificăm toate elementele de 100% lățime * / .Header, .main, .nav, .Ar, .Footer (Flex: 1 100%; / * În acest caz, ne bazăm pe ordinea inițială pentru orientarea pe * Dispozitive mobile: * 1. Header * 2. NAV * 3. Principal * 4. 5. Footer * / / * Ecrane de dimensiuni medii * / @Media toate și (min-lățime: 600px) ( / * Ambele Sagebar sunt situate într-o singură linie * / .Ar (Flex: 1 auto;)) / * Ecrane mari * / @Media toate și (min-lățime: 800px) ( / * Schimbăm elementele locale.Aside-1 i.main, și, de asemenea, informează * element.main ia de două ori mai mult spațiu decât sidbars. * / .MAIN (Flex: 2 0px;) .Aside-1 (ordinul: 1;) (ordinul: 2;) .Aside-2 (ordinea: 3;) .Footer (Ordine: 4;))

Dacă spui scurt, atunci aspectul cu Flexbox ne oferă soluții simple de sarcini odată dificil. De exemplu, atunci când trebuie să aliniați elementul vertical sau apăsați subsolul în partea de jos a ecranului sau pur și simplu introduceți mai multe blocuri într-un rând, astfel încât să ocupe tot ce spațiu liber. Astfel de sarcini sunt rezolvate fără Flex. Dar, de regulă, aceste soluții sunt mai asemănătoare cu "Crupele" - recepții de utilizat CSS nu sunt destinate. În timp ce cu Flexbox, aceste sarcini sunt rezolvate exact așa cum gândește modelul Flex.

CSS Modulul de aspect al casetei flexibile (modul CSS pentru module cu blocuri flexibile), Flexbox scurt, creat pentru a elimina defectele atunci când se creează o varietate de structuri HTML, incluzând adaptate sub lățimi și înălțime diferite și pentru a face un aspect logic și simplu. Și abordarea logică, de regulă, funcționează în locuri neașteptate, unde rezultatul nu a fost verificat - logica noastră!

Flexbox vă permite să controlați elegant cei mai diferiți parametri ai elementelor din interiorul recipientului: direcția, ordinea, lățimea, înălțimea, alinierea de-a lungul și peste, distribuția spațiului liber, întinderea și comprimarea elementelor.

Cunostinte de baza

FlexBox constă dintr-un container și elementele copilului (elemente) (elemente flexibile).

Pentru a include Flexbox, orice Elementul HTML. suficient pentru a atribui afișarea proprietății CSS: Flex; sau afișaj: Inline-Flex; .

1
2

După pornirea proprietăților flexibile, sunt create două axe în interiorul recipientului: Main și transversal (perpendicular (⊥), axa încrucișată). Toate elementele imbricate (primul nivel) sunt construite pe axa principală. În mod implicit, axa principală este orizontală și are direcția de la stânga la dreapta (→) și axa încrucișată, respectiv verticală și este direcționată de sus în jos (↓).

Axa principală și încrucișată pot fi schimbate în locuri, atunci elementele vor fi amplasate pe partea de sus (↓) și când se opresc în înălțime, se vor deplasa de la stânga la dreapta (→) - adică axele s-au schimbat pur și simplu în locuri . În același timp, începutul și sfârșitul locației elementelor nu se schimbă - numai direcțiile (axa) Schimbarea! De aceea trebuie să vă imaginați axa din interiorul recipientului. Cu toate acestea, nu este necesar să credem că există niște axe "fizice" acolo și influențează ceva. Axa de aici este doar direcția de mișcare a elementelor din interiorul recipientului. De exemplu, dacă am indicat alinierea elementelor din centrul axei principale și apoi am schimbat direcția acestei axe principale, se va schimba și alinia: elementele erau în mijloc orizontal și oțel în mijloc vertical .. . Vedeți exemplul.

O altă caracteristică importantă a casetei Flex este prezența unui rând în direcția transversală. Pentru a înțelege despre ce vorbim, să ne imaginăm că există o axă orizontală principală, multe elemente și nu "urcă" în recipient, așa că merg la un alt rând. Acestea. Containerul arată astfel: recipientul, în interiorul acesteia două rânduri, în fiecare rând pentru mai multe elemente. Prezentat? Acum amintiți-vă că ne putem alinia vertical nu numai elemente, ci și rânduri! Cum funcționează bine vizibil în exemplul proprietății. Și așa arată schematic:

Proprietăți CSSCeea ce poate afecta modelul de construcție a layout: float, limpede, vertical-align, coloanele nu funcționează în design flex. Folosește un alt model pentru construirea unui aspect și aceste proprietăți CSS sunt pur și simplu ignorate.

CSS Proprietăți Flexbox.

FlexBox conține reguli CSS diferite pentru a controla întregul design Flex. Unele trebuie să fie aplicate la containerul principal, în timp ce altele la elementele acestui container.

Pentru container.

Afişa:

Include bunuri flexibile pentru element. Sub această proprietate, elementul a investit în el: Numai descendenții la primul nivel sunt afectați - ele vor deveni elemente ale flexului containerului.

  • contracta - Elementul este întins la întreaga lățime și are spațiul său complet printre blocurile înconjurătoare. Rowing are loc la început și la sfârșitul blocului.
  • inline-Flex. - Elementul este raționalizat de alte elemente. În acest caz, partea interioară este formatată ca element de bloc, iar elementul în sine este ca încorporat.

flex și Inline-Flex diferă în faptul că interacționează diferit cu elementele înconjurătoare, cum ar fi afișajul: bloc și afișaj: blocul inline.

Direcția Flex:

Modifică direcția axei principale a containerului. Axa transversală se schimbă în consecință.

  • rând (implicit) - direcția elementelor de la stânga la dreapta (→)
  • coloană. - Direcția elementelor de sus în jos (↓)
  • row-Reverse. - Direcția elementelor din stânga stânga (←)
  • coloana-invers. - Direcția elementelor de jos în sus ()
Flex-Wrap:

Gestionează transferul elementelor care decompanează la recipient.

  • nowrap (implicit) - elementele imbricate sunt situate într-un rând (în timpul direcției \u003d rând) sau într-o coloană (în timpul direcției \u003d coloana), indiferent dacă sunt plasate în recipient sau nu.
  • Înfășurați. - Include transferul de articole la rândul următor dacă nu sunt plasate în container. Aceasta include mișcarea elementelor pe axa transversală.
  • Înfășurați înapoi. - De asemenea, înfășurarea numai transferul nu va fi în jos și în sus (în direcția opusă).
Flex-Flow: Înfășurarea direcției

Combină atât proprietățile flexibile, cât și proprietățile flexibile. Ele sunt adesea folosite împreună, astfel încât proprietatea Flex-Flow a fost creată pentru a scrie mai puțin cod.

flex-Flow acceptă valorile celor două proprietăți, separate de un spațiu. Sau puteți specifica o valoare a oricărei proprietăți.

/ * Doar flex-direcție * / Flex-flux: rând; Flex-flux: Reverse rând; Flex-flux: coloană; Flex-flux: coloană-inversă; / * Numai Flex-Wrap * / Flex-Flow: Nowrap; Flex-flux: învelitoare; Flex-flux: Înfășurarea înfășurată; / * Imediat ambele sensuri: Direcția Flex și Flex-Wrap * / Flex-Flow: ROW NOWRAP; Flex-flux: folie de coloană; Flex-Flow: înfășurarea inversă a coloanei; Justificați-conținut:

Aliniați elementele de pe axa principală: dacă direcția \u003d rând, apoi orizontală și dacă direcția \u003d coloana, apoi pe verticală.

  • flex-Start (implicit) - elementele vor merge de la început (la capăt poate exista un loc).
  • flex-end. - elementele sunt egalizate de un capăt (locul va rămâne la început)
  • centru - în centru (locul va rămâne stânga și dreapta)
  • spațiu-între. - elementele extreme sunt presate la margini (locul dintre elemente este distribuit uniform)
  • spațiu-în jur. - Spațiul liber este distribuit uniform între elemente (elementele extreme nu sunt presate pe margini). Spațiul dintre marginea recipientului și elementele extreme va fi de două ori mai mic decât spațiul dintre elementele din mijlocul rândului.
  • spațiu-uniform
Align-conținut:

Aliniază rangurile în care se află elementele de pe axa transversală. La fel ca și a justifica conținutul numai pentru axa opusă.

Notă: funcționează când există cel puțin 2 rânduri, adică Dacă există doar 1 rând, nimic nu se întâmplă.

Acestea. Dacă direcția Flex: rând, această proprietate va alinia rândurile invizibile pe verticală. Este important de observat că înălțimea blocului trebuie să fie stabilită rigid și ar trebui să fie mai mare decât înălțimea seriei, altfel rândurile în sine vor întinde recipientul și alinierea lor își pierde semnificația, pentru că nu există spațiu liber între ele .. . Dar când direcția flexică: coloana, atunci rândurile se deplasează orizontal → și lățimea recipientului este aproape întotdeauna mai mare decât lățimea seriei și alinierea rândurilor dobândește imediat sensul ...

  • stretch (implicit) - Rânduri se întinde complet șirul
  • flex-start. - Rândurile sunt grupate în partea superioară a recipientului (poate exista un loc în cele din urmă).
  • flex-end. - rândurile sunt grupate în partea de jos a containerului (locul va rămâne la început)
  • centru - rândurile sunt grupate în centrul containerului (locul va rămâne pe margini)
  • spațiu-între. - Rândurile extreme sunt presate spre margini (locul dintre rânduri este distribuit uniform)
  • spațiu-în jur. - Spațiul liber este distribuit uniform între rânduri (elementele extreme nu sunt presate spre margini). Spațiul dintre marginea recipientului și elementele extreme va fi de două ori mai mic decât spațiul dintre elementele din mijlocul rândului.
  • spațiu-uniform - De asemenea, spațiul-în jurul valorii de, numai distanța în elementele extreme la marginile containerului este aceeași cu atât între elemente.
Elemente aliniere:

Aliniați elementele de pe axa transversală din interiorul rândului (linia invizibilă). Acestea. Rândurile în sine sunt aliniate prin intermediul conținutului de aliniere și elementele din aceste rânduri (corzi) prin aliniere și toate acestea pe axa transversală. Nu există o astfel de separare de axa principală, nu există concepte de serie, iar elementele sunt aliniate prin intermediul unui conținut justificat.

  • stretch (implicit) - Elemente se întinde complet șirul
  • flex-start. - elementele sunt presate la începutul rândului
  • flex-end. - elementele sunt presate pe capătul rândului
  • centru - elementele sunt de nivelare în centrul rândului
  • de bază - elementele sunt aliniate de textul de bază

Pentru elementele de containere

Flex-cresc:

Specifică factorul de creștere al elementului în prezența unui spațiu liber în recipient. Implicit Flex-cresc: 0 i.e. Numărul elementelor ar trebui să crească și să completeze un spațiu liber în recipient.

Implicit Flex-crescă: 0

  • Dacă toate elementele indică creșterea flexibilă: 1, atunci toți se întind în mod egal și umple tot ce spațiu liber în recipient.
  • Dacă unul dintre elemente indică creșterea flexibilă: 1, atunci va umple tot spațiul liber din recipient și alinierea prin intermediul unei lucrări de conținut justificate nu va fi în măsură să lucreze: nu există nimic pentru a alinia spațiul liber ...
  • Când cresc Flex: 1. Dacă unul dintre ei are Flex-Grow: 2, va fi de 2 ori mai mult decât oricine altcineva
  • Dacă toate blocurile Flex din interiorul recipientului Flex au Flex-cresc: 3, atunci vor avea aceeași dimensiune
  • Cu Flex-cresc: 3. Dacă unul dintre ei are Flex-Grow: 12, va fi de 4 ori mai mare decât oricine altcineva

Cum functioneaza? Să presupunem că recipientul are o lățime de 500px și conține două elemente, fiecare dintre ele are o lățime de bază de 100px. Prin urmare, 300 de pixeli liberi rămân în recipient. Acum, dacă specificați Flex-Grow: 2 primul element; , și al doilea Flex-cresc: 1; Blocurile vor lua întreaga lățime disponibilă a containerului, iar lățimea primului bloc va fi de 300px, iar al doilea 200px. Acest lucru se explică prin faptul că spațiul liber de 300px disponibil în container a fost distribuit între elementele din raportul 2: 1, + 200px al primului și + 100px al doilea.

Notă: În valoarea pe care o puteți specifica numere fracționate, de exemplu: 0.5 - Flex-cresc: 0.5

Flex-Shrink:

Specifică factorul de reducere a elementului. Caracteristica este opusă creșterea flexibilă și determină modul în care elementul trebuie comprimat dacă nu există spațiu liber în recipient. Acestea. Proprietatea începe să lucreze atunci când suma dimensiunilor tuturor elementelor este mai mare decât dimensiunea recipientului.

Implicit Flex-Shrink: 1

Să presupunem că recipientul are o lățime de 600px și conține două elemente, fiecare dintre acestea având o lățime de 300px - flex-bază: 300px; . Acestea. Două elemente umple complet recipientul. Primul element va indica Flex-Shrink: 2; , și cel de-al doilea Flex-Shrink: 1; . Reducând acum lățimea recipientului pe 300px, adică Elementele trebuie să fie cu un 300px care să fie amplasat în interiorul containerului. Acestea vor fi comprimate într-un raport de 2: 1, adică Prima unitate se va alătura 200px, iar al doilea la 100px și noile dimensiuni ale elementelor vor fi 100px și 200px.

Notă: În valoarea puteți specifica numerele fracționate, de exemplu: 0.5 - flex-contracție: 0.5

Baza flexibilă:

Setează lățimea de bază a elementului - lățimea înainte de a fi calculată condițiile rămase care afectează lățimea elementului. Valoarea poate fi specificată în PX, EM, REM,%, VW, VH etc. Lățimea finală va depinde de lățimea de bază și de valorile lui Flex-cresc, flex-contracție și conținut în interiorul blocului. Cu Auto, elementul primește o lățime de bază în raport cu conținutul din interiorul acestuia.

Implicit: Auto.

Uneori este mai bine să instalați rigid lățimea elementului prin proprietatea obișnuită a lățimii. De exemplu, lățimea: 50%; Aceasta va însemna că elementul din interiorul recipientului va fi exact 50%, cu toate acestea, proprietățile Flex-Grow și Flex-Shrink vor funcționa. Acest lucru poate fi necesar atunci când elementul este întins prin conținut în interiorul acesteia, mai specificat în mod flexibil. Exemplu.

baza flexibilă va fi "dură" dacă resetați tracțiune și comprimare: flex-bază: 200px; Flex-cresc: 0; Flex-contracție: 0; . Toate acestea pot fi scrise ca Flex: 0 0 200px; .

Flex: (Creșteți baza)

Înregistrare scurtă a trei proprietăți: Flex-Grow Flex-Shrink flex-bază.

Implicit: Flex: 0 1 Auto

Cu toate acestea, puteți specifica una și două valori:

Flex: Nici unul; / * 0 0 Auto * / / * Număr * / Flex: 2; / * Flex-cresc (flex-bază merge la 0) * / / * nu număr * / flex: 10em; / * Flex-bază: 10em * / flex: 30px; / * Flex-bază: 30px * / flex: Auto; / * Flex-bază: Auto * / Flex: conținut; / * Flex-bază: conținut * / flex: 1 30px; / * Flex-cresc și flex-bază * / flex: 2 2; / * Flex-cresc și flex-contracție (flex-bază merge 0) * / flex: 2 2 10%; / * Flex-cresc și flex-psihic și flex-bază * / align-sine:

Vă permite să schimbați proprietatea de aliniere, numai pentru un element separat.

Implicit: de la containerul de articole aliniere

  • Întinde. - elementul este întins prin umplerea șirului
  • flex-start. - elementul este presat la începutul liniei
  • flex-end. - elementul este apăsat spre capătul șirului
  • centru - elementul este îndreptat în centrul liniei
  • de bază - elementul este aliniat de linia de bază a textului

Ordin:

Vă permite să modificați ordinea (poziția, poziția) elementului din rândul general.

Implicit: Comandă: 0

În mod implicit, elementele au comanda: 0 și puneți în ordinea apariției lor în codul HTML și direcția rândului. Dar dacă schimbați valoarea proprietății comenzii, elementele vor fi construite în ordinea valorilor: -1 0 1 2 3 .... De exemplu, dacă unul dintre elemente indică ordinea: 1, atunci veți merge mai întâi la toate zero și apoi un element de la 1.

Deci, este posibil, de exemplu, un prim element care să se transforme în cele din urmă, fără a schimba direcția de mișcare a altor elemente sau cod HTML.

Notează

Care este diferența dintre flex-bază de la lățime?

Sub diferențe importante între flex-base și lățime / înălțime:

    flex-bază funcționează numai pentru axa principală. Aceasta înseamnă că atunci când direcția flexică: Baza flexibilă a rândului controlează lățimea (lățimea) și când direcția Flex: coloana controlează înălțimea (înălțimea). .

    baza flexibilă se aplică numai elementelor flexibile. Deci, dacă dezactivați Flex la recipient, această proprietate nu va avea efect.

    Elementele absolute ale containerului nu participă la designul Flex ... și, prin urmare, flex-baza nu afectează elementele containerului Flex dacă acestea sunt absolut poziționate: absolut. Ei vor trebui să specifice lățimea / înălțimea.

  • Când utilizați valorile Flex Proprietăți 3 (flex-cresc / flex-shrink / flex-bază), puteți combina și scrie scurt și pentru lățimea de creștere sau micșorare trebuie să scrieți separat. De exemplu: Flex: 0 0 50% \u003d\u003d Lățimea: 50%; Flex-contracție: 0; . Uneori este doar incomod.

Dacă este posibil, dați încă o bază flexibilă. Utilizați lățimea numai atunci când flex-baza nu este potrivită.

Diferențe flex-bază de la lățime - Bug sau Fich?

Conținutul din interiorul elementului Flex o taie și nu poate depăși limitele sale. Cu toate acestea, dacă setați lățimea prin lățime sau o lățime maximă și nu flexibilă, elementul din interiorul recipientului Flex va fi capabil să depășească acest container (uneori aveți nevoie de acest comportament). Exemplu:

Exemple de aspect Flex

În exemple, oriunde folosește prefixe pentru browser-ul încrucișat. Am făcut acest lucru pentru citirea convenabilă CSS. Prin urmare, vedeți cele mai recente exemple. versiuni ale crului sau Firefox.

# 1 exemplu simplu cu aliniere verticală și orizontală

Să începem cu cel mai simplu exemplu - de nivelare verticală și orizontală simultan și la orice înălțime a blocului, chiar cauciuc.

Text în mijlocul

Sau așa, fără bloc în interior:

Text în mijlocul

# 1.2 Separarea (decalajul) între elementele blocului Flex

Pentru a poziționa elementele containerului pe margini și selectați arbitrar elementul după care va exista o pauză, trebuie să utilizați proprietatea marginală-stânga: Auto sau Margin-dreapta: Auto.

Meniul adaptiv # 2 pe flex

Efectuați un meniu în partea de sus a paginii. Pe un ecran larg trebuie să aibă dreptate. În medie, aliniate la mijloc. Și pe un mic element ar trebui să fie pe o linie nouă.

# 3 adaptive 3 coloane

Acest exemplu arată cât de repede și convenabil efectuează 3 coloane, care, atunci când se îngustează, se vor transforma în 2 și apoi în 1.

Vă rugăm să rețineți că acest lucru se poate face fără a utiliza regulile media, toate pe Flex.

1
2
3
4
5
6

Du-te la jsfiddle.net și schimbați lățimea secțiunii "Rezultat"

# 4 blocuri adaptive pe flex

Să presupunem că trebuie să retragem 3 blocuri, unul mare și două mici. În același timp, este necesar ca blocurile să se fixeze în ecrane mici. Face:

1
2
3

Du-te la jsfiddle.net și schimbați lățimea secțiunii "Rezultat"

# 5 Galerie pe flex și tranziție

Acest exemplu arată cât de repede puteți face un acord de ochi destul de ochi cu imagini pe Flex. Acordați atenție proprietății de tranziție pentru Flex.

# 6 Flex în flex (doar un exemplu)

Sarcina face un bloc flexibil. Astfel încât începutul textului din fiecare bloc a fost pe aceeași linie orizontală. Acestea. Cu lățimea lățimii, blocurile cresc în înălțime. Este necesar ca imaginea să fie în partea de sus, butonul este întotdeauna la parter, iar textul din mijloc a început pe o linie orizontală ...

Pentru a rezolva această problemă, blocurile în sine sunt întinse prin Flex, iar lățimea maximă posibilă este instalată. Fiecare unitate internă este, de asemenea, un flex cu un design, cu o coloană Flex-Direct: și elementul din mijloc (unde se află textul) este întins Flex-crescă: 1; Pentru a umple tot spațiul liber, rezultatul este realizat - textul a început cu o singură linie ...

Mai multe exemple

Suport browser - 98,3%

Desigur, nu există nici un sprijin complet, ci totul browsere moderne Sprijiniți modelele FlexBox. Pentru unii, încă mai trebuie să specificați prefixele. Pentru o imagine reală, uitați-vă în CANIUSE.COM și vedeți că 96,3% din browser-ul utilizat astăzi vor funcționa fără prefixe, cu prefixuri de 98,3%. Acesta este un indicator excelent pentru a folosi cu îndrăzneală Flexbox.

Pentru a ști ce prefixe sunt relevante astăzi (iunie 2019), voi da un exemplu de toate regulile Flex cu prefixe necesare:

/ * Container * / -Webkit-Box-Orient: verticală; -webit-cutia-direcție: normal; -ms-flex-direcție: coloană; flex-direcție: coloană; -ms-flex-wrap: învelire; flex-wrap: wrap; -ms -Flex-flow: folie de coloană; Flex-Flow: folie coloană; -webit-ambalaj: Justify; -ms-flex-pack: justifica; justificați-conținut: spațiu-între; -ms-flex-linie-pachet: Distribuiți; Align-Content: Space-in jurul;) / * elemente * / .flex-element (-webit-box-flex: 1; -ms-flex-pozitiv: 1; flex-cresc: 1; -ms-flex- Negativ: 2; flex-contracție: 2; -ms-flex-preferat-dimensiune: 100px; flex-bază: 100px; -ms-flex: 1 2 100px; flex: 1 2 100px; -ms-flex-element-align : Centru; align-sine: centru; -Webkit-Box-Ortalinal-Grupa: 3; -m-flex-comandă: 2; ordinea: 2;)

Este mai bine dacă proprietățile cu prefixe vor merge la proprietatea originală.
Nu există astăzi inutile (de către CANSUSE) prefixe (de către CANIUSE), dar în general prefixează mai mult.

Crom. Safari. Firefox. Operă. Adică Android ios.
20- (vechi) 3.1+ (vechi) 2-21 (vechi) 10 (Tweeger) 2.1+ (vechi) 3.2+ (vechi)
21+ (nou) 6.1+ (nou) 22+ (nou) 12.1+ (nou) 11+ (nou) 4.4+ (nou) 7.1+ (nou)
  • (Nou) - noua sintaxă: Afișaj: Flex; .
  • (Tweener) - Sintaxă neoficială veche 2011: Afișaj: Flexbox; .
  • (Vechi) - Sintaxă veche 2009: Afișaj: cutie;

Video

Ei bine, nu uitați de videoclip, uneori este, de asemenea, interesant și de înțeles. Iată câteva populare:

Link-uri utile pentru flex

    flexboxfroggy.com - Joc educațional Flexbox.

    Flexplorer este un designer de coduri flexibile vizuale.