Të gjitha vetitë flexbox. Udhëzuesi i plotë për Flexbox
Në këtë artikull, ne do të vazhdojmë të studiojmë çështje që lidhen me paraqitjen moderne vendase të faqeve të faqes duke përdorur fletë stili kaskadë duke përdorur modelin Flexbox.
Në artikullin e mëparshëm, mësuam se si të punojmë dhe të bëjmë të gjitha llojet e cilësimeve për kontejnerët flex duke përdorur vetitë moderne të CSS, por kjo nuk mjafton për të zgjidhur shumë detyra që lidhen me paraqitjen e faqes.
Tani do të shikojmë metodat e punës drejtpërdrejt me artikujt fleksibël, do të mësojmë se si të përcaktojmë rendin e shfaqjes së tyre në një enë, do të mësojmë se si të rreshtoni vertikalisht një artikull specifik fleksibël, do të shqyrtojmë se si të specifikoni gjerësinë relative të një artikulli fleksibël, të paracaktuar gjerësia e një artikulli flex, dhe disa truke të tjera të nevojshme për të punuar me artikuj flex.
Rendi i elementeve
Në këtë seksion, ne do të hedhim një vështrim se si të përdorim Flexbox layout vendos rendin e elementeve brenda elementit prind, gjë që do të lejojë në një mënyrë të thjeshtë zgjidhni probleme në dukje komplekse. Vetia e rendit CSS ju lejon të vendosni rendin e elementit flex në kontejner në lidhje me pjesën tjetër.
Nëse elementi nuk është një element fleksibël (nuk është brenda një elementi prind që është një bllok ose kontejner flex inline), atëherë , dhe çdo veçori e destinuar për të punuar me artikuj fleksibël nuk do të ketë asnjë efekt në ato artikuj.
Unë tërheq vëmendjen tuaj për faktin se nëse specifikoni një vlerë pronësie për një element flex në kontejner, atëherë kjo nuk do të jetë numri i tij serial, por tregon vetëm "peshën" e pozicionit të saj në raport me elementët e tjerë. Vlerat negative janë të lejuara (vlera -1, për shembull, e zhvendos elementin në skajin e majtë të kontejnerit mëmë). Vlera e paracaktuar është 0.
Një paraqitje skematike e funksionimit të pronës shfaqet në imazhin e mëposhtëm:
Në këtë tutorial, ne kemi hasur në mënyrë të përsëritur pronën, falë së cilës mund të kontrolloni dukshmërinë e elementeve përgjatë boshtit z, parimi i specifikimit të vlerave të pronave është i ngjashëm. Ju mund të përdorni në punën tuaj çdo vlerë që do të jetë e qartë për ju, për shembull, 100 , 200 , 300 dhe të ngjashme.
Rendit: -1;
rendit: 1;
rendit: 2;
Në këtë shembull, ne kemi vendosur tre pesë elementet
Le të kalojmë në një shembull:
Në këtë shembull, ne kemi vendosur tre enë bllok fleksi, brenda tyre vendosëm tre element
V së pari enë e dyta elementi do të rritet me 2 në raport me pjesën tjetër të elementeve fleks, gjatë e dyta enë për 3, dhe në e treta tashmë në katër. Vini re se si gjerësia e elementeve do të ndryshojë proporcionalisht, pa përdorur ndonjë llogaritje nga ana jonë, ose duke përdorur funksione shtesë.
V së pari enë e treguar për e dyta madhësia e paracaktuar e elementit flex 100 px, në e dyta enë 100 px, dhe ne e treta tashmë 10000 px. Ju lutemi vini re se në e treta Në kontejner, elementi, pavarësisht nga përmasat e tij, nuk shkaktoi tejmbushje, por u përshtat me hapësirën e mbetur në kontejnerin mëmë.
Vlera që përcakton se sa do të zvogëlohet blloku në lidhje me pjesën tjetër të elementeve fleksibël në kontejner (nëse nuk ka hapësirë të mjaftueshme të lirë) vendoset në analogji me vetinë , por vlera e paracaktuar do të jetë 1, jo 0. Vlerat negative gjithashtu nuk lejohen (nuk janë të vlefshme).
Një veti me vlerë 0 specifikon që elementi nuk do të tkurret, duke ruajtur gjerësinë e kërkuar të elementit! Nëse së bashku me këtë vlerë specifikohet vlera minimale e gjerësisë së elementit flex si parazgjedhje (vetia ), atëherë elementi nuk do të mund të ulet nën këtë vlerë. Përdoreni këtë veçori me mençuri, pasi ekziston mundësia që përmbajtja e enës flex të tejmbushet. Ne do ta shqyrtojmë këtë pikë në fund të artikullit.
Le të kalojmë në një shembull:
Në këtë shembull, ne kemi vendosur tre enë bllok fleksi, brenda tyre vendosëm tre element
Në këtë artikull, ne do të njihemi me teknologjinë CSS Flexbox, e krijuar për të krijuar paraqitje fleksibël të faqeve në internet.
Mbështetje e shfletuesit për teknologjinë CSS Flexbox
Teknologjia Flexbox tashmë mbështetet nga pothuajse të gjithë shfletuesit e përdorur aktualisht (duke përdorur prefikset: IE10+, Edge12+, Firefox 2+, Chrome 4+, Safari 3.1+, Opera 12.1+, iOS Safari 3.2, Opera mini, Android 2.1+, Blackberry 7+) .
Bazat e Flexbox (Rrjeti)
Rrjeti është baza e Flexbox. Ai përbëhet nga vetëm 2 elementë. Elementi i parë është enë përkulëse. Krijimi i një kontejneri flex bëhet duke shtuar një veti CSS të ekranit në elementin e kërkuar HTML me një vlerë flex ose flex-inline.
Më pas të gjithë fëmijët e menjëhershëm të kontejnerit flex(fëmijët) bëhen automatikisht artikuj të përkulur(Rrjeti flexbox 2 artikujsh).
Shënimi HTML:
Flex-container ( ekran: flex; /* flex || inline-flex */ ) Struktura e rrjetit flexbox
Artikujt Flex zënë lartësinë e plotë të një kontejneri flex si parazgjedhje.
Vlera flex ose flex-inline përcakton se si enë përkulëse do të paraqitet në faqe. Nëse duhet të paraqitet si bllokoj, pastaj përdorni vlerën flex. Nëse elementi duhet të paraqitet si shkronja të vogla, më pas përdorni vlerën flex-inline. Në këtë rast, do të zërë aq hapësirë në faqe sa të jetë e nevojshme për të shfaqur elementët e saj.
Drejtimi i shtrirjes së artikujve fleksibël
Drejtimi i shtrirjes së elementeve fleksibël brenda kontejnerit të përkulur tregohet nga sëpata.
Ndani në flexbox 2 boshte. Boshti i parë quhet bazë ose kryesore(si parazgjedhje drejtohet djathtas). E dyta - tërthore(e parazgjedhur duke treguar poshtë).
Artikujt në një enë fleksibël janë të rreshtuar (sipas parazgjedhjes) edhe kur nuk kanë hapësirë të mjaftueshme. Rendisni elementët e përkuljes në kontejnerin flex në drejtim të boshtit kryesor.
Pozicioni i elementeve në kontejner si parazgjedhje (artikujt e përkulur që nuk kanë hapësirë të mjaftueshme në kontejnerin flex zvarriten jashtë tij)
Në CSS Flexbox, lejimi i artikujve flex për t'u mbështjellë në rreshta të rinj (nëse atyre u mungon hapësira në linjën aktuale) bëhet duke vendosur vetinë flex-wrap të CSS të kontejnerit flex në mbështjellje ose mbështjellje-reverse .
Flex-wrap: mbështjell; /* nowrap (një rresht - i parazgjedhur) mbështjell (lejo artikujt fleksibël të mbështillen në rreshta të rinj) wrap-reverse (mbështjell artikujt flex në rend të kundërt) */
Vlerat wrap dhe wrap-reverse të vetive flex-wrap CSS përcaktojnë drejtimin e boshtit kryq.
Vendosja e drejtimit të boshtit kryesor flexbox bëhet duke përdorur veçorinë flex-direction CSS.
Flex-drejtimi: rreshti; /* rresht (djathtas) - rreshti i paracaktuar-mbrapsht (majtas) kolona (poshtë) kolona-mbrapsht (lart) */
Me këtë veti, mund të siguroheni që artikujt fleksibël të vendosen jo horizontalisht (në rreshta), por vertikalisht (në kolona).
Vetitë flex-direction dhe flex-wrap mund të specifikohen duke përdorur veçorinë gjenerike Flex-flow CSS:
flex-flow: row nowrap; /* 1 vlerë - drejtim i përkulur, 2 vlerë - përkulje përkul */
Përafrimi i artikujve fleksibël
Në Flexbox, elementët brenda një kontejneri janë rreshtuar në dy drejtime (akse).
Rreshtimi i artikujve të përkulur përgjatë boshtit kryesor
Rreshtimi i elementeve përgjatë boshtit kryesor bëhet duke përdorur veçorinë justify-content CSS:
justify-content: flex-start; /* flex-start (artikujt fleksibël janë rreshtuar në lidhje me fillimin e boshtit) - fundi i paracaktuar flex-end (artikujt fleksibël janë rreshtuar në lidhje me fundin e boshtit) qendër (në qendër të kontejnerit të përkulur) hapësirë-ndërmjet ( në mënyrë të barabartë, dmth me të njëjtën distancë ndërmjet artikujve fleksibël) hapësirë-rreth (në mënyrë të barabartë, por me shtimin e gjysmës së hapësirës para artikullit të parë fleksibël dhe pas atij të fundit) */ Opsionet për rreshtimin e artikujve fleksibël përgjatë boshtit kryesor
Rreshtimi i artikujve të përkulur përgjatë boshtit kryq
Përafrimi i artikujve fleksibël në një kontejner flex në drejtim të boshtit tërthor bëhet duke përdorur veçorinë align-item CSS:
Align-arts: stretch; /* shtrirje (shtrirje përgjatë gjithë gjatësisë së boshtit tërthor) - fillimi i përkulur i paracaktuar (në lidhje me fillimin e boshtit tërthor) fundi i përkulur (në lidhje me fundin e boshtit tërthor) vija bazë (në raport me vijën bazë) qendra (në qendër) */ Opsionet e shtrirjes për artikujt fleksibël përgjatë boshtit tërthor
Përafrimi i linjave të një enë fleksi
CSS Flexbox ju lejon të rreshtoni jo vetëm vetë artikujt flex, por edhe linjat në të cilat ndodhen.
Align-content: shtrirje /* shtrirje (shtrirje përgjatë gjithë gjatësisë së boshtit kryq) - e paracaktuar flex-start (në lidhje me fillimin e boshtit kryq) flex-end (në lidhje me fundin e boshtit kryq) qendër (në qendër ) hapësirë-midis (në mënyrë të barabartë, d.m.th. me të njëjtën distancë ndërmjet vijave) hapësirë-rreth (në mënyrë të barabartë, por me shtimin e gjysmës së hapësirës para rreshtit të parë dhe pas të fundit) */ Opsionet për rreshtimin e vijave të fleksit enë
Vetia align-content ka kuptim vetëm kur artikujt flex në kontejnerin flex shtrihen në disa rreshta. Që të ndodhë kjo, së pari, të gjithë artikujt flex duhet të jenë më të gjera se gjerësia e kontejnerit flex dhe së dyti, kontejneri flex duhet të ketë vetitë e tij Flex-wrap CSS të vendosur në wrap ose wrap-reverse .
prona align-self CSS
Vetia align-self, ndryshe nga ato të mëparshmet (justify-content , align-item , dhe align-content ), është për artikujt flex. Ju lejon të ndryshoni përkulja e artikujve përgjatë drejtimit të boshtit tërthor. Vetia align-self mund të marrë të njëjtat vlera si align-item .
Align-arts: stretch; /* automatik (i parazgjedhur) || shtrirje || fillimi i përkulur || fundi i përkulur || bazë || qendër */
Flex-container ( ekrani: flex; gjerësia: 300 px; lartësia: 150 px; rreshtoj-artikujt: qendër; mbushja: 10 px; sfond-color: #efefef; ) .flex-container_element-1, .flex-container_element-2, .flex -container_element-3, .flex-container_element-4 ( flex-basis: 70px; text-align: center; padding: 15px; font-size: 30px; ) .flex-container_element-1 ( align-self: flex-start; sfond: #fe4; ) .flex-container_element-2 ( align-self: flex-end; sfond: rozë; ) .flex-container_element-3 ( align-self: stretch; background: lime; ) .flex-container_element-4 ( align-self: auto; background: cyan; ) Si funksionon vetia align-self CSS
Ndryshimi i renditjes së artikujve fleksibël
Si parazgjedhje, artikujt flex shfaqen në kontejnerin flex sipas renditjes në të cilën shfaqen në kodin HTML. Për të ndryshuar rendin e disa artikujve flex në krahasim me të tjerët në CSS Flexbox, mund të përdorni veçorinë e porosisë. Kjo veti CSS rregullon artikujt flex në një kontejner flex në rend rritës të numrave të tyre.
porosia: 0; /* 0 (i parazgjedhur) numër i plotë pozitiv ose negativ */
Për shembull:
Kontrolli i gjerësisë së një artikulli Flex
Flexbox ka disa veti CSS që përcaktojnë se sa i gjerë mund të jetë një artikull flex.
veti CSS me bazë flex
Kjo pronë është menduar për vendosja e gjerësisë fillestare të një elementi flex. Mund të caktoni vlerën e gjerësisë duke përdorur njësi të ndryshme, si px, %, em, etj. Si parazgjedhje, kjo veti është vendosur në automatik (në këtë rast, gjerësia e elementit do të llogaritet automatikisht në bazë të përmbajtjes së tij).
Gjerësia përfundimtare e artikullit flex do të përcaktohet nga në varësi të vlerave të vetive CSS flex-grow dhe flex-shrink, të cilat vendosen jo vetëm për këtë element, por edhe për elementët e tjerë fleksibël të këtij kontejneri flex.
Vetia flex-grow CSS
Kjo veti përcakton nëse gjerësia fillestare e elementit flex rritet (rritet). Rritja e gjerësisë së një elementi flex bëhet nga linja e hapësirës së lirë. Vetia flex-grow CSS është caktuar në numër i plotë. Është kjo vlerë që përcakton (nëse është më e madhe ose e barabartë me 1) se sa hapësirë të lirë do të marrë elementi flex për vete.
Për shembull:
Në këtë shembull, nëse artikujt fleksibël janë në të njëjtën linjë dhe ka hapësirë të lirë (600×(1-0,8)=120 px):
- 1/5 e kësaj hapësire do t'i shtohet gjerësisë së .flex-container_element-1 (120x1/5=24px);
- 4/5 e asaj hapësire do t'i shtohen gjerësisë së .flex-container_element-2 (120x4/5=96px).
Me fjalë të tjera, vetia flex-grow CSS ju lejon jo vetëm të specifikoni se gjerësia e një artikulli flex mund të rritet, por gjithashtu të specifikoni se sa mund të rritet kjo vlerë në lidhje me elementët e tjerë.
Si parazgjedhje, vetia flex-grow CSS ka një vlerë 0, që do të thotë se një element flex nuk mund të rritet (të rrisë gjerësinë e tij).
Vetia e përkuljes CSS
Kjo veti përcakton nëse gjerësia e elementit flex mund të reduktohet. Zvogëlimi i gjerësisë së një artikulli flex do të ndodhë vetëm nëse gjerësia e linjës nuk do të jetë e mjaftueshme për të shfaqur të gjithë artikujt fleksibël të vendosura në të. Gjerësia e kërkuar llogaritet në baza e gjerësisë fillestare, i cili ka çdo artikull flex në të.
Për shembull:
Gjerësia e kontejnerit flex është 500px. Duhen 600 px për të shfaqur artikujt fleksibël. Si rezultat, 100 px mungon. Në këtë shembull, 2 artikuj fleksibël (.flex-container_element-1 dhe .flex-container_element-2) mund të tkurren. Gjerësia e elementit të parë flex.flex-container_element-1 në këtë rast do të jetë 300 - 1/4*100= 275px. Gjerësia e elementit të dytë flex.flex-container_element-2 në këtë rast do të jetë 300 - 3/4*100= 225px.
Vlera e paracaktuar:
Flex-shrink: 1;
Nëse keni nevojë parandaloni tkurrjen e artikullit flex, atëherë vlera e vetive flex-shrink duhet të vendoset në numrin 0.
vetia flex CSS
Për të vendosur me lehtësi flex-grow, flex-shrink dhe flex-basis, mund të përdorni veçorinë flex CSS.
Vlera e paracaktuar:
Flex: 0 1 auto; /* 0 - flex-grow (vlera 1) 1 - flex-shrink (vlera 2) auto - flex-basis (vlera 3) */
Paraqitja e faqes me CSS Flexbox
Në këtë seksion, ne do të krijojmë një plan urbanistik të thjeshtë të përgjegjshëm me Flexbox.
Struktura e paraqitjes do të përbëhet nga 3 seksione:
- header (për të shfaqur titullin dhe menunë kryesore);
- kryesore (për të shfaqur pjesën kryesore);
- footer (për fundoren).
Pjesa kryesore (kryesore), nga ana tjetër, do të ndahet në 2 seksione të tjera (ne do t'i pozicionojmë ato duke përdorur CSS Flexbox). Në ekranet e mëdha(>=992px) këto seksione do të ndërtohen horizontalisht, dhe në pjesën tjetër - vertikalisht (<992px).
Për të mbështetur paraqitjen në shumicën e shfletuesve, shtoni prefikset e nevojshme dhe gjerësinë maksimale në CSS.
Për të "shndërruar" një bllok në një enë flex, ne do të përdorim klasën row-flex. Ne do të vendosim gjerësinë për çdo element flex (main_article dhe main_aside) brenda kontejnerit flex duke përdorur veçorinë flex CSS.
Si shembull, le të përdorim Flexbox për të shënuar bllokun "Footer" dhe seksionin "Interesant në sajt" të seksionit të artikullit kryesor.
Seksionin "Footer" do ta ndajmë në 4 pjesë të barabarta (gjerësia minimale e një pjese është 200 px), dhe seksioni "Interesante në sit" në 3 pjesë (gjerësia minimale e një pjese është 300 px).
CSS shtesë:
Footer_block, .main_other_article ( -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; - ms-flex-pozitive: 1; përkulje-rritje: 1; gjerësia maksimale: 100%; )
Danny Markov
Dizajni është mjaft i thjeshtë - përbëhet nga një enë e vendosur në qendër, brenda së cilës kemi një kokë, seksion kryesor, shirit anësor dhe fund. Këtu janë "testet" kryesore që duhet të bëjmë duke mbajtur CSS dhe HTML sa më të pastër që të jetë e mundur:
- Vendosni katër seksione kryesore të paraqitjes.
- Bëni faqen të përgjegjshme (shiriti anësor rrëshqet poshtë përmbajtjes kryesore në ekranet e vegjël).
- Përafroni përmbajtjen e titullit - navigimi në të majtë, butoni në të djathtë.
Siç mund ta shihni, për hir të krahasimit, ne mbajmë gjithçka sa më të thjeshtë. Le të fillojmë me testin e parë.
Testi 1: Vendosja e seksioneve të faqeve
Zgjidhje në Flexbox
Shtoni ekranin: përkulni në enë dhe vendosni drejtimin e elementeve të fëmijëve vertikalisht. Kjo i pozicionon të gjitha seksionet poshtë njëri-tjetrit.
Enë (ekrani: përkul; drejtimi i përkuljes: kolona; )
Tani duhet të sigurohemi që seksioni kryesor dhe shiriti anësor janë të vendosura krah për krah. Meqenëse kontejnerët fleksibël janë zakonisht me një drejtim, duhet të shtojmë një element shtesë.
Më pas vendosim që ai element të shfaqet: flex dhe flex-direction me drejtim të kundërt.
Mbështjellësi kryesor dhe i shiritit anësor (ekrani: përkul; drejtimi i përkuljes: rreshti; )
Hapi i fundit është vendosja e dimensioneve të seksionit kryesor dhe shiritit anësor. Ne duam që përmbajtja kryesore të jetë tre herë më e gjerë se shiriti anësor, gjë që është e lehtë për t'u bërë me përkulje ose përqindje.
Siç mund ta shihni, Flexbox bëri gjithçka mirë, por na duheshin edhe disa veçori CSS plus një element shtesë HTML. Le të shohim se si do të funksionojë CSS Grid.
Zgjidhja e rrjetit CSS
Ka disa opsione për përdorimin e rrjetit CSS, por ne do të përdorim sintaksën grid-template-zonat siç është më e përshtatshme për qëllimet tona.
Së pari, ne do të përcaktojmë katër zona të rrjetit , një për çdo seksion të faqes:
Tani mund të konfigurojmë rrjetin tonë dhe të përcaktojmë vendndodhjen e secilës zonë. Kodi mund të duket mjaft kompleks në fillim, por sapo të njiheni me sistemin e rrjetit, bëhet më i lehtë për t'u kuptuar.
Container ( display: grid; /* Përcaktoni madhësinë dhe numrin e kolonave të rrjetit tonë. Njësia fr funksionon si Flexbox: kolonat ndajnë hapësirën e lirë në rresht sipas vlerave të tyre. Do të kemi dy kolona - e para është tre herë sa madhësia e të dytit. .
Kjo eshte e gjitha! Paraqitja jonë tani do të përputhet me strukturën e mësipërme dhe ne e kemi vendosur atë në mënyrë që të mos kemi nevojë të merremi me margjina ose mbushje.
Testi 2. Bërja e faqes responsive
Zgjidhje në Flexbox
Ky hap lidhet rreptësisht me atë të mëparshëm. Për zgjidhjen Flexbox, do të duhet të ndryshojmë drejtimin e përkuljes dhe të rregullojmë margjinën.
@media (gjerësia maksimale: 600 pikselë) ( .mbështjellësi kryesor dhe i shiritit anësor ( drejtimi i përkulur: kolona; ) . kryesori (diferenca-djathtas: 0; kufiri-poshtë: 60 px; ) )
Faqja jonë është mjaft e thjeshtë, kështu që nuk ka shumë punë në pyetjen mediatike, por në një plan urbanistik më kompleks ka shumë punë për të bërë.
Zgjidhja e rrjetit CSS
Meqenëse ne kemi përcaktuar tashmë zonat e rrjetit, thjesht duhet t'i rirenditim ato në pyetjen e medias. Mund të përdorim të njëjtin konfigurim të kolonës.
@media (gjerësia maksimale: 600 pikselë) ( .container ( /* Rreshtoni zonat e rrjetit për paraqitjen celulare */ zonat e shabllonit të rrjetit: "koka e kokës" "kryesore" "shiriti anësor i shiritit anësor" "Futeri i fundit"; ) )
Ose mund të ripërcaktojmë të gjithë paraqitjen nga e para nëse mendojmë se kjo zgjidhje është më e pastër.
@media (max-width: 600px) ( .container ( /* Konvertimi i rrjetës në një plan urbanistik të vetëm */ grid-template-columns: 1fr; grid-template-zonat: "header" "main" "sidebar" "footer ";))
Testi 3: Përafrimi i komponentëve të kokës
Zgjidhje në Flexbox
Ne kemi bërë tashmë një plan urbanistik të ngjashëm në Flexbox në një nga artikujt tanë të vjetër - . Teknika është mjaft e thjeshtë:
Koka (shfaqja: përkul; justifiko-përmbajtje: hapësirë-midis; )
Lista e navigimit dhe butoni tani janë rreshtuar siç duhet. Mbetet vetëm për të vendosur sendet brenda
Navigimi i kokës (ekrani: përkul; rreshtimi i artikujve: vija bazë; )
Vetëm dy rreshta! Mjafte mire. Le të shohim se si CSS Grid e trajton këtë.
Zgjidhja e rrjetit CSS
Për të ndarë navigimin dhe butonin, duhet të shtojmë ekranin: rrjetë në kokë dhe të konfigurojmë një rrjet me dy kolona. Do të na duhen gjithashtu dy linja shtesë të CSS për të pozicionuar gjithçka në kufijtë e tyre përkatës.
Header (ekrani: rrjeti; grid-shabllon-kolonat: 1fr 1fr; ) navigimi i kokës ( justify-self: start; ) button header ( justify-self: fund; )
Për sa i përket lidhjeve me një linjë brenda navigimit, ne nuk e kuptuam siç duhet me CSS Grid. Ja se si duket përpjekja jonë më e mirë:
Navigimi i kokës (ekrani: rrjeti; kolonat e shabllonit të rrjetës: automatikisht 1fr 1fr; rreshtimi i artikujve: fundi; )
Është e qartë se CSS Grid nuk e ka trajtuar këtë pjesë të paraqitjes, por kjo nuk është për t'u habitur - fokusi është në shtrirjen e kontejnerëve, jo në përmbajtjen brenda tyre. Ky sistem nuk është për të bërë prekjet e fundit.
konkluzionet
Nëse e keni lexuar artikullin në tërësi (që është punë e shkëlqyer!), përfundimet nuk duhet t'ju habisin. Në fakt, jo sistemi më i mirë- si Flexbox ashtu edhe CSS Grid janë të mira në mënyrën e tyre dhe duhet të përdoren së bashku, jo si alternativa ndaj njëri-tjetrit.
Për ata prej jush që u hodhën drejt në përfundimet e këtij artikulli (mos u shqetësoni, ne e bëjmë edhe atë), këtu është një përmbledhje e krahasimit:
- CSS Grid është i shkëlqyeshëm për krijimin e pamjes së madhe. Ky sistem e bën më të lehtë menaxhimin e paraqitjes së faqeve dhe madje mund të merret me dizajne të personalizuara dhe asimetrike.
- Flexbox është i shkëlqyeshëm për përafrimin e përmbajtjes brenda elementeve. Përdoreni këtë sistem për të vendosur detaje të vogla të projektimit.
- Përdorni rrjetën CSS për paraqitjet 2D (rreshta DHE kolona).
- Flexbox funksionon më mirë vetëm në një dimension (me rreshta OSE me kolona).
- Nuk ka asnjë arsye për të përdorur vetëm CSS Grid ose vetëm Flexbox. Studiojini ato dhe përdorni ato së bashku.
Moduli i paraqitjes së Flexbox ( nga English Flexible Box - bllok fleksibël), e cila aktualisht është në fazën " Rekomandim i mundshëm» Standardizimi i W3C ( Rekomandimi i kandidatit të W3C) synon të ofrojë një mënyrë më efikase për të shtruar, rreshtuar dhe shpërndarë hapësirën midis elementeve në një kontejner, edhe nëse madhësia e tyre është e panjohur dhe/ose e përcaktuar në mënyrë dinamike ( kjo është arsyeja pse quhet "fleksibël").
Ideja kryesore pas paraqitjes së përgjegjshme është t'i jepet kontejnerit aftësinë për të ndryshuar lartësinë/gjerësinë (dhe renditjen) e elementeve të tij për të mbushur në mënyrë optimale hapësirën e disponueshme ( kryesisht për të mbështetur të gjitha llojet dhe madhësitë e ekraneve).
Një enë fleksibël i shtrin sendet për të mbushur hapësirën ose i ngjesh për të parandaluar tejmbushjen.
Më e rëndësishmja, paraqitja e Flexbox është pa drejtim, në krahasim me paraqitjet e rregullta ( blloqe që janë të orientuara vertikalisht dhe elementë inline që janë të orientuar horizontalisht).
Dhe ndërsa elementët e rregullt të shënimit funksionojnë mirë për faqet, atyre u mungon fleksibiliteti ( dhe nuk është lojë fjalësh) për të mbështetur aplikacione të mëdha dhe komplekse ( veçanërisht kur bëhet fjalë për ndryshimin e orientimit, ndryshimin e madhësisë, shtrirjen, tkurrjen, etj).
Shënim: Paraqitja e Flexbox është më e mira për komponentët e aplikacionit dhe paraqitjet e vogla, ndërsa paraqitja e rrjetës është për paraqitjet më të mëdha.
Konceptet dhe termat bazë
Meqenëse Flexbox është një modul i tërë dhe jo një pronë e vetme, ai përfshin shumë elementë, duke përfshirë një grup të tërë të vetive. Disa prej tyre synohen të aplikohen në një enë ( te elementi mëmë, i njohur si kontejneri flex), ndërsa të tjerët duhet të zbatohen për elementët fëmijë ( le t'i quajmë artikuj fleksibël).
Ndërsa paraqitja e rregullt bazohet në drejtimet e bllokut dhe të linjës, paraqitja e përkulur bazohet në drejtimet e rrjedhës së përkulur. Ju lutemi hidhini një sy diagramit më poshtë nga specifikimi për të shpjeguar idenë kryesore pas paraqitjes flex:
Në thelb, elementët do të vendosen ose përgjatë boshtit kryesor ( nga fillimi kryesor deri në fundin kryesor), ose përgjatë boshtit tërthor ( nga fillimi i tërthortë në fundin e kryqëzuar):
- aksi kryesor është boshti kryesor i kontejnerit fleks përgjatë të cilit vendosen sendet fleksi. Kini kujdes, nuk ka pse të jetë horizontal, pozicioni i tij varet nga vetia flex-direction (shih më poshtë);
- fillimi kryesor | artikujt main-end-flex janë të vendosura brenda kontejnerit, duke filluar nga pika kryesore-fillimi dhe duke arritur në pikën kryesore-fund;
- madhësia kryesore është gjerësia ose lartësia e artikullit flex, në varësi të madhësisë kryesore. Vlera e vetive të madhësisë kryesore mund të vendoset në gjerësi ose lartësi;
- aksi kryq - aks kryq pingul me boshtin kryesor. Drejtimi i tij varet nga drejtimi i boshtit kryesor.
- fillimi kryq | kryq - linjat e përkuljes mbushen me artikuj dhe vendosen në enë, duke filluar nga ana e fillimit tërthor drejt anës së skajit tërthor;
- madhësia kryq - gjerësia ose lartësia e elementit flex, në varësi të dimensionit të zgjedhur. Vetia mund të vendoset ose në gjerësinë ose lartësinë e dimensionit kryq.
Vetitë e klasës mëmë (kontejner fleksibël)
shfaqja
Kjo veti përcakton kontejnerin flex: inline ose bllok, në varësi të vlerës së vendosur. Ai gjithashtu zgjidh kontekstin fleksibël për të gjithë fëmijët e tij të drejtpërdrejtë:
Kontejner (ekrani: flex; /* ose inline-flex */ )
Vini re se kolonat (kolonat) CSS nuk kanë efekt në një kontejner flex.
drejtimi i përkuljes
Kjo veti përcakton boshtin kryesor, i cili përcakton drejtimin në të cilin artikujt fleksibël vendosen në një enë përkulëse. flexbox ( përveç mbështjelljes opsionale) është koncepti i shënjimit të njëanshëm.Imagjinoni që artikujt fleksibël vendosen fillimisht në kolona horizontale ose vertikale:
Kontejneri (drejtimi i përkulur: rreshti | rreshti-mbrapsht | kolona | kolona-mbrapa; )
- rreshti (parazgjedhja): nga e majta në të djathtë për ltr; nga e djathta në të majtë për rtl;
- row-reverse : nga e djathta në të majtë për në ltr; nga e majta në të djathtë për rtl;
- kolona : njëjtë si rreshti, por nga lart poshtë;
- kolona-reverse : njësoj si row-reverse, por nga poshtë lart.
mbështjellës përkul
Si parazgjedhje, artikujt fleksibël do të përpiqen të përshtaten në një rresht. Ju mund ta ndryshoni këtë dhe t'i mbështillni elementet si të dëshironi me këtë veti. Drejtimi në të cilin ndodhen linjat e reja gjithashtu luan një rol këtu:Enë (mbështjellje me përkulje: tani mbështjell | mbështjell | mbështjell në anën e kundërt; )
- nowrap (default): rresht i vetëm / nga e majta në të djathtë për ltr; djathtas në të majtë për rtl;
- mbështjell: me shumë rreshta / nga e majta në të djathtë për ltr; djathtas në të majtë për rtl;
- wrap-reverse: multiline / djathtas në të majtë për ltr; nga e majta në të djathtë për rtl.
Flex-flow (zbatohet në elementin mëmë të kontejnerit flex)
Kjo është një formë stenografike e vetive flex-direction dhe flex-wrap, të cilat së bashku përcaktojnë boshtet kryesore dhe tërthore të një kontejneri të përkulur. Vlera e paracaktuar është row nowrap:
rrjedha e përkulur:<‘flex-direction’> || <‘flex-wrap’>
justifikoj-përmbajtje
Kjo veti specifikon shtrirjen përgjatë boshtit kryesor. Kjo ndihmon në shpërndarjen e hapësirës së tepërt të lirë nëse të gjithë artikujt fleksibël në një rresht janë jofleksibël ose fleksibël, por kanë arritur madhësinë e tyre maksimale. Gjithashtu, kjo veti ju lejon të merrni kontrollin mbi shtrirjen e elementeve kur ato shkojnë përtej vijës:Kontejner ( justify-content: flex-start | flex-end | qendër | hapësirë-midis | hapësirë-rreth; )
- flex-start (e parazgjedhur): artikujt janë rreshtuar në fillim të rreshtit;
- flex-end : artikujt janë rreshtuar në fund të rreshtit;
- qendra : elementet janë rreshtuar në qendër të linjës;
- space-between : elementet shpërndahen në mënyrë të barabartë në rresht: elementi i parë ndodhet në fillim të rreshtit, elementi i fundit është në fund;
- hapësirë-rreth : elementët shpërndahen në mënyrë të barabartë në një rresht me të njëjtën distancë midis tyre.
rreshtoj-artikuj
Kjo veti përcakton se si artikujt flex pozicionohen si parazgjedhje në lidhje me boshtin kryq në vijën aktuale. Mund të mendohet si versioni ndër-boshtor i justify-content ( pingul me kryesoren):Kontejneri (artifikoni artikujt: fillimi i përkulur | fundi i përkulur | qendër | vija bazë | shtrirje; )
- flex-start: kufiri i elementeve ndër-start ndodhet në linjën cross-start;
- flex-end : kufiri i elementeve të fillimit të kryqëzuar është i vendosur në vijën ndër-fund;
- qendër : elementët janë të përqendruar në boshtin kryq;
- bazë : elementet janë të rreshtuara sipas vijës bazë;
- shtrirje (e parazgjedhur): elementet shtrihen për të mbushur enën ( duke marrë parasysh vlerat min-width/max-width).
rreshtoni përmbajtjen
Kjo veti ju lejon të rreshtoni linjat brenda një kontejneri flex kur është e mundur. vend i lirë në boshtin kryq, i cili është i ngjashëm me mënyrën se si vetia justify-content përafron elementet individuale në lidhje me boshtin kryesor.Shënim: Kjo veçori nuk do të funksionojë nëse ka vetëm një rresht artikujsh fleksibël:
Kontejneri (lidhja-përmbajtja: fillimi i përkulur | fundi i përkulur | qendër | hapësirë-midis | hapësirë-rreth | shtrirje; )
- flex-start : linjat vendosen në fillim të kontejnerit;
- flex-end : linjat vendosen në fund të kontejnerit;
- qendër : rreshtat vendosen në mes të enës;
- space-between : linjat janë të ndara në mënyrë të barabartë; rreshti i parë është në fillim të enës, dhe rreshti i fundit është në fund;
- hapësirë-rreth: vijat janë të ndara në mënyrë të barabartë në të njëjtën distancë nga njëra-tjetra;
- shtrirje (parazgjedhja): Linjat shtrihen për të mbushur hapësirën e mbetur.
Karakteristikat e elementit fëmijë
(artikuj të përkulur)
Rendit
Si parazgjedhje, artikujt fleksibël vendosen në rendin e dhënë nga burimi. Sidoqoftë, vetia e porosisë kontrollon rendin në të cilin artikujt shfaqen në një kontejner flex:Artikulli (porosi:
përkul-rriten
Kjo veti lejon që elementi flex të "rritet" sipas nevojës. Ajo merr një vlerë pa dimension që shërben si proporcion. Kjo vlerë përcakton se sa hapësirë të disponueshme brenda kontejnerit flex mund të zërë një element.Nëse të gjithë elementët kanë veçorinë flex-grow të caktuar në 1, atëherë çdo element fëmijë do të vendoset në të njëjtën madhësi brenda kontejnerit. Nëse vendosni një nga elementët fëmijë në 2, atëherë ai do të zërë dy herë më shumë hapësirë se të tjerët:
Artikulli (flex-grow:
përkul-tkurr
Kjo veti lejon që artikujt fleksibël të tkurren kur nevojitet:
Artikulli (përkul-shrink:
Numrat negativë nuk lejohen.
baza fleksibël
Kjo veti përcakton madhësinë e paracaktuar të elementeve përpara se të ndajë hapësirën e mbetur:
Artikulli (bazuar në flex:
përkul
Kjo veti është një stenografi për një kombinim të vetive flex-grow , flex-shrink dhe flex-basic. Parametrat e dytë dhe të tretë (flex-shrink dhe flex-basis) janë opsionale. Vlerat e parazgjedhura: 0 1 automatik:
Artikulli( flex: asnjë | [<"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }
përafroj-vetë
Kjo veti ju lejon të anashkaloni shtrirjen e paracaktuar ( ose të përcaktuara nga vetia align-item) për artikujt fleksibël individual.Ju mund t'i gjeni vlerat e disponueshme në përshkrimin e pronës së align-items:
Artikulli ( rreshtimi i vetvetes: automatik | fillimi i përkulur | fundi i përkulur | qendër | vija bazë | shtrirje; )
Vini re se float , i qartë dhe vertikal-liign nuk funksionojnë në artikujt flex.
Shembuj
Le të fillojmë me një shumë një shembull i thjeshtë, duke zgjidhur një problem pothuajse të përditshëm: shtrirje perfekte në qendër. Asgjë nuk është më e lehtë duke përdorur flexbox:
Prindi (ekrani: përkul; lartësia: 300 px; /* Ose çfarëdo */ ) .fëmijë ( gjerësia: 100 px; /* Ose çfarëdo */ lartësia: 100 px; /* Ose çfarëdo */ diferenca: automatik; /* Magjike */)
Ky shembull mbështetet në faktin se vetia margin, e vendosur në auto, konsumon hapësirë shtesë. Prandaj, një vendosje e tillë e dhëmbëzimit e rreshton elementin saktësisht në qendër nga të dy akset.
Tani le të përdorim disa veti të tjera. Supozoni se kemi një listë me 6 elementë, të gjithë janë me madhësi fikse ( për estetikë), por me opsionin e plotësimit automatik.
Ne duam që ato të jenë të bukura, të vendosura në mënyrë të barabartë në boshtin horizontal, në mënyrë që kur dritarja e shfletuesit të ndryshojë madhësinë, gjithçka të duket mirë ( pa përdorur pyetje mediatike):
Flex-container ( /* Fillimisht krijoni kontekstin e paraqitjes flex */ shfaq: flex; /* Më pas përcaktoni drejtimin e rrjedhës dhe nëse duam që artikujt të mbështillen. * Mos harroni se kjo është e njëjtë si: * flex-direction : row; * flex-wrap: wrap; */ flex-flow: mbështjellja e rreshtit; /* Tani ne përcaktojmë se si të shpërndajmë hapësirën e mbetur */ justify-content: space-around; )
Gati! Çdo gjë tjetër është çështje dizajni. Këtu është një demonstrim i këtij shembulli. Ndiqni lidhjen dhe provoni të ndryshoni madhësinë e dritares për të parë se çfarë ndodh:
HTML:
CSS:
Flex-container ( mbushje: 0; margjina: 0; stili i listës: asnjë; shfaqja: -webkit-box; shfaqja: -moz-box; shfaqja: -ms-flexbox; shfaqja: -webkit-flex; shfaqja: flex; -webkit-flex-flow: mbështjellja e rreshtit; justify-content: space-around; ) .flex-item ( sfondi: domate; mbushja: 5 px; gjerësia: 200 px; lartësia: 150 px; margjina e sipërme: 10 px; lartësia e vijës: 150 px; ngjyra: e bardhë; pesha e shkronjave: bold; madhësia e shkronjave: 3em; rreshtimi i tekstit: në qendër; )
Le të provojmë diçka tjetër. Le të themi se kemi një menu navigimi të rreshtuar djathtas në krye të faqes së internetit, por duam që ajo të jetë e përqendruar në ekranet e mesme dhe një kolonë në pajisjet me ekran të vogël. Gjithçka është mjaft e thjeshtë:
CSS:
/* Ekrane të mëdha */ .navigacion ( shfaqja: flex; rrjedha e përkulur: mbështjellja e rreshtit; /* Rreshtoni artikujt në fund të rreshtit në boshtin kryesor */ justify-content: flex-end; ) /* Ekranet e mesëm * / @media all dhe (max-width: 800px) ( .navigation ( /* Për ekranet me përmasa të mesme, ne vendosim elementët në qendër duke shpërndarë në mënyrë të barabartë hapësirën e lirë midis tyre */ justify-content: space-rreth; ) ) /* Ekranet më të vegjël */ @media të gjitha dhe (gjerësia maksimale: 500 px) ( .navigation ( /* Për ekranet e vogla ne nuk po përdorim drejtimin e rreshtit, por drejtimin e kolonës */ drejtimi flex: kolona; ) )
HTML:
CSS:
Navigimi ( stili i listës: asnjë; diferenca: 0; sfondi: blu e thellë; shfaqja: -webkit-box; shfaqja: -moz-box; shfaqja: -ms-flexbox; shfaqja: -webkit-flex; shfaqja: flex; -webkit -flex-flow: mbështjellja e rreshtit; justify-content: flex-end; ) .navigation a ( tekst-dekorim: asnjë; ekran: bllok; mbushje: 1em; ngjyra: e bardhë; ) .navigacion a:hover ( sfond: errët( deepskyblue, 2%); ) @media të gjitha dhe (max-width: 800px) ( .navigation ( justify-content: space-around; ) ) @media all dhe (max-width: 600px) ( .navigation ( -webkit- Flex-flow: mbështjellja e kolonës; Flex-flow: mbështjellja e kolonës; mbushja: 0; ) .navigacion a ( rreshtimi i tekstit: në qendër; mbushja: 10 px; kufiri në krye: 1px solid rgba(255,255,255,0.3); kufiri-fund: 1px solid rgba(0,0,0,0.1); ) .navigacion li:lloji i fundit a (kufiri-poshtë: asnjë; ) )
Le të përpiqemi ta bëjmë atë edhe më të mirë duke luajtur me "fleksibilitetin" e artikujve flex. Po në lidhje me një plan urbanistik me tre kolona me një kokë dhe një fund të plotë me gjerësi të plotë? Dhe me daljen e elementeve të pavarur nga rendi i dhënë nga kodi burimor:
CSS:
Mbështjellësi ( shfaqja: përkul; rrjedha e përkulur: mbështjellja e rreshtit; ) /* Vendos të gjithë elementët në 100% gjerësi */ .header, .main, .nav, .aside, .footer ( flex: 1 100%; ) /* Në për t'u fokusuar në këtë rast pajisje celulare ne mbështetemi në rendin origjinal: * 1. header * 2. navigation * 3. body * 4. sidebar * 5. footer */ /* Ekranet e mesëm */ @media all dhe (min-width: 600px) ( /* Të dyja shiritat anësor janë në të njëjtën linjë */ .aside ( flex: 1 automatik; ) ) /* Ekranet e mëdhenj */ @media all dhe (min-width: 800px) ( /* Përmbys rendin e shfaqjes së shiritit anësor dhe trupit të parë, dhe thuaj elementit kryesor të zërë maksimumi dy herë më shumë hapësirë se dy shiritat anësor */ .main ( flex: 2 0px; ) .aside-1 (rend: 1; ) .main (rend: 2; ) .aside-2 ( rendi: 3; ) .footer ( rendi: 4; ) )
HTML:
Banor pellentesk morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Enean ultricies mi vitae est. Mauris placerat eleifend leo.
CSS:
Mbështjellësi ( shfaqja: -webkit-box; ekrani: -moz-box; ekrani: -ms-flexbox; shfaqja: -webkit-flex; shfaqja: flex; -webkit-flex-flow: mbështjellja e rreshtit; flex-flow: mbështjellja e rreshtit ; pesha e shkronjave: bold; rreshtimi i tekstit: në qendër; ) .mbështjellësi > * ( mbushje: 10 px; përkulje: 1 100%; ) .header ( sfond: domate; ) .footer ( sfond: jeshile e lehtë; ) .main ( teksti -align: majtas; sfondi: blu e thellë; ) .aside-1 ( sfond: gold; ) .aside-2 ( sfond: hotpink; ) @media të gjitha dhe (min-width: 600px) ( .aside ( flex: 1 auto; ) ) @media të gjitha dhe (min-gjerësia: 800 px) ( .kryesore ( përkul: 2 0px; ) .aside-1 (rendit: 1; ) .main (renditja: 2; ) .aside-2 (renditja: 3; ) .footer ( rendi: 4; ) )
Përdorimi i prefikseve për flexbox
Flexbox kërkon që prefikset e shitësit të mbështeten nga shumica e shfletuesve. Kjo përfshin jo vetëm përdorimin e prefikseve të shitësit përpara pronave, por edhe emra krejtësisht të ndryshëm të pronave dhe vlerave.
Kjo është për shkak se specifikimi flexbox ka ndryshuar me kalimin e kohës, duke krijuar versione "të vjetra" (të vjetra), "tweener" (të ndërmjetme) dhe "të reja" (të reja).
Ndoshta mënyra më e mirë për të dalë në këtë situatë është të shkruani kodin duke përdorur sintaksën e re (dhe përfundimtare) dhe të kaloni CSS përmes një Autoprefikseri që trajton shumë mirë rikthimet.
Përndryshe, më poshtë është një metodë Sass @mixin për të ndihmuar me disa parashtesa, e cila gjithashtu ju jep një ide se çfarë veprimi duhet të ndërmerret:
SCSS:
@mixin flexbox() ( shfaqja: -webkit-box; shfaqja: -moz-box; shfaqja: -ms-flexbox; shfaqja: -webkit-flex; shfaqja: flex; ) @mixin flex($values) ( -webkit- box-flex: $values; -moz-box-flex: $values; -webkit-flex: $values; -ms-flex: $values; flex: $values; ) @mixin order($val) ( -webkit- box-ordinal-group: $val; -moz-box-ordinal-group: $val; -ms-flex-order: $val; -webkit-order: $val; rendit: $val; ) .wrapper ( @include flexbox(); ) .artikull (@include flex(1 200px); @include order(2); )
Mbështetja e shfletuesit
Ndahet sipas "versioneve" të flexbox në:
- (i ri ) do të thotë mbështetje për sintaksën më të fundit nga specifikimi (p.sh. ekrani: flex;
css flexbox (Moduli fleksibël i paraqitjes së kutisë)- Moduli fleksibël i paraqitjes së kontejnerëve - është një mënyrë e rregullimit të elementeve, bazuar në idenë e baxis.
Flexbox përbëhet nga enë fleksibël dhe artikuj fleksibël. Artikujt fleksibël mund të organizohen në një rresht ose kolonë, dhe hapësira e mbetur e lirë shpërndahet midis tyre në mënyra të ndryshme.
Moduli flexbox ju lejon të zgjidhni detyrat e mëposhtme:
- Rregulloni elementet në një nga katër drejtimet: nga e majta në të djathtë, nga e djathta në të majtë, nga lart poshtë ose nga poshtë lart.
- Ripërcaktoni rendin e shfaqjes së elementeve.
- Përmasat automatike të elementeve për t'u përshtatur brenda hapësirës së disponueshme.
- Zgjidheni problemin me qendërzim horizontal dhe vertikal.
- Mbështilleni elementet brenda një ene pa e tejmbushur atë.
- Krijoni kolona me të njëjtën lartësi.
- Krijo shtyhet në fund të faqes.
Flexbox zgjidh probleme specifike - duke krijuar paraqitje njëdimensionale, për shembull, një shirit navigimi, pasi artikujt fleksibël mund të vendosen vetëm përgjatë njërit prej akseve.
Ju mund të lexoni listën e problemeve aktuale të modulit dhe zgjidhjet e ndër-shfletuesve për to në artikullin e Philip Walton.
Çfarë është flexbox
Mbështetja e shfletuesit
IE: 11.0, 10.0 -ms-
Firefox: 28.0, 18.0 -moz-
Krom: 29.0, 21.0 -kit në internet-
safari: 6.1 -kit në internet-
opera: 12.1 -kit në internet-
iOS Safari: 7.0 -kit në internet-
Opera Mini: 8
Shfletuesi Android: 4.4, 4.1 -kit në internet-
Chrome për Android: 44
1. Konceptet bazë
Oriz. 1. Modeli flexbox
Një grup specifik termash përdoret për të përshkruar një modul Flexbox. Vlera e rrjedhës së përkuljes dhe mënyra e shkrimit përcaktojnë nëse këto terma korrespondojnë me drejtimet fizike: lart/djathtas/poshtë/majtas, boshtet: vertikale/horizontale dhe dimensionet: gjerësia/lartësia.
boshti kryesor- boshti përgjatë të cilit vendosen artikujt fleksibël. Ai shtrihet në dimensionin kryesor.
Fillimi kryesor dhe fundi kryesor- vija që përcaktojnë anët e fillimit dhe të fundit të kontejnerit flex, në lidhje me të cilat janë vendosur artikujt fleksi (duke filluar nga fillimi kryesor drejt fundit kryesor).
Madhësia kryesore (madhësia kryesore) - gjerësia ose lartësia e kontejnerit flex ose artikujve flex, në varësi se cili prej tyre është në dimensionin kryesor, përcakton madhësinë kryesore të kontejnerit flex ose artikullit flex.
Aks kryq- një bosht pingul me boshtin kryesor. Ai shtrihet në dimensionin tërthor.
Fillimi kryq dhe fundi kryq- vija që përcaktojnë anët e fillimit dhe të fundit të boshtit tërthor, në lidhje me të cilat vendosen artikujt fleksibël.
Madhësia e kryqit (madhësia e kryqit)- gjerësia ose lartësia e kontejnerit fleks ose sendeve fleksi, në varësi të asaj që është në dimensionin tërthor, është dimensioni i tyre tërthor.
Oriz. 2. Mënyra e rreshtit dhe kolonës
2. Enë Flex
Kontejneri Flex krijon një kontekst të ri formatimi fleksibël për përmbajtjen e tij. Kontejneri Flex nuk është një kontejner bllok, kështu që vetitë CSS si float , transparente , vertikal-liign nuk funksionojnë për elementët fëmijë. Gjithashtu, kontejneri flex nuk ndikohet nga vetitë kolonë-* që krijojnë kolona në tekst dhe pseudo-elementet::first-line dhe::first-letter .
Modeli i shënjimit flexbox shoqërohet me një vlerë specifike të vetive CSS të ekranit të elementit prind html që përmban blloqet fëmijë brenda. Për të kontrolluar elementët duke përdorur këtë model, duhet të vendosni vetitë e ekranit si më poshtë:
Flex-container ( /*gjeneron një kontejner flex të nivelit bllok*/ ekran: -webkit-flex; ekran: flex; ) .flex-container ( /*gjeneron një kontejner flex të nivelit të linjës*/ ekran: -webkit-inline- flex; ekran: inline-flex;)
Pas vendosjes së këtyre vlerave të vetive, çdo element fëmijë bëhet automatikisht një element flex, i rreshtuar në një rresht (përgjatë boshtit kryesor). Në këtë rast, elementët bllok dhe inline fëmijë sillen njësoj, d.m.th. gjerësia e blloqeve është e barabartë me gjerësinë e përmbajtjes së tyre, duke marrë parasysh kufijtë e brendshëm dhe kufijtë e elementit.
Oriz. 3. Përafrimi i artikujve në një model flexboxNëse blloku prind përmban tekst ose imazhe pa mbështjellje, ato bëhen artikuj fleksibël anonimë. Teksti rreshtohet në skajin e sipërm të bllokut të kontejnerit dhe lartësia e figurës bëhet e barabartë me lartësinë e bllokut, d.m.th. është deformuar.
3. Përkul artikuj
Artikujt Flex janë blloqe që përfaqësojnë përmbajtjen e një kontejneri flex në një rrjedhë. Kontejneri Flex krijon një kontekst të ri formatimi për përmbajtjen e tij, i cili ka vetitë e mëposhtme:
- Për artikujt fleksibël, vlera e tyre e vetive të shfaqur është e kyçur. vlera e shfaqjes: inline-block; dhe shfaq: tabela-qelizë; llogaritur në ekran: bllok; .
- Hapësira e bardhë midis elementeve zhduket: ajo nuk bëhet elementi i vet fleksibël, edhe nëse teksti ndër-element është i mbështjellë me një artikull fleksibël anonim. Përmbajtja e një artikulli flex anonim nuk mund të stilohet vetvetiu, por ai do të trashëgojë stile (të tilla si cilësimet e shkronjave) nga kontejneri flex.
- Një artikull fleksibël i pozicionuar absolutisht nuk merr pjesë në paraqitjen flex.
- Kufijtë e artikujve fleksibël fqinjë nuk shemben.
- Përqindjet e marzhit dhe mbushjes llogariten nga madhësia e brendshme e bllokut që përmban.
- diferencë: auto; zgjerohet, duke thithur hapësirë shtesë në dimensionin përkatës. Ato mund të përdoren për të lidhur ose zgjeruar artikujt e përkulur ngjitur.
- Madhësia minimale automatike e paracaktuar e artikujve fleksibël është madhësia minimale e përmbajtjes së tyre, d.m.th. Min-width: auto; . Për kontejnerët e lëvizshëm, madhësia minimale automatike është zakonisht zero.
4. Afishoni Renditjen e Artikujve Flex dhe Orientimin
Përmbajtja e një kontejneri fleksibël mund të vendoset në çdo drejtim dhe në çdo mënyrë (rirenditja e artikujve fleksibël brenda një kontejneri ndikon vetëm në paraqitjen vizuale).
4.1. Drejtimi i boshtit kryesor: drejtimi përkul
Prona i referohet kontejnerit flex. Kontrollon drejtimin e boshtit kryesor përgjatë të cilit vendosen artikujt e përkulur, sipas mënyrës aktuale të shkrimit. E pa trashëguar.
drejtimi i përkuljes | |
---|---|
Vlerat: | |
rresht | Vlera e parazgjedhur, nga e majta në të djathtë (në rtl, nga e djathta në të majtë). Artikujt fleksibël vendosen në një rresht. Fillimi (fillimi kryesor) dhe fundi (kryesor-fundi) i drejtimit të boshtit kryesor korrespondojnë me fillimin (inline-start) dhe fundin (inline-fund) të boshtit inline (boshti inline). |
rreshti i kundërt | Drejtimi është nga e djathta në të majtë (në rtl nga e majta në të djathtë). Artikujt fleksibël vendosen në një rresht në lidhje me skajin e djathtë të enës (në rtl, skaji i majtë). |
kolonë | Drejtimi nga lart poshtë. Artikujt fleksibël vendosen në një kolonë. |
kolona e kundërt | Kolona me elementë në rend të kundërt, nga poshtë lart. |
fillestare | |
trashëgojnë |
Oriz. 4. Vetia flex-direction për gjuhët nga e majta në të djathtë
Sintaksë
Flex-container (ekrani: -webkit-flex; -webkit-flex-direction: row-back; display: flex; flex-direction: row-reverse; )
4.2. Kontroll me shumë linja të kontejnerit Flex: mbështjellje me përkulje
Vetia përcakton nëse kontejneri flex do të jetë me një linjë ose me shumë rreshta, dhe gjithashtu cakton drejtimin e boshtit kryq, i cili përcakton drejtimin e vendosjes së linjave të reja të kontejnerit fleks.
Si parazgjedhje, artikujt fleksibël përshtaten në një rresht, përgjatë boshtit kryesor. Kur tejmbushen, ato do të tejmbushin kutinë kufizuese të enës flex. Prona nuk është e trashëguar.
Oriz. 5. Menaxhimi i shumë linjës me veçorinë flex-wrap për gjuhët LTR
Sintaksë
Flex-container ( ekran: -webkit-flex; -webkit-flex-wrap: wrap; display: flex; flex-wrap: wrap; )
4.3. Shkurtorja për drejtimin dhe shumëvijën: rrjedhje e përkulur
Prona ju lejon të përcaktoni drejtimet e akseve kryesore dhe tërthore, si dhe aftësinë për të transferuar artikujt fleksibël, nëse është e nevojshme, në disa rreshta. Është stenografi për vetitë e drejtimit të përkuljes dhe të përkuljes. Flex-flow i parazgjedhur: row nowrap; . prona nuk është e trashëguar.
Sintaksë
Flex-container (ekrani: -webkit-flex; -webkit-flex-flow: mbështjellja e rreshtit; shfaqja: flex; flex-flow: mbështjellja e rreshtit; )
4.4. Shfaqja e renditjes së artikujve fleksibël: rendit
Vetia përcakton rendin në të cilin artikujt flex shfaqen dhe vendosen brenda kontejnerit flex. Zbatohet për artikujt flex. Prona nuk është e trashëguar.
Fillimisht, të gjithë artikujt flex kanë renditje: 0; . Kur specifikoni një vlerë nga -1 për një element, ai kalon në fillim të vijës kohore, një vlerë prej 1 lëviz deri në fund. Nëse disa artikuj fleksibël kanë të njëjtën vlerë porosie, ato do të shfaqen në rendin e tyre origjinal.
Sintaksë
Flex-container ( shfaqja: -webkit-flex; shfaqja: flex; )
Oriz. 6. Shfaqni Renditjen e Artikujve Flex
5. Fleksibiliteti i artikujve fleksibël
Një aspekt përcaktues i paraqitjes flex është aftësia për të "përkulur" artikujt e përkulur duke ndryshuar gjerësinë/lartësinë e tyre (në varësi të madhësisë në boshtin kryesor) për të mbushur hapësirën e disponueshme në dimensionin kryesor. Kjo bëhet me vetinë flex. Një enë përkulëse shpërndan hapësirën e lirë midis fëmijëve të saj (në proporcion me raportin e tyre të rritjes së përkuljes) për të mbushur kontejnerin, ose i zvogëlon ato (në proporcion me raportin e tyre të përkuljes) për të parandaluar tejmbushjen.
Një artikull fleksibël do të jetë plotësisht "jo fleksibël" nëse vlerat e tij të rritjes së përkuljes dhe tkurrjes janë zero, dhe "fleksibël" përndryshe.
5.1. Përcaktimi i madhësive fleksibël me një veti: flex
Prona është stenografi për vetitë flex-grow , flex-shrink dhe flex-basic. Vlera e parazgjedhur: flex: 0 1 auto; . Ju mund të specifikoni njërën ose të tre vlerat e vetive. Prona nuk është e trashëguar.
Sintaksë
Flex-container ( ekran: -webkit-flex; ekran: flex; ) .flex-item ( -webkit-flex: 3 1 100px; -ms-flex: 3 1 100px; flex: 3 1 100px; )
5.2. Faktori i rritjes: flex-grow
Vetia përcakton shkallën e rritjes së një artikulli flex në krahasim me artikujt e tjerë flex në kontejnerin flex kur cakton hapësirë të lirë pozitive. Nëse shuma e vlerave flex-grow të artikujve flex në një rresht është më pak se 1, ato zënë më pak se 100% të hapësirës së lirë. Prona nuk është e trashëguar.
Oriz. 7. Menaxhimi i hapësirës së lirë në shiritin e navigimit me flex-growSintaksë
Flex-container ( ekran: -webkit-flex; ekran: flex; ) .flex-item ( -webkit-flex-grow: 3; flex-grow: 3; )
5.3. Raporti i tkurrjes: përkul-tkurrje
Vetia specifikon raportin e tkurrjes së një artikulli fleksibël në raport me artikujt e tjerë fleksibël kur shpërndahet hapësira negative e bardhë. Shumëzuar me madhësinë e bazës flex. Hapësira negative shpërndahet në proporcion me sa mund të tkurret elementi, kështu që për shembull një artikull i vogël fleksibël nuk do të tkurret në zero derisa një artikull më i madh fleksibël të tkurret dukshëm. Prona nuk është e trashëguar.
Oriz. 8. Ngushtimi i artikujve fleksibël në një rresht
Sintaksë
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-flex-shrink: 3; flex-shrink: 3; )
5.4. Madhësia e bazës: flex-bazë
Vetia cakton madhësinë bazë fillestare të artikullit flex përpara se hapësira e lirë të ndahet sipas faktorëve të përkuljes. Për të gjitha vlerat, përveç auto dhe përmbajtjes, madhësia bazë fleksibël përcaktohet në të njëjtën mënyrë si gjerësia në mënyrat e regjistrimit horizontal. Vlerat e përqindjes janë në lidhje me madhësinë e kontejnerit flex, dhe nëse nuk jepet madhësi, vlera e përdorur për flex-bazë është madhësia e përmbajtjes së saj. E pa trashëguar.
Sintaksë
Flex-container ( ekran: -webkit-flex; ekran: flex; ) .flex-item ( -webkit-flex-basis: 100px; flex-basis: 100px; )
6. Nivelimi
6.1. Rreshtimi i boshtit kryesor: justifiko-përmbajtje
Vetia rreshton artikujt e përkulur përgjatë boshtit kryesor të kontejnerit flex, duke shpërndarë hapësirën e lirë të papushtuar nga artikujt fleksibël. Kur një element konvertohet në një kontejner flex, artikujt flex grupohen së bashku si parazgjedhje (përveç nëse kanë kufij të caktuar). Boshllëqet shtohen pasi të llogariten vlerat e marzhit dhe të rritjes së përkuljes. Nëse ndonjë element ka përkulje ose marzh jo zero: auto; , prona nuk do te kete efekt. Prona nuk është e trashëguar.
Vlerat: | |
fillimi i përkulur | Vlera e paracaktuar. Artikujt Flex vendosen në drejtim nga vija e fillimit të enës flex. |
fundi përkul | Artikujt Flex vendosen në drejtim nga vija fundore e enës flex. |
qendër | Artikujt e përkulur janë rreshtuar në qendër të kontejnerit të përkulur. |
hapësirë ndërmjet | Artikujt Flex shpërndahen në mënyrë të barabartë përgjatë linjës. Artikulli i parë fleksibël vendoset në të njëjtin nivel me skajin e vijës së fillimit, artikulli i fundit fleksibël me skajin e vijës fundore dhe pjesa tjetër e artikujve fleksibël në linjë vendoset në një distancë në mënyrë që distanca midis çdo dy artikujsh ngjitur të jetë e njëjta. Nëse hapësira e lirë e mbetur është negative ose ka vetëm një artikull përkulje për rresht, kjo vlerë është identike me cilësimin e fillimit të përkuljes. |
hapësirë përreth | Artikujt fleksibël në linjë shpërndahen në mënyrë që distanca midis çdo dy artikujsh fleksibël ngjitur të jetë e njëjtë dhe distanca midis artikujve fleksibël të parë/të fundit dhe skajeve të kontejnerit fleksi është gjysma e distancës midis artikujve fleksibël. |
fillestare | Vendos vlerën e një prone në vlerën e saj të paracaktuar. |
trashëgojnë | Trashëgon vlerën e vetive nga elementi mëmë. |
Oriz. 9. Përafrimi i elementeve dhe ndarja e hapësirës së lirë me vetinë justify-content
Sintaksë
Flex-container ( shfaqja: -webkit-flex; -webkit-justify-content: flex-start; display: flex; justify-content: flex-start; )
6.2. Shtrirja e boshteve tërthore: rreshtoni artikujt dhe rreshtoni vetë
Artikujt e përkulur mund të rreshtohen përgjatë boshtit tërthor të linjës aktuale të kontejnerit të përkulur. align-items vendos shtrirjen për të gjithë artikujt në një kontejner flex, duke përfshirë artikujt anonimë flex. align-self ju lejon të anashkaloni këtë shtrirje për artikujt individualë të përkulur. Nëse ndonjë nga margjinat anësore të elementit fleksibël është caktuar në automatik, vetë-lidhja nuk ka efekt.
6.2.1. Rreshtoni artikujt
Vetia rreshton artikujt e përkulur, duke përfshirë artikujt e përkulur anonimë, përgjatë boshtit tërthor. E pa trashëguar.
Vlerat: | |
fillimi i përkulur | |
fundi përkul | |
qendër | |
bazë | Vijat bazë të të gjithë artikujve fleksibël të përfshirë në shtrirje janë të njëjta. |
shtrirje | |
fillestare | Vendos vlerën e një prone në vlerën e saj të paracaktuar. |
trashëgojnë | Trashëgon vlerën e vetive nga elementi mëmë. |
Sintaksë
Flex-container ( shfaqja: -webkit-flex; -webkit-align-item: flex-start; display: flex; align-item: flex-start; )
6.2.2. Align-vetë
Vetia është përgjegjëse për përafrimin e një elementi të vetëm përkulës në lartësinë e kontejnerit të përkulur. Anulon shtrirjen e specifikuar nga align-items . E pa trashëguar.
Vlerat: | |
auto | Vlera e paracaktuar. Artikulli flex përdor shtrirjen e specifikuar në veçorinë align-item të kontejnerit flex. |
fillimi i përkulur | Skaji i sipërm i elementit flex vendoset në të njëjtën linjë me vijën e përkuljes (ose në një distancë, duke pasur parasysh kufijtë dhe kufijtë e specifikuar të elementit) që kalon përmes fillimit të boshtit kryq. |
fundi përkul | Skaji i poshtëm i elementit të përkuljes vendoset në të njëjtën linjë me vijën e përkuljes (ose në një distancë, duke pasur parasysh kufijtë dhe kufijtë e specifikuar të elementit) që kalon nga fundi i boshtit kryq. |
qendër | Kufiri i një artikulli të përkulur përqendrohet përgjatë boshtit tërthor brenda vijës së përkuljes. |
bazë | Artikulli flex përafrohet me vijën bazë. |
shtrirje | Nëse gjerësia e një elementi flex vlerësohet në automatik dhe asnjë nga vlerat e marzhit të gjerësisë nuk është e barabartë me auto, elementi shtrihet. Vlera e paracaktuar. |
fillestare | Vendos vlerën e një prone në vlerën e saj të paracaktuar. |
trashëgojnë | Trashëgon vlerën e vetive nga elementi mëmë. |
Oriz. 11. Përafrimi i artikujve Individual Flex
Sintaksë
Flex-container ( display: -webkit-flex; display: flex; ) .flex-item ( -webkit-align-self: në qendër; align-self: në qendër; )
6.3. Shtrirja e linjës së një kontejneri flex: përafrim-përmbajtje
Vetia rreshton linjat në kontejnerin flex kur ka hapësirë shtesë në boshtin kryq, ngjashëm me përafrimin e artikujve individualë në boshtin kryesor me veçorinë justify-content. Prona nuk ndikon në një kontejner flex të vetëm. E pa trashëguar.
Vlerat: | |
fillimi i përkulur | Linjat grumbullohen drejt fillimit të enës flex. Skaji i rreshtit të parë vendoset afër skajit të enës flex, çdo rresht pasues vendoset afër vijës së mëparshme. |
fundi përkul | Linjat grumbullohen drejt fundit të enës flex. Skaji i rreshtit të fundit vendoset afër skajit të enës flex, çdo rresht i mëparshëm vendoset afër vijës tjetër. |
qendër | Rreshtat janë grumbulluar drejt qendrës së enës flex. Rreshtat janë pranë njëri-tjetrit dhe të përqendruara në kontejnerin flex me hapësirë të barabartë midis skajit fillestar të përmbajtjes së kontejnerit fleks dhe rreshtit të parë dhe midis skajit fundor të përmbajtjes së kontejnerit fleks dhe rreshtit të fundit. |
hapësirë ndërmjet | Rreshtat shpërndahen në mënyrë të barabartë në një enë përkulëse. Nëse hapësira e lirë e mbetur është negative, ose nëse ka vetëm një linjë fleksibile në kontejnerin flex, kjo vlerë është identike me flex-start . Përndryshe, buza e rreshtit të parë vendoset afër skajit fillestar të përmbajtjes së enës fleks, buza e rreshtit të fundit vendoset afër skajit fundor të përmbajtjes së enës fleks. Rreshtat e mbetur shpërndahen në mënyrë që distanca midis dy rreshtave ngjitur të jetë e njëjtë. |
hapësirë përreth | Linjat janë të ndara në mënyrë të barabartë në enën flex me gjysmë hapësirë në të dy skajet. Nëse hapësira e lirë e mbetur është negative, kjo vlerë është identike me qendrën . Përndryshe, linjat shpërndahen në atë mënyrë që distanca midis çdo dy linjash ngjitur të jetë e njëjtë, dhe distanca midis rreshtave të parë / të fundit dhe skajeve të përmbajtjes së kontejnerit fleks është gjysma e distancës midis linjave. |
shtrirje | Vlera e paracaktuar. Rreshtat e artikujve fleksibël shtrihen në mënyrë të barabartë për të mbushur të gjithë hapësirën e disponueshme. Nëse hapësira e lirë e mbetur është negative, kjo vlerë është identike me flex-start . Përndryshe, hapësira e lirë do të ndahet në mënyrë të barabartë midis të gjitha linjave, duke rritur madhësinë e tyre tërthore. |
fillestare | Vendos vlerën e një prone në vlerën e saj të paracaktuar. |
trashëgojnë | Trashëgon vlerën e vetive nga elementi mëmë. |
Sintaksë
Flex-container ( ekran: -webkit-flex; -webkit-flex-flow: mbështjellja e rreshtit; -webkit-align-content: flex-end; ekrani: flex; flex-flow: mbështjellja e rreshtit; align-content: flex-end ; lartësia: 100 px;)