Ndarja e përmbajtjes është në qendër. Shtrirja në qendër në CSS. Përafrimi në qendër i një elementi vargu ose vargu-*


Nga autori: Ju mirëpres përsëri në faqet e blogut tonë. Në artikullin e sotëm do të doja të flisja për teknika të ndryshme të shtrirjes që mund të aplikohen si për blloqet ashtu edhe për përmbajtjen e tyre. Në veçanti, si të rreshtoni blloqet në css, si dhe shtrirjen e tekstit.

Përafrimi i blloqeve në qendër

Në CSS, përqendrimi i një blloku është i lehtë. Kjo është teknika më e njohur për shumë njerëz, por unë do të doja të flisja për të tani, para së gjithash. Kjo do të thotë shtrirje e përqendruar horizontalisht në lidhje me elementin prind. Si bëhet? Le të themi se kemi një enë dhe lënda jonë eksperimentale është në të:

< div id = "wrapper" >

< div id = "header" > < / div >

< / div >

Le të supozojmë se ky është titulli i faqes. Nuk shtrihet në të gjithë gjerësinë e dritares dhe ne duhet ta përqendrojmë atë. Ne shkruajmë kështu:

#header(

gjerësia / gjerësia maksimale : 800 px ;

marzhi: 0 auto;

Duhet të specifikojmë gjerësinë e saktë ose maksimale, dhe më pas të shkruajmë veçorinë kryesore - marzhi: 0 auto. Ajo vendos kufijtë e jashtëm të kokës sonë, vlera e parë përcakton kufijtë e sipërm dhe të poshtëm, dhe e dyta përcakton kufijtë e djathtë dhe të majtë. Vlera auto i tregon shfletuesit që të llogarisë automatikisht mbushjen në të dyja anët, në mënyrë që elementi të jetë saktësisht i përqendruar në prind. Të rehatshme!

Rreshtimi i tekstit

Kjo është gjithashtu një teknikë shumë e thjeshtë. Për të rreshtuar të gjithë elementët e linjës, mund të përdorni veçorinë e rreshtimit të tekstit dhe vlerat e saj: majtas, djathtas, qendër. Ky i fundit përqendron tekstin, gjë që na nevojitet. Ju madje mund të rreshtoni një fotografi në të njëjtën mënyrë, sepse ajo është gjithashtu një element inline si parazgjedhje.

Rreshtoni tekstin vertikalisht

Por kjo është më e ndërlikuar. Si parazgjedhje, nuk ka asnjë veçori të thjeshtë e të njohur që e përqendron lehtësisht tekstin vertikalisht në një enë blloku. Megjithatë, ka disa teknika që dizajnerët e paraqitjes kanë dalë me gjatë viteve.

Vendosni lartësinë e bllokut duke përdorur mbushjen. Mënyra nuk është të vendosni një lartësi të qartë duke përdorur lartësinë, por ta krijoni atë artificialisht duke përdorur mbushje në krye dhe në fund, të cilat duhet të jenë të njëjta. Le të krijojmë çdo bllok dhe t'i shkruajmë vetitë e mëposhtme:

div( sfond: #ccc; mbushje: 30px 0; )

div(

sfond : #ccc;

mbushje: 30px 0;

Sfondi është vetëm për të treguar vizualisht skajet, si dhe mbushjen. Tani lartësia e bllokut përbëhet nga këto dy dhëmbëza dhe vetë vija, dhe gjithçka duket kështu:

Përcaktoni lartësinë e vijës për bllokun. Unë mendoj se kjo është një mënyrë më e saktë nëse keni nevojë të rreshtoni një rresht teksti. Me të, ju mund të regjistroni lartësinë si normale duke përdorur veçorinë lartësi. Pas kësaj, ai gjithashtu duhet të vendosë lartësinë e linjës, të njëjtë me lartësinë e bllokut në tërësi.

div (lartësia: 60 px; lartësia e vijës: 60 px; )

div(

lartësia: 60 px;

lartësia e vijës: 60 px;

Rezultati do të jetë i ngjashëm me foton e mësipërme. Gjithçka do të funksionojë edhe nëse shtoni mbushje. Megjithatë, vetëm për një rresht. Nëse keni nevojë për më shumë tekst në element, atëherë kjo metodë nuk do të funksionojë.

Konvertoni një bllok në një qelizë tabele. Thelbi i kësaj metode është se qeliza e tabelës ka veçorinë vertikale-align: mesme, e cila e përqendron elementin vertikalisht. Prandaj, në këtë rast blloku duhet të vendoset në sa vijon:

div (ekrani: qeliza e tabelës; rreshtimi vertikal: në mes; )

div(

shfaqja: tabela - qelizë;

vertikale - rresht: në mes;

Kjo metodë është e mirë sepse mund të rreshtoni sa më shumë tekst që dëshironi në qendër. Por është më mirë të shkruani tabelën display: në bllokun në të cilin është vendosur div-ja jonë, përndryshe mund të mos funksionojë.

Epo, këtu kemi ardhur te teknika e fundit për sot - kjo është shtrirja vertikale e vetë blloqeve. Duhet thënë se, përsëri, nuk ka asnjë pronë që do të synohej posaçërisht për këtë, por ka disa truke që duhet t'i dini.

Vendosni dhëmbëzimet si përqindje. Nëse e dini lartësinë e një elementi prind dhe vendosni një element tjetër bllok brenda tij, mund ta përqendroni atë duke përdorur mbushjen e përqindjes. Për shembull, prindi ka një lartësi prej 600 pikselësh. Ju vendosni një bllok në të që është 300 piksel i lartë. Sa ju duhet të tërhiqeni në krye dhe në fund për ta përqendruar atë? 150 piksel secila, që është 25% e gjatësisë së prindit.

Kjo metodë lejon përafrimin vetëm kur dimensionet lejojnë llogaritjet. Dhe nëse prindi juaj është 887 piksele në lartësi, atëherë nuk do të jeni në gjendje të regjistroni asgjë me saktësi, kjo tashmë është e qartë.

Futni një element në një qelizë tabele. Përsëri, nëse e transformojmë elementin prind në një qelizë tabele, atëherë blloku i futur në të do të përqendrohet automatikisht vertikalisht. Për ta bërë këtë, prindi duhet vetëm të vendosë vertikal-align: mes.

Dhe nëse, përveç kësaj, shkruajmë edhe marzhin: 0 auto, atëherë elementi do të përqendrohet horizontalisht!

Përqendrimi i elementeve në CSS është një nga arsyet më të njohura për t'u ankuar për CSS. " Pse është gjithçka kaq e vështirë?" - ata janë të indinjuar. Më duket se problemi nuk është se është e vështirë për t'u bërë, por se ka shumë mënyra për të rreshtuar elementët në qendër dhe mund të jetë mjaft e vështirë të zgjedhësh atë të duhurin.

Le të rregullojmë të gjitha zgjidhjet e mundshme në një diagram pemë dhe shpresojmë se kjo do ta bëjë detyrën tonë më të lehtë.

Kështu që më duhet të përqendroj elementin...

Rreshtimi horizontal

Përqendrimi i elementeve në linjë brenda një elementi prind të nivelit të bllokut është mjaft i thjeshtë:

Fëmijët në qendër (lidhja e tekstit: në qendër; )

Kjo do të funksionojë për inline, inline-block, inline-table, inline-flex, etj.

Ju mund të përqendroni një element blloku duke vendosur vetitë margin-majtas dhe margin-djathtas në auto (ai duhet gjithashtu të ketë një grup të gjerësi, përndryshe elementi thjesht do të marrë të gjithë gjerësinë e përmbajtjes dhe nuk do të ketë nevojë për rreshtim) . Më shpesh kjo bëhet duke përdorur një veçori stenografike, si kjo:

Qendra-me (diferencë: 0 automatik; )

Kjo do të funksionojë pavarësisht nga gjerësia e vendosur në elementin e bllokut ose në prindin e tij.

Vini re se nuk do të jeni në gjendje të mbështillni një element të linjës qendrore në këtë mënyrë. Megjithatë, ka edhe një truk për këtë.

Shtrirja në qendër e elementeve të shumta të bllokut

Nëse ka dy ose më shumë elementë blloku që duhet t'i rreshtoni horizontalisht dhe në qendër brenda së njëjtës linjë, atëherë mund të jetë më mirë të ndryshoni llojin e tyre të ekranit. Më poshtë është një shembull i ndryshimit të llojit të ekranit të tyre në bllokun inline dhe një shembull me Flexbox:

Nëse këto blloqe të shumta janë në linja të ndryshme, atëherë teknika e futjes automatike është ende e shkëlqyer:

Rreshtimi vertikal

Rreshtimi i qendrës vertikale në CSS është pak më i ndërlikuar.

Përafrimi në qendër i një elementi vargu ose vargu-*

Përafrimi i një elementi me një vijë

Ndonjëherë elementët e vargut/tekstit mund të përqendrohen thjesht sepse kanë të njëjtën vlerë për vetitë padding-top dhe padding-bottom.

Lidhja (mbushje-lart: 30px; mbushje-fund: 30px; )

Nëse për ndonjë arsye mbushja nuk është një opsion për ju, dhe po përpiqeni të përqendroni një tekst dhe e dini me siguri se ai nuk do të mbështillet me diçka tjetër, atëherë ekziston një mashtrim i vogël, thelbi i të cilit është të vendosni vetia line-height e barabartë me vlerën e lartësisë së elementit.

Truke me tekst në qendër (lartësia: 100 px; lartësia e rreshtit: 100 px; hapësira e bardhë: tanirap; )

Përafrimi i një elementi me shumë vija

Mbushja e barabartë në krye dhe në fund mund të krijojë një efekt të përqendruar edhe për elementët me shumë rreshta, por nëse kjo nuk funksionon, është e mundur që elementi që përmban tekstin të jetë një qelizë tabele ose të jetë caktuar në mënyrë eksplicite që të sillet në këtë mënyrë mënyrë duke përdorur CSS. Në këtë rast, vetia vertikale-linjë e trajton këtë, në krahasim me mënyrën se si trajton zakonisht shtrirjen e elementeve brenda një linje.

Nëse është diçka si një tabelë, ndoshta mund të përdorni Flexbox? Një element i vetëm Flex mund të përqendrohet lehtësisht brenda një kontejneri Flex.

Përkulni në qendër-vertikalisht (ekrani: përkul; justifikoni-përmbajtjen: qendër; drejtimi i përkuljes: kolona; lartësia: 400 px; )

Mos harroni se kjo është në të vërtetë e rëndësishme kur kontejneri ka një lartësi fikse (px, %, etj.), prandaj kontejneri ka një lartësi të caktuar këtu.

Nëse të dyja teknikat e mësipërme nuk mund të zbatohen, mund të përdorni teknikën "element fantazmë", në të cilën një pseudoelement me lartësi 100% vendoset brenda kontejnerit dhe rreshtohet vertikalisht në qendër të tij.

Ghost-center (pozicioni: relative; ) .ghost-center::fore (përmbajtja: " "; ekrani: inline-block; lartësia: 100%; gjerësia: 1%; vertikal-linja: në mes; ) .ghost-centre p (ekrani: blloku i brendshëm; rreshtimi vertikal: në mes; )

Rreshtoni në qendër të një elementi blloku

Lidhni një element me një lartësi të njohur

Shumë shpesh nuk mund ta dimë lartësinë, për shumë arsye: nëse gjerësia ndryshon, teksti mund të formatohet dhe të ndryshojë lartësinë. Stilet e ndryshme të tekstit mund të ndryshojnë lartësinë. Madhësia e ndryshme e shkronjave mund të ndryshojë lartësinë. Elementet me një raport fiks të pamjes, të tilla si imazhet, mund të ndryshojnë lartësinë kur ndryshojnë madhësinë e tyre, etj.

Por nëse e dini lartësinë e elementit, mund të përqendroni në qendër si kjo:

Prindi ( pozicioni: i afërm; ) .fëmijë ( pozicioni: absolut; sipër: 50%; lartësia: 100 px; margjina e sipërme: -50 px; /* llogari për mbushjen dhe kufirin nëse nuk përdor madhësinë e kutisë: kutinë kufitare; */ )

Përafrimi i një elementi me një lartësi të panjohur

Edhe nëse nuk e dini lartësinë e një elementi, mund ta shtyni atë në 50% të lartësisë së prindit të tij dhe më pas ta ngrini në 50% të lartësisë së tij:

Prindi ( pozicioni: i afërm; ) .fëmija ( pozicioni: absolut; lart: 50%; transformimi: përktheY(-50%); )

Pak surprizë, kjo mund të bëhet shumë lehtë duke përdorur Flexbox.

Prindi (ekrani: përkul; drejtimi i përkulur: kolona; justifikoni përmbajtjen: qendër; )

Shtrirja horizontale dhe vertikale

Ju mund të kombinoni teknikat e paraqitura më sipër për të arritur elementë të përqendruar në mënyrë perfekte. Por zakonisht ato mund të ndahen në 4 grupe:

Përafrimi i një elementi me një gjerësi dhe lartësi të caktuar

Përdorimi i maringut negativ të barabartë me gjysmën e kësaj gjerësie dhe lartësie pas pozicionimit absolut të elementit prej 50%/50% do të përqendrojë elementin. Kjo metodë ka mbështetje mjaft të mirë të ndër-shfletuesve:

Prindi ( pozicioni: i afërm; ) .fëmija ( gjerësia: 300 px; lartësia: 100 px; mbushja: 20 px; pozicioni: absolute; lart: 50%; majtas: 50%; diferenca: -70 px 0 0 -170 px; )

Përafrimi i një elementi me gjerësi dhe lartësi të panjohur

Nëse nuk e dini gjerësinë ose lartësinë e elementit, mund të përdorni vetinë e transformimit dhe një përkthim negativ prej 50% në të dy drejtimet (në varësi të gjerësisë/lartësisë aktuale të elementit) në qendër:

Prindi ( pozicioni: i afërm; ) .fëmija ( pozicioni: absolut; lart: 50%; majtas: 50%; transformimi: përkthe (-50%, -50%); )

Përafrimi i një elementi duke përdorur Flexbox

Për të vendosur në qendër një element duke përdorur Flexbox, duhet të përdorni dy veti përqendrimi:

Prindi (ekrani: përkul; justifiko-përmbajtje: në qendër; rreshtoj artikujt: në qendër; )

Përafrimi i një elementi duke përdorur rrjetin CSS

Ky është vetëm një mashtrim i vogël (postuar nga Lance Janssen) që do të funksionojë kryesisht për një element të vetëm:

Trupi, html (lartësia: 100%; ekrani: rrjetë; ) shtrirja ( /* gjëja në qendër */ margjina: automatik; )

konkluzioni

Tani mund të përqendroni çdo gjë në CSS.

Mirëdita, abonentë dhe lexues të këtij botimi. Sot dua të hyj në detaje dhe t'ju tregoj se si ta përqendroni tekstin në CSS. Në disa artikuj të mëparshëm, në mënyrë indirekte kam prekur këtë temë, kështu që ju keni disa njohuri në këtë fushë.

Sidoqoftë, në këtë botim do t'ju tregoj për të gjitha mënyrat e ndryshme për të rreshtuar objektet, dhe gjithashtu do t'ju shpjegoj se si të futni dhe vizatoni paragrafët. Pra, le të fillojmë të mësojmë materialin!

HTML dhe pasardhësit e tij
dhe rreshtoni

Kjo metodë pothuajse nuk përdoret kurrë, pasi është zëvendësuar nga mjetet e fletëve të stilit kaskadë. Megjithatë, të dish se ekziston një etiketë e tillë nuk do t'ju dëmtojë.

Sa i përket vërtetimit (ky term përshkruhet në detaje në artikullin ""), vetë specifikimi html dënon përdorimin < qendër>, pasi që për vlefshmëri është e nevojshme të përdoret një kalimtar DOCTYPE>.

Ky llojlejon kalimin e elementeve të ndaluar.

QENDRA

Tani le të kalojmë te atributi rreshtoj. Vendos shtrirjen horizontale të objekteve dhe përshtatet pas deklarimit të etiketës. Në mënyrë tipike, mund të përdoret për të lidhur përmbajtjen në të majtë ( majtas), përgjatë skajit të djathtë ( drejtë), në qendër ( qendër) dhe sipas gjerësisë së tekstit ( justifikoj).

Më poshtë do të jap një shembull në të cilin do të vendos foton dhe paragrafin në qendër.

rreshtoj

Kjo përmbajtje do të jetë në qendër.

Ju lutemi vini re se për imazhin atributi që po analizojmë ka kuptime paksa të ndryshme.

Në shembullin që përdora rresht = "mes". Falë kësaj, imazhi u rreshtua në mënyrë që fjalia të vendosej qartë në mes të figurës.

Mjetet e përqendrimit në css

Karakteristikat CSS të krijuara për të lidhur blloqet, tekstin dhe përmbajtjen grafike përdoren shumë më shpesh. Kjo është kryesisht për shkak të komoditetit dhe fleksibilitetit të stileve të zbatimit.

Pra, le të fillojmë me vetinë e parë të përqendrimit të tekstit - kjo është tekst-rreshtoj.

Funksionon në të njëjtën mënyrë si align in. Ndër fjalë kyçe, ju mund të zgjidhni një nga lista e përgjithshme ose të trashëgoni karakteristikat e një paraardhësi ( trashëgojnë).

Dua të vërej se në css3 mund të vendosni 2 parametra të tjerë: filloni– në varësi të rregullave të shkrimit të tekstit (nga e djathta në të majtë ose anasjelltas), vendos shtrirjen majtas ose djathtas (ngjashëm me veprën majtas ose djathtas) dhe fund– e kundërta e fillimit (kur shkruani tekst nga e majta në të djathtë vepron si djathtas, kur shkruani nga e djathta në të majtë – majtas).

rreshtimi i tekstit

Fjalia në të djathtë

Fjalia duke përdorur fundin

Unë do t'ju tregoj për një mashtrim të vogël. Kur zgjidhni një vlerë justifikoj vija e fundit mund të varet në mënyrë jo tërheqëse nga fundi. Për ta vendosur, për shembull, në qendër, mund ta përdorni pronën teksti-rrafshoj-i fundit.

Për të lidhur përmbajtjen e sajtit ose qelizat e tabelës vertikalisht, përdorni veçorinë vertikal-rreshtoj. Më poshtë kam përshkruar fjalët kyçe kryesore të elementit.

Fjalë kyçe Qëllimi
bazë Përcakton shtrirjen në një linjë paraardhëse, e quajtur vija bazë. Nëse objekti paraardhës nuk ka një vijë të tillë, atëherë shtrirja ndodh përgjatë kufirit të poshtëm.
e mesme Mesi i objektit të mutuar është rreshtuar me vijën bazë, së cilës i shtohet dyshemeja e lartësisë së elementit mëmë.
fund Pjesa e poshtme e përmbajtjes së zgjedhur përshtatet në fund të objektit poshtë saj.
krye Ngjashëm me pjesën e poshtme, por me pjesën e sipërme të objektit.
super Bën mbishkrimin e personazhit.
nën E bën elementin të nënshkruhet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 vertikal-rreshtoj
C E TRRETHTE

vertikal-rreshtoj

C E TRRETHTE

dhëmbëzimet

Dhe së fundi vijmë te pikat e paragrafit. Gjuha CSS përdor një pronë të veçantë të quajtur tekst-indent.

Me ndihmën e tij mund të bëni si një vijë të kuqe ashtu edhe një zgjatje (duhet të specifikoni një vlerë negative).

tekst-indent

Për të krijuar një vijë të kuqe duhet të dini vetëm një parametër.

Kjo është vetia e thjeshtë e tekstit-indent.

Unë mendoj se shumë prej jush që ju është dashur të merren me paraqitjen, keni hasur nevojën për të rreshtuar elementët vertikalisht dhe i dini vështirësitë që lindin kur vendosni një element në qendër.

Po, ekziston një veçori e veçantë me shumë vlera të rreshtimit vertikal në CSS për shtrirjen vertikale. Sidoqoftë, në praktikë nuk funksionon aspak siç pritej. Le të përpiqemi ta kuptojmë këtë.


Le të krahasojmë qasjet e mëposhtme. Përafrimi me:

  • tavolina,
  • dhëmbëzimi,
  • vija e gjatesise
  • shtrirje,
  • marzhi negativ,
  • transformoj
  • pseudo element
  • flexbox.
Për ta ilustruar, merrni parasysh shembullin e mëposhtëm.

Ka dy elemente div, me njërin prej tyre të folezuar brenda tjetrit. Le t'u japim atyre klasat përkatëse - të jashtme dhe të brendshme.


Sfida është të rreshtoni elementin e brendshëm me qendrën e elementit të jashtëm.

Së pari, le të shqyrtojmë rastin kur dimensionet e blloqeve të jashtme dhe të brendshme i njohur. Le të shtojmë shfaqjen e rregullave: blloku inline në elementin e brendshëm, dhe rreshtimi i tekstit: në qendër dhe rreshtimi vertikal: nga mes në elementin e jashtëm.

Mos harroni se shtrirja zbatohet vetëm për elementët që kanë një modalitet ekrani në linjë ose në blloqe të brendshme.

Le të vendosim madhësitë e blloqeve, si dhe ngjyrat e sfondit, në mënyrë që të shohim kufijtë e tyre.

E jashtme ( gjerësia: 200 pikselë; lartësia: 200 pikselë; rreshtimi i tekstit: në qendër; rreshtimi vertikal: i mesëm; ngjyra e sfondit: #ffc; ) . i brendshëm ( ekrani: blloku i brendshëm; gjerësia: 100 pikselë; lartësia: 100 pikselë; ngjyra e sfondit : #fcc;
Pas aplikimit të stileve, do të shohim se blloku i brendshëm është i rreshtuar horizontalisht, por jo vertikalisht:
http://jsfiddle.net/c1bgfffq/

Pse ndodhi? Puna është se vetia vertikale e rreshtimit ndikon në shtrirjen vetë elementi, jo përmbajtja e tij(përveç rasteve kur aplikohet në qelizat e tabelës). Prandaj, aplikimi i kësaj vetie në elementin e jashtëm nuk prodhoi asgjë. Për më tepër, aplikimi i kësaj vetie në një element të brendshëm gjithashtu nuk do të bëjë asgjë, pasi blloqet inline janë rreshtuar vertikalisht në lidhje me blloqet ngjitur, dhe në rastin tonë kemi një bllok inline.

Ka disa teknika për të zgjidhur këtë problem. Më poshtë do të hedhim një vështrim më të afërt në secilën prej tyre.

Rreshtimi duke përdorur një tabelë

Zgjidhja e parë që vjen në mendje është zëvendësimi i bllokut të jashtëm me një tabelë me një qelizë. Në këtë rast, shtrirja do të zbatohet në përmbajtjen e qelizës, domethënë në bllokun e brendshëm.


http://jsfiddle.net/c1bgfffq/1/

Disavantazhi i dukshëm i kësaj zgjidhjeje është se, nga pikëpamja semantike, është e gabuar të përdoren tabela për shtrirje. Disavantazhi i dytë është se krijimi i një tabele kërkon shtimin e një elementi tjetër rreth bllokut të jashtëm.

Minusi i parë mund të hiqet pjesërisht duke zëvendësuar etiketat e tabelës dhe td me div dhe duke vendosur modalitetin e shfaqjes së tabelës në CSS.


.mbështjellësi i jashtëm ( shfaqja: tabela; ) .i jashtëm ( shfaqja: qeliza e tabelës; )
Megjithatë, blloku i jashtëm do të mbetet ende një tabelë me të gjitha pasojat që pasojnë.

Rreshtimi duke përdorur dhëmbëzimet

Nëse dihen lartësitë e blloqeve të brendshme dhe të jashtme, atëherë shtrirja mund të vendoset duke përdorur dhëmbëzimet vertikale të bllokut të brendshëm duke përdorur formulën: (H e jashtme – H e brendshme) / 2.

E jashtme (lartësia: 200 px; ) . e brendshme (lartësia: 100 px; kufiri: 50 px 0; )
http://jsfiddle.net/c1bgfffq/6/

Disavantazhi i zgjidhjes është se është i zbatueshëm vetëm në një numër të kufizuar rastesh kur dihen lartësitë e të dy blloqeve.

Rreshtimi duke përdorur lartësinë e vijës

Nëse e dini që blloku i brendshëm nuk duhet të zërë më shumë se një rresht teksti, atëherë mund të përdorni veçorinë line-height dhe ta vendosni atë të barabartë me lartësinë e bllokut të jashtëm. Meqenëse përmbajtja e bllokut të brendshëm nuk duhet të mbyllet në rreshtin e dytë, rekomandohet të shtoni edhe hapësirën e bardhë: nowrap dhe tejmbushje: rregulla të fshehura.

E jashtme (lartësia: 200 px; lartësia e vijës: 200 px; ) . e brendshme (hapësirë ​​e bardhë: tanirap; vërshimi: i fshehur; )
http://jsfiddle.net/c1bgfffq/12/

Kjo teknikë mund të përdoret gjithashtu për të rreshtuar tekstin me shumë rreshta nëse ripërcaktoni vlerën e lartësisë së rreshtit për bllokun e brendshëm dhe gjithashtu shtoni ekranin: blloku inline dhe rreshtimi vertikal: rregullat e mesme.

E jashtme (lartësia: 200 px; lartësia e vijës: 200 px; ) . e brendshme (lartësia e vijës: normale; ekrani: blloku i brendshëm; rreshtimi vertikal: në mes; )
http://jsfiddle.net/c1bgfffq/15/

Disavantazhi i kësaj metode është se lartësia e bllokut të jashtëm duhet të dihet.

Rreshtimi duke përdorur "stretch"

Kjo metodë mund të përdoret kur lartësia e bllokut të jashtëm është e panjohur, por lartësia e bllokut të brendshëm është e njohur.

Për ta bërë këtë ju duhet:

  1. vendosni pozicionimin relativ në bllokun e jashtëm dhe pozicionimin absolut në bllokun e brendshëm;
  2. shtoni rregullat lart: 0 dhe poshtë: 0 në bllokun e brendshëm, si rezultat i të cilit do të shtrihet në të gjithë lartësinë e bllokut të jashtëm;
  3. vendosni mbushjen vertikale të bllokut të brendshëm në automatik.
.i jashtëm (pozicioni: relative; ) .i brendshëm (lartësia: 100 px; pozicioni: absolut; sipër: 0; poshtë: 0; margjina: automatike 0; )
http://jsfiddle.net/c1bgfffq/4/

Ideja prapa kësaj teknike është se vendosja e një lartësie për një bllok të shtrirë dhe absolutisht të pozicionuar bën që shfletuesi të llogarisë mbushjen vertikale në një raport të barabartë nëse është vendosur në automatik.

Rreshtimi me marzh negativ-lart

Kjo metodë është bërë e njohur gjerësisht dhe përdoret shumë shpesh. Ashtu si ai i mëparshmi, përdoret kur nuk dihet lartësia e bllokut të jashtëm, por dihet lartësia e atij të brendshëm.

Ju duhet të vendosni bllokun e jashtëm në pozicionim relativ dhe bllokun e brendshëm në pozicionim absolut. Më pas ju duhet ta zhvendosni bllokun e brendshëm me gjysmën e lartësisë së pjesës së sipërme të bllokut të jashtëm: 50% dhe ta ngrini atë me gjysmën e lartësisë së tij margjinale-maja: -H e brendshme / 2.

E jashtme ( pozicioni: relative; ) . i brendshëm (lartësia: 100 px; pozicioni: absolut; sipër: 50%; margjina-lart: -50 px; )
http://jsfiddle.net/c1bgfffq/13/

Disavantazhi i kësaj metode është se lartësia e njësisë së brendshme duhet të dihet.

Përafrimi me transformimin

Kjo metodë është e ngjashme me atë të mëparshme, por mund të përdoret kur lartësia e njësisë së brendshme nuk dihet. Në këtë rast, në vend që të vendosni një mbushje negative të pikselit, mund të përdorni vetinë e transformimit dhe ta zhvendosni bllokun e brendshëm lart duke përdorur funksionin translateY dhe një vlerë prej -50%.

E jashtme ( pozicioni: relativ; ) . i brendshëm ( pozicioni: absolut; lart: 50%; transformimi: translateY(-50%); )
http://jsfiddle.net/c1bgfffq/9/

Pse ishte e pamundur të vendosej vlera si përqindje në metodën e mëparshme? Meqenëse vlerat e marzhit të përqindjes llogariten në lidhje me elementin mëmë, një vlerë prej 50% do të ishte gjysma e lartësisë së kutisë së jashtme dhe do të na duhej ta ngrinim kutinë e brendshme në gjysmën e lartësisë së saj. Vetia e transformimit është e përkryer për këtë.

Disavantazhi i kësaj metode është se nuk mund të përdoret nëse njësia e brendshme ka pozicionim absolut.

Përafrimi me Flexbox

Mënyra më moderne e shtrirjes vertikale është përdorimi i Flexible Box Layout (i njohur gjerësisht si Flexbox). Ky modul ju lejon të kontrolloni në mënyrë fleksibël pozicionimin e elementeve në faqe, duke i renditur ato pothuajse kudo. Shtrirja në qendër për Flexbox është një detyrë shumë e thjeshtë.

Blloku i jashtëm duhet të vendoset për të shfaqur: flex dhe blloku i brendshëm në diferencë: auto . Dhe kjo është e gjitha! E bukur, apo jo?

E jashtme (ekrani: përkul; gjerësia: 200 px; lartësia: 200 px; ) . e brendshme ( gjerësia: 100 px; diferenca: automatike; )
http://jsfiddle.net/c1bgfffq/14/

Disavantazhi i kësaj metode është se Flexbox mbështetet vetëm nga shfletuesit modernë.

Cila metodë duhet të zgjedh?

Ju duhet të filloni nga deklarata e problemit:
  • Për të rreshtuar tekstin vertikalisht, është më mirë të përdorni dhëmbëzimet vertikale ose vetitë e lartësisë së vijës.
  • Për elementët e pozicionuar absolutisht me një lartësi të njohur (për shembull, ikona), metoda me një veti negative të marzhit në krye është ideale.
  • Për raste më komplekse, kur lartësia e bllokut është e panjohur, duhet të përdorni një pseudo element ose vetinë e transformimit.
  • Epo, nëse jeni aq me fat sa nuk keni nevojë të mbështesni versionet më të vjetra të shfletuesit IE, atëherë, natyrisht, është më mirë të përdorni Flexbox.

Ne analizojmë shtrirjen e elementeve të bllokut në CCS. Ne vendosim disa në qendër DIV ose LI elementet. Unë ofroj disa nga opsionet e mia për shumicën e rasteve.

Ky artikull nuk synon të listojë të gjitha opsionet e shtrirjes dhe të rishkruajë atë që tashmë ekziston diku. Nuk e mbaj mend pse, por shpesh nuk isha i kënaqur me opsionet e ofruara. Ose kishte blloqe fikse, ose gjithçka u prish gjatë paraqitjes adaptive, ose disa mangësi të tjera.

Ndonjëherë, për t'u lidhur në qendër, mjafton të shtoni disa atribute dhe nuk keni nevojë për asgjë të komplikuar. Për shembull, kështu jam edhe unë.

Më poshtë janë disa opsione për paraqitjen adaptive për rreshtimin e blloqeve në qendër, të cilat unë Unë përdor në faqet e tyre të internetit. Dhe nëse e para është mjaft e zakonshme, atëherë ndoshta disa metoda të tjera as nuk do të përshkruhen në internet pikërisht në këtë mënyrë.

opsioni 1

Rreshtimi i thjeshtë i të gjitha blloqeve në qendër të faqes.

Le të qendrojmë Përmbajtja UL prej 4 elementesh LI, të cilat janë në bllok DIV me klasën enë.






Në këtë rast, rregullat e mëposhtme në CSS janë të mjaftueshme:

enë (
gjerësia: 100%;
}

Enë ul (
text-align: qendër;
list-style: asnjë;
}

enë li (
ekrani: inline-block;
}

Ne marrim pamjen e mëposhtme: Ka 4 elementë LI të përqendruar këtu. Kur madhësia e ekranit zvogëlohet, elementët që nuk përshtaten zhvendosen poshtë.

Nëse bllokon LI me këto prona nuk janë instaluar në qendër, që do të thotë se ndonjë pronë tjetër po ndërhyn në to. Për shembull, kjo mund të jetë pronë noton: majtas ose shfaqja: tabela; apo ndonjë tjetër.

Tani mund të shtoni stile të tjera në strukturën e sipërme (në kornizën bazë të shtrirjes CSS). Për shembull, bëni blloqe me një madhësi fikse dhe futni njëra-tjetrën:

enë li (
ekrani: inline-block;
diferenca: 5 px;
gjerësia: 100 px;
}

Ne marrim sa vijon:

Por ka një pengesë për këtë opsion. Blloqet janë të vendosura në qendër, por ka distanca të mëdha majtas dhe djathtas. Ato mund të zvogëlohen duke ndryshuar gjerësinë.

Ose mund të bëni kontejnerë me të njëjtën madhësi në mënyrë që të ketë dhëmbëza vetëm midis kontejnerëve dhe të mos ketë asnjë në të majtë dhe në të djathtë.

Pastaj do të heqim diferencë dhe shtoni gjerësinë e kësaj gjerësia në mënyrë që të mbulojë plotësisht zonën.

enë li (
vertikale-linjë: lartë;
ekrani: inline-block;
gjerësia: 32.899%;
}

Do të ketë një zonë të vogël të hapësirës boshe midis blloqeve. Dhe për ta bërë atë edhe më të madh, mund të tërhiqeni brenda duke përdorur parametrin mbushje.

Në blloqe, qëllimisht nuk shtoj asgjë shtesë në mënyrë që të lë pikërisht ato stile që ndikojnë drejtpërdrejt në shtrirjen. Por nëse bëni të njëjtën gjë, nuk do të merrni blloqe të tilla. Nëse vetëm sepse, së pari, duhet të shtoni ngjyrë në bllok, dhe së dyti, nëse është bosh, vendosni lartësia: 100 px;. Atributet e tjera janë sipas dëshirës suaj.

Versioni përfundimtar është:

Në pamjen e mësipërme, lashë zona të tjera të sitit në mënyrë që të jetë e qartë se ku janë kufijtë e blloqeve, sepse nëse ato janë ngjitur me skajin, atëherë buza në vetvete nuk është më e dukshme. Dhe në foto, skajet e bardha majtas dhe djathtas janë një shtrirje e ndryshme që nuk ka asgjë të përbashkët me shembullin në fjalë. E përsëris, vetë blloqet janë ngjitur me skajet, të cilat nuk janë të dukshme, sepse blloqet i mbulojnë plotësisht ato.

Opsioni 2

Ka shumë mënyra për të përqendruar blloqet. Por nëse ju duhet ta bëni shtrirjen më të zgjuar, duhet të grumbulloni trurin tuaj. Për fat të mirë, unë dola me një metodë interesante për qëllimet e mëposhtme:

Si t'i përqendroj të gjitha div-të në mënyrë që blloku në rreshtin tjetër të lihet i rreshtuar?

Ne kemi strukturën e mëposhtme:



Blloku 1


Blloku 2


Blloku 3


Blloku 4


Blloku 5

Ne shkruajmë klasa për ta:


gjerësia: 90%;
marzhi: 0 auto;
}

Arkivi-artikull (
ekrani: inline-block;
vertikale-linjë: lartë;

Gjerësia: llogaritur (33,3333% - (0,666666666667 * 36 px));
diferenca: 0 10px 0 11px;
}

Ju lutemi vini re se nëse ndryshoni përmasat kalc, atëherë duhet të rregulloni në mënyrë eksperimentale dimensionet diferencë. Përndryshe, blloqet nuk do të përqendrohen.

Ky rreshtim duhet të bëhet me sy. Por nëse ka më pak blloqe në linjën e re sesa në linjën e mësipërme, ky bllok i vetmuar do të jetë me ana e majte. Dhe duket shumë më bukur se kur në vijën tjetër një bllok i vetëm ndodhet në qendër.

Duke zbatuar teknikën e mësipërme, do të marrim një plan urbanistik adaptiv, me të gjitha skajet të barabarta, i cili nuk do të përkeqësohet kur ndryshoni madhësinë e ekranit.

Dhe nëse duam që versioni celular të mos ketë 3 blloqe, por 2, atëherë në ccs për një rezolucion prej 768 pikselësh, ne do t'i ndajmë blloqet ndryshe:

Ekrani @media dhe (gjerësia maksimale: 768 px) (
.arkivi-artikull (
gjerësia: llogaritur (47.3333% - (0.666666666667 * 25 px));
diferenca: 0 10px 0 20px;
}
}

Le të marrim të njëjtat blloqe në versionin celular, por me dy blloqe për rresht:

Opsioni 3

Tani do të rreshtojmë duke përdorur përkul. Kjo mund të duket si mënyra ideale për të niveluar, sepse në fakt funksionon shumë thjesht. Megjithatë, FLEX nuk e përballon detyrën e përshkruar në opsionin 2. Të paktën, unë nuk munda të arrij të njëjtat rezultate.

Tek pjesa tjetër:

Shtimi i stileve:

#cssmenu (
diferenca: 20 px automatike;
}

#cssmenu ul (
list-style: asnjë;
shfaqja: flex;
flex-mbështjell: mbështjell;
justify-content: qendër;
}

#cssmenu > ul > li (
diferenca: 1 px;
}

Ne marrim:

Në shembullin e dhënë:

flex-mbështjell: mbështjell;

Zhvendos blloqet në rreshtin tjetër nëse mbushin enën. Përndryshe, ata do të shkojnë më tej jashtë dritares së shfletuesit.

justify-content: qendër;

Ne rreshtojmë përmbajtjen e blloqeve në qendër.

Opsioni 4

Një tjetër opsion i shtrirjes duke përdorur teknologjinë flex.

Ne kemi një enë me dy blloqe brenda. Ne kemi nevojë për këto 2 blloqe për të ndarë gjerësinë në dy anët e barabarta.


Blloku 1

Blloku 2

Për ta bërë këtë, ne do të shkruajmë vetitë e mëposhtme në stilet:

enë (
shfaqja: flex;
}

Blloko (
flex-bazë: 100%;
}

Opsioni 5

Ekziston një mundësi tjetër për përqendrimin e blloqeve, nëse numri i tyre është rreptësisht i barabartë. Për shembull: ka 9 blloqe, 3 për secilën rresht. Dhe ju e dini se kështu do të mbetet gjithmonë. Për shembull, ju po krijoni një faqe uljeje dhe e dini me siguri se asgjë e panevojshme nuk do të shtohet në faqe midis këtyre blloqeve.

Pra, ne kemi 9 blloqe të llojit të mëposhtëm (nuk i kam dublikuar rreshtat 9 herë, por mbani në mend se ka 9 blloqe):



Blloku 1


Blloku 2


Blloku 3

Aplikoni stile për to:

Arkivi-kontejner-për-artikuj (
gjerësia: 100%;
text-align: qendër;
}

Arkivi-artikull (
gjerësia: 25%;
vertikale-linjë: lartë;
ekrani: inline-block;
text-align: majtas;
}

Arkivi-artikull:nth-child(1),
.archive-article:nth-child(4),
.archive-article:nth-child(7) (
margjina: 20px 0 30px 40px;
}

Arkivi-artikull:nth-child(2),
.archive-article:nth-child(5),
.archive-article:nth-child(8) (
diferenca: 20px 40px 30px;
}

Arkivi-artikull:nth-child(3),
.archive-article:nth-child(6),
.archive-article:nth-child(9) (
diferenca: 20px 40px 30px 0;
}

Ne gjithashtu do të marrim një plan urbanistik adaptiv. Kur ekrani zvogëlohet, blloku që nuk përshtatet do të shkojë në qendër të poshtme

Avantazhi i këtij lloji të përqendrimit është se ju mund të bëni qartë dhe qartë dhëmbëzime midis blloqeve.

Pengesë kryesore është se asgjë nuk mund të vendoset brenda blloqeve. Çdo element:

qoftë div ose fq ose diçka tjetër, do të konsiderohet si një element i brendshëm fëmija i nëntë. Si rezultat, stilet CSS do të mbivendosen mbi të dhe të gjitha dhëmbëzat e bëra duke përdorur margjinën do t'i zhvendosin blloqet ndryshe nga sa ishte menduar fillimisht.