Minge Flexboxi põhitõdedest kaugemale. Õppige selgeks täiustatud joondamine ja jaotus, kasutades align-content, flex-grow, flex-shrink ning praktilisi, reaalseid paigutuse stsenaariume.
CSS Flexboxi Meistriklass: Täiustatud Joondamine ja Jaotus
Juba mitu aastat on CSS Flexbox olnud kaasaegse veebipaigutuse nurgakivi. Enamik arendajaid on harjunud kasutama display: flex elementide reastamiseks või lihtsate keskele joondatud komponentide loomiseks. Kuid tõeline Flexboxi meisterlikkus peitub selle peenemate omaduste mõistmises, mis on mõeldud täiustatud joondamiseks ja dünaamiliseks jaotuseks. Kui liigute kaugemale põhitõdedest nagu justify-content: center ja align-items: center, avate endale võime luua keerukaid, reageerivaid ja loomuomaselt paindlikke paigutusi üllatava kergusega.
See juhend on mõeldud arendajatele, kes tunnevad põhitõdesid, kuid soovivad oma arusaamist süvendada. Uurime omadusi, mis kontrollivad mitmerealist joondamist, keerukat loogikat paindlike elementide kasvu ja kahanemise taga ning mitmeid võimsaid mustreid, mis lahendavad levinud paigutusprobleeme. Olge valmis saama tavakasutajast enesekindlaks Flexboxi arhitektiks.
Alused: Kiire Ăślevaade Peamisest ja Ristteljest
Enne edasijõudnud teemadesse sukeldumist on ülioluline omada kaljukindlat arusaama kahest teljest, mis juhivad iga flex-konteinerit. Kõik Flexboxi joondus- ja jaotusomadused toimivad ühel neist kahest teljest.
- Peatelg: See on peamine telg, millele flex-elemendid paigutatakse. Selle suuna määrab
flex-directionomadus. - Risttelg: See telg on alati risti peateljega.
Peamine järeldus on see, et need teljed ei ole staatilised. Nad orienteeruvad ümber vastavalt teie flex-direction väärtusele:
flex-direction: row(vaikimisi): Peatelg on horisontaalne (vasakult paremale) ja risttelg on vertikaalne (ĂĽlevalt alla).flex-direction: column: Peatelg muutub vertikaalseks (ĂĽlevalt alla) ja risttelg horisontaalseks (vasakult paremale).flex-direction: row-reverse: Peatelg on horisontaalne, kuid jookseb paremalt vasakule.flex-direction: column-reverse: Peatelg on vertikaalne, kuid jookseb alt ĂĽles.
Selle põhimõttelise kontseptsiooni unustamine on enamiku Flexboxi segaduste allikas. Küsige endalt alati: "Mis suunas mu peatelg osutab?" enne joondusomaduse rakendamist.
Peatelje Jaotuse Meistriks Saamine justify-content abil
Omadus justify-content kontrollib, kuidas ruum jaotatakse flex-elementide vahel ja ümber piki peatelge. Kuigi flex-start, flex-end ja center on lihtsad, peitub tõeline jõud ruumi jaotamise väärtustes.
SĂĽgavam Pilk Ruumi Jaotusele
Selgitame peeneid, kuid olulisi erinevusi space-between, space-around ja space-evenly vahel.
-
justify-content: space-between;See väärtus jaotab elemendid ühtlaselt peateljel. Esimene element lükatakse konteineri päris algusesse ja viimane element päris lõppu. Kogu ülejäänud ruum jaotatakse võrdselt elementide vahel. Välimistel servadel ruumi ei ole.
Kasutusjuhtum: Ideaalne navigeerimisribade jaoks, kus soovite logo vasakus servas ja linke paremas servas, ĂĽhtlase vahega linkide vahel.
-
justify-content: space-around;See väärtus jaotab elemendid võrdse ruumiga iga elemendi ümber. Mõelge igale elemendile kui "mullile", millel on ruumi nii vasakul kui ka paremal pool. Kui kõrvuti asetsevate elementide mullid kokku puutuvad, tundub nendevaheline ruum kaks korda suurem kui konteineri servades olev ruum. Täpsemalt on välimistel servadel olev ruum poole väiksem kui elementide vaheline ruum.
Kasutusjuhtum: Kasulik kaartide paigutuste või galeriide jaoks, kus soovite, et elementidel oleks konteineri servadest veidi hingamisruumi, kuid nad ei oleks otse vastu servi.
-
justify-content: space-evenly;See on kolmest kõige intuitiivsem. See tagab, et ruum kahe suvalise elemendi vahel on täpselt sama suur kui ruum esimese/viimase elemendi ja konteineri serva vahel. Iga vahe on identne.
Kasutusjuhtum: Ideaalne, kui vajate täiuslikult tasakaalustatud, sümmeetrilist paigutust. See on sageli see, mida disainerid vaikimisi soovivad, kui nad paluvad "ühtlast vahet".
Risttelje Joondamise Vallutamine align-items ja align-self abil
Kui justify-content tegeleb peateljega, siis align-items haldab elementide vaikimisi joondamist piki risttelge ĂĽhe rea piires.
align-items Väärtuste Mõistmine
align-items: stretch;(vaikimisi): See on põhjus, miks teie flex-elemendid tunduvad sageli täitvat oma konteineri kõrguse, ilma et te seda paluksite. Elemendid venitatakse, et täita konteineri suurus piki risttelge (nt kõrgusflex-direction: rowkonteineris).align-items: flex-start;: Elemendid paigutatakse risttelje algusesse.align-items: flex-end;: Elemendid paigutatakse risttelje lõppu.align-items: center;: Elemendid joondatakse keskele piki risttelge.align-items: baseline;: See on võimas ja alakasutatud väärtus. Elemendid joondatakse nii, et nende teksti baasjooned on ühel joonel. See on uskumatult kasulik, kui teil on erineva fondisuurusega elemendid (nt pealkiri kõrvuti alapealkirjaga) ja soovite, et need joonduksid teksti, mitte ainult oma kasti piiride järgi.
Ăślekirjutamine align-self abil
Aga mis siis, kui soovite, et üks konkreetne element käituks teistest erinevalt? Siin tuleb appi align-self. Rakendatuna üksikule flex-elemendile, kirjutab see üle konteineri align-items omaduse ainult selle elemendi jaoks. See aktsepteerib kõiki samu väärtusi nagu align-items (lisaks `auto`, mis lähtestab selle konteineri väärtusele).
Näide: Kujutage ette rida kaarte, mis on kõik keskele joondatud align-items: center abil. Saate ühe "esiletõstetud" kaardi silma paista, rakendades sellele align-self: stretch;, muutes selle teistest kõrgemaks.
Tunnustamata kangelane: Täiustatud jaotus align-content abil
See on vaieldamatult kõige vääriti mõistetud omadus Flexboxis ja selle valdamine on märk edasijõudnud oskustest. Levinud segaduskoht on selle sarnasus align-items'iga.
Siin on kriitiline reegel: align-content'il POLE MINGIT MÕJU, kui teie flex-elemendid on kõik ühel real. See toimib ainult siis, kui teil on mitmerealine flex-konteiner (st olete seadistanud flex-wrap: wrap; ja elemendid on tegelikult uutele ridadele mähkunud).
Mõelge sellest nii:
align-itemsjoondab elemente nende rea sees.align-contentjoondab ridu endid konteineri sees. See kontrollib ruumi jaotust ristteljel elementide ridade vahel.
See toimib sisuliselt nagu justify-content, kuid risttelje jaoks. Selle väärtused on peaaegu identsed:
align-content: flex-start;(vaikimisi): Kõik read on pakitud konteineri algusesse.align-content: flex-end;: Kõik read on pakitud lõppu.align-content: center;: Kõik read on pakitud keskele.align-content: space-between;: Esimene rida on alguses, viimane rida on lõpus ja ruum on jaotatud ühtlaselt ridade vahel.align-content: space-around;: Iga rea ümber paigutatakse võrdne ruum.align-content: space-evenly;: Iga rea vaheline ruum on identne.align-content: stretch;: Read venitatakse, et võtta endale ülejäänud ruum.
Kasutusjuhtum: Kujutage ette fotogaleriid, kus elemendid murduvad ridadele. Kui konteineril on fikseeritud kõrgus, võib sinna jääda üleliigset vertikaalset ruumi. Vaikimisi ilmub see ruum allossa. Kasutades align-content: space-between; või align-content: center;, saate kontrollida kogu oma fotode ruudustiku vertikaalset jaotust, luues palju professionaalsema välimusega paigutuse.
DĂĽnaamiline Suuruse Muutmine ja Jaotus: flex LĂĽhend
Staatilised paigutused on haruldased. Flexboxi tõeline jõud tuleb selle võimest käsitleda dünaamilist sisu ja vaba ruumi. Seda kontrollivad kolm omadust, mida sageli määratakse flex lühendi kaudu: flex-grow, flex-shrink ja flex-basis.
1. flex-basis: Lähtepunkt
Enne igasugust kasvamist või kahanemist vajab Flexbox iga elemendi jaoks algsuurust. See on flex-basis'e ülesanne. See määratleb elemendi vaikimisi suuruse piki peatelge.
- Kui see on määratud kindlale pikkusele (nt
200pxvõi10rem), saab sellest elemendi algsuurus. - Kui see on seatud väärtusele
auto, otsib see elemendil `width` või `height` omadust. Kui seda pole, määratakse suurus elemendi sisu põhjal. - Kui see on seatud väärtusele
0, pole elemendil algsuurust ja selle lõplik suurus määratakse puhtalt selleflex-growproportsiooni järgi.
Parim praktika: Flex-kontekstis on sageli parem kasutada `width` asemel flex-basis, kuna see on selgesõnalisem elemendi suuruse määratlemisel peatelje kontekstis.
2. flex-grow: Positiivse Ruumi Tarbimine
Kui flex-konteineril on piki peatelge lisaruumi, määrab flex-grow, kuidas see ruum jaotatakse. See on ühikuta proportsioon.
- Vaikimisi väärtus on
0, mis tähendab, et elemendid ei kasva lisaruumi täitmiseks. - Kui kõigil elementidel on
flex-grow: 1, jaotatakse lisaruum nende vahel võrdselt. - Kui ühel elemendil on
flex-grow: 2ja teiselflex-grow: 1, saab esimene element kaks korda rohkem lisaruumi kui teine.
3. flex-shrink: Negatiivse Ruumi (Ülevoolu) Käsitlemine
See on `flex-grow` vastand. Kui konteineris pole piisavalt ruumi, et kõik elemendid mahuksid oma `flex-basis` suurusega, peavad nad kahanema. flex-shrink kontrollib, kui palju nad kahanevad.
- Vaikimisi väärtus on
1, mis tähendab, et kõik elemendid kahanevad vaikimisi proportsionaalselt, et vältida ülevoolu. - Kui seate elemendile
flex-shrink: 0, siis see ei kahane. See säilitab oma `flex-basis` suuruse, mis võib põhjustada konteineri ülevoolu. See on kasulik elementide jaoks nagu logod või nupud, mida ei tohiks kunagi kokku suruda.
flex Lühend: Kõik Kokku
Omadus flex on lühend omadustele flex-grow, flex-shrink ja flex-basis, selles järjekorras.
flex: 0 1 auto;(vaikimisi): Element ei saa kasvada, saab kahaneda ja selle baassuurus määratakse laiuse/kõrguse või sisu järgi.flex: 1;(lühendflex: 1 1 0;jaoks): Väga levinud väärtus. Element saab kasvada ja kahaneda ning selle algsuurus on 0. See paneb elemendid jagama ruumi puhtalt nende flex-grow proportsiooni alusel.flex: auto;(lühendflex: 1 1 auto;jaoks): Element saab kasvada ja kahaneda ning selle baassuurus määratakse sisu järgi. See võimaldab elementidel olla erineva suurusega vastavalt nende sisule, kuid siiski paindlikult lisaruumi neelata.flex: none;(lühendflex: 0 0 auto;jaoks): Element on täiesti paindumatu. See ei saa kasvada ega kahaneda.
Praktilised Kasutusjuhud ja Edasijõudnud Stsenaariumid
Stsenaarium 1: Kleepuv Jalus (Holy Grail Paigutus)
Klassikaline veebidisaini probleem: kuidas panna jalus lehe allossa kleepuma, isegi kui sisu on lĂĽhike, kuid lĂĽkata see loomulikult alla, kui sisu on pikk.
.page-container {
display: flex;
flex-direction: column;
min-height: 100vh; /* Vaateakna kõrgus */
}
.main-content {
flex-grow: 1; /* või flex: 1; */
}
Muutes pealehe konteineri veerupõhiseks flexboxiks ja seades põhisisu alale flex-grow: 1, käsime sellel tarbida kogu vaba vertikaalse ruumi, lükates jaluse vaateakna allossa.
Stsenaarium 2: Automaatsed Veerised Gruppide Eraldamiseks
Kuidas luua navigeerimisriba, kus logo on vasakul servas ja linkide grupp paremal servas? Kuigi justify-content: space-between töötab, kui logo on üks flex-element, mis siis, kui teil on paremal mitu elementi?
Lahendus on Flexboxi automaatsete veeriste maagia.
.navbar {
display: flex;
}
.logo {
/* Erilisi omadusi pole vaja */
}
.nav-links {
margin-left: auto;
}
Flex-konteineris hõivab automaatne veeris ahnelt kogu vaba ruumi suunas, kuhu see on rakendatud. Seades navigeerimislinkide grupile margin-left: auto, loob see paindliku, tühja ruumi logo ja linkide vahele, lükates lingid täielikult paremale.
Stsenaarium 3: Meediaobjekt
Levinud kasutajaliidese muster, kus pilt või ikoon on ühel pool ja kirjeldav tekst teisel pool. Tekst peaks võtma kogu ülejäänud ruumi ja murduma sujuvalt.
.media-object {
display: flex;
align-items: flex-start; /* Joondab pildi ja teksti ĂĽles */
}
.media-image {
margin-right: 1rem;
flex-shrink: 0; /* Hoiab ära pildi kokkusurumise */
}
.media-body {
flex-grow: 1; /* Võtab kogu ülejäänud horisontaalse ruumi */
}
Siin on võtmeks flex-grow: 1 tekstikonteineril. See tagab, et olenemata sellest, kui lai pilt on, laieneb teksti keha, et täita ülejäänud vaba laius konteineris.
Kokkuvõte: Joondamisest Edasi, Sihikindla Paigutuse Poole
Flexboxi valdamine tähendab enamat kui lihtsalt asjade keskele joondamist. See on telgede vastastikmõju, ruumi jaotamise loogika ja elementide suuruse paindlikkuse mõistmine. Omandades kindla haarde align-content'ist mitmerealiste paigutuste jaoks, flex lühendist dünaamilise suuruse muutmiseks ja võimsatest mustritest nagu automaatsed veerised, saate ehitada paigutusi, mis pole mitte ainult visuaalselt meeldivad, vaid ka robustsed, reageerivad ja semantiliselt puhtad.
Järgmine kord, kui seisate silmitsi keerulise paigutuse väljakutsega, seiske vastu kiusatusele kasutada floate või keerulisi positsioneerimise häkke. Selle asemel küsige endalt: kas seda saab lahendada ruumi sihipärase jaotamisega? Vastus, sagedamini kui ei, leitakse CSS Flexboxi täiustatud võimalustest.