Div obsahu je vycentrovaný. Zarovnanie na stred v CSS. Zarovnanie reťazca alebo prvku string-* na stred


Od autora: Opäť vás vítam na stránkach nášho blogu. V dnešnom článku by som chcel hovoriť o rôznych technikách zarovnania, ktoré sa dajú aplikovať na bloky aj ich obsah. Najmä ako zarovnať bloky v css, ako aj zarovnanie textu.

Zarovnanie blokov do stredu

V CSS je vycentrovanie bloku jednoduché. Toto je pre mnohých najznámejšia technika, ale najskôr by som o nej chcel hovoriť. To znamená zarovnanie vodorovne na stred vzhľadom k rodičovskému prvku. Ako sa to robí? Povedzme, že máme kontajner a náš experimentálny subjekt je v ňom:

< div id = "wrapper" >

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

< / div >

Predpokladajme, že toto je hlavička stránky. Netiahne sa po celej šírke okna a potrebujeme ho vycentrovať. Píšeme takto:

#header(

šírka/maximálna šírka: 800px;

okraj: 0 auto;

Musíme zadať presnú alebo maximálnu šírku a potom zapísať kľúčovú vlastnosť - margin: 0 auto. Nastavuje vonkajšie okraje našej hlavičky, prvá hodnota určuje horný a dolný okraj a druhá určuje pravý a ľavý okraj. Hodnota auto hovorí prehliadaču, aby automaticky vypočítal výplň na oboch stranách tak, aby bol prvok presne vycentrovaný na rodiča. Pohodlné!

Zarovnanie textu

Toto je tiež veľmi jednoduchá technika. Na zarovnanie všetkých vložených prvkov môžete použiť vlastnosť zarovnania textu a jej hodnoty: vľavo, vpravo, na stred. Ten vycentruje text, čo potrebujeme. Rovnakým spôsobom môžete dokonca zarovnať obrázok, pretože je tiež štandardne vloženým prvkom.

Zarovnajte text vertikálne

Ale toto je zložitejšie. V predvolenom nastavení neexistuje žiadna jednoduchá, dobre známa vlastnosť, ktorá ľahko vycentruje text vertikálne v kontajneri bloku. Existuje však niekoľko techník, s ktorými dizajnéri rozloženia v priebehu rokov prišli.

Nastavte výšku bloku pomocou výplne. Cestou nie je nastaviť explicitnú výšku pomocou výšky, ale vytvoriť ju umelo pomocou vypchávok v hornej a dolnej časti, ktoré by mali byť rovnaké. Vytvorme ľubovoľný blok a napíšme doň nasledujúce vlastnosti:

div( pozadie: #ccc; padding: 30px 0; )

div(

pozadie : #ccc;

padding: 30px 0;

Pozadie slúži len na vizuálne zobrazenie okrajov, ako aj výplne. Výška bloku sa teraz skladá z týchto dvoch zarážok a samotnej čiary a všetko vyzerá takto:

Definujte výšku čiary pre blok. Myslím, že toto je správnejší spôsob, ak potrebujete zarovnať jeden riadok textu. Pomocou neho môžete napísať výšku podľa normálu pomocou vlastnosti height. Potom musí tiež nastaviť výšku čiary, rovnakú ako výška bloku ako celku.

div( výška: 60px; výška riadku: 60px; )

div(

výška: 60px;

line-height: 60px;

Výsledok bude podobný ako na obrázku vyššie. Všetko bude fungovať, aj keď pridáte vypchávky. Avšak len na jeden riadok. Ak potrebujete viac textu v prvku, táto metóda nebude fungovať.

Previesť blok na bunku tabuľky. Podstatou tejto metódy je, že bunka tabuľky má vlastnosť vertical-align: middle, ktorá vycentruje prvok vertikálne. Preto je v tomto prípade potrebné nastaviť blok takto:

div( display: table-cell; vertical-align: middle; )

div(

zobrazenie: tabuľka - bunka;

vertikálne - zarovnať : stred ;

Táto metóda je dobrá, pretože na stred môžete zarovnať toľko textu, koľko chcete. Lepšie je ale napísať display: table do bloku, v ktorom je náš div vnorený, inak to nemusí fungovať.

No a tu sa dostávame k poslednej technike pre dnešok – tou je vertikálne zarovnanie samotných blokov. Treba povedať, že opäť neexistuje vlastnosť, ktorá by bola na to špeciálne určená, no existuje niekoľko trikov, o ktorých by ste mali vedieť.

Nastavte zarážky v percentách. Ak poznáte výšku nadradeného prvku a umiestnite do neho ďalší prvok bloku, môžete ho vycentrovať pomocou percentuálnej výplne. Napríklad rodič má výšku 600 pixelov. Umiestnite do nej blok, ktorý je vysoký 300 pixelov. Koľko potrebujete ustúpiť hore a dole, aby ste to vycentrovali? 150 pixelov, čo je 25 % výšky rodiča.

Táto metóda umožňuje zarovnanie len vtedy, keď rozmery umožňujú výpočty. A ak je váš rodič vysoký 887 pixelov, nebudete môcť presne zaznamenať nič, to je už jasné.

Vložte prvok do bunky tabuľky. Opäť platí, že ak nadradený prvok transformujeme na bunku tabuľky, potom sa do nej vložený blok automaticky vertikálne vycentruje. Aby to bolo možné, rodič stačí nastaviť vertikálne zarovnanie: stred.

A ak okrem toho napíšeme aj margin: 0 auto, prvok bude horizontálne vycentrovaný!

Centrovanie prvkov v CSS je jedným z najpopulárnejších dôvodov sťažovania sa na CSS. " Prečo je všetko také ťažké?" - sú rozhorčení. Zdá sa mi, že problém nie je v tom, že je to ťažké, ale v tom, že existuje veľa spôsobov, ako zarovnať prvky v strede, a môže byť dosť ťažké vybrať ten správny.

Usporiadajme všetky možné riešenia do stromového diagramu a dúfajme, že nám to uľahčí úlohu.

Takže potrebujem vycentrovať prvok...

Horizontálne zarovnanie

Centrovanie vložených prvkov v rámci rodičovského prvku na úrovni bloku je pomerne jednoduché:

Deti na stred ( zarovnanie textu: na stred; )

Toto bude fungovať pre inline , inline-block , inline-table , inline-flex atď.

Prvok bloku môžete vycentrovať nastavením vlastností margin-left a margin-right na auto (musí mať tiež nastavenú šírku, inak prvok jednoducho zaberie celú šírku obsahu a nebude potrebné zarovnávanie) . Najčastejšie sa to robí pomocou skrátenej vlastnosti, ako je táto:

Center-me ( margin: 0 auto; )

Toto bude fungovať bez ohľadu na to, aká šírka je nastavená na prvku bloku alebo jeho rodičovi.

Upozorňujeme, že týmto spôsobom nebudete môcť obtekať okolo prvku zarovnaného na stred. Aj na to však existuje trik.

Zarovnanie viacerých blokových prvkov na stred

Ak existujú dva alebo viac prvkov bloku, ktoré potrebujete zarovnať vodorovne a na stred v rámci tej istej čiary, možno bude lepšie zmeniť ich typ zobrazenia. Nižšie je uvedený príklad zmeny ich typu zobrazenia na inline-block a príklad s Flexbox:

Ak sú tieto viaceré bloky na rôznych riadkoch, technika automatického odsadenia je stále skvelá:

Vertikálne zarovnanie

Vertikálne zarovnanie na stred v CSS je trochu komplikovanejšie.

Zarovnanie reťazca alebo prvku string-* na stred

Zarovnanie prvku s jednou čiarou

Niekedy môžu byť prvky reťazca/textu vycentrované jednoducho preto, že majú rovnakú hodnotu pre vlastnosti padding-top a padding-bottom.

Odkaz ( padding-top: 30px; padding-bottom: 30px; )

Ak výplň z nejakého dôvodu neprichádza do úvahy, no snažíte sa vycentrovať nejaký text a s istotou viete, že nebude obalený niečím iným, potom existuje malý trik, ktorého podstatou je nastavenie čiary vlastnosti -výška rovná hodnote výšky prvku.

Center-text-trick ( výška: 100px; výška riadku: 100px; medzera: nowrap; )

Zarovnanie viacriadkového prvku

Rovnaké vypchávanie v hornej a dolnej časti môže vytvoriť vycentrovaný efekt aj pre viacriadkové prvky, ale ak to nefunguje, je možné, že prvok obsahujúci text je bunka tabuľky alebo že je explicitne nastavený tak, aby sa správal takto spôsobom pomocou CSS. V tomto prípade to rieši vlastnosť vertical-align, na rozdiel od toho, ako zvyčajne spracováva zarovnanie prvkov v rámci čiary.

Ak je to niečo ako stôl, možno môžete použiť Flexbox? Jeden prvok Flex možno ľahko vycentrovať v kontajneri Flex.

Flex-center-vertikálne (zobrazenie: flex; justify-content: center; flex-direction: column; height: 400px; )

Pamätajte, že toto je v skutočnosti relevantné, keď má kontajner pevnú výšku (px, %, atď.), a preto tu má kontajner danú výšku.

Ak nie je možné použiť obe vyššie uvedené techniky, môžete použiť techniku ​​„ghost element“, pri ktorej sa do kontajnera umiestni pseudoprvok s výškou 100 % a zvisle sa zarovná do jeho stredu.

Ghost-center ( position: relativní; ) .ghost-center::before ( content: " "; display: inline-block; height: 100%; width: 1%; vertical-align: middle; ) .ghost-center p ( zobrazenie: inline-block; vertical-align: middle; )

Zarovnajte na stred prvku bloku

Zarovnajte prvok so známou výškou

Pomerne často nemôžeme poznať výšku z mnohých dôvodov: ak sa zmení šírka, text sa môže naformátovať a zmeniť výšku. Rôzne štýly textu môžu zmeniť výšku. Iná veľkosť písma môže zmeniť výšku. Prvky s pevným pomerom strán, ako sú obrázky, môžu pri zmene veľkosti zmeniť výšku atď.

Ak však poznáte výšku prvku, môžete zarovnať na stred takto:

Rodič (pozícia: relatívna; ) .child (pozícia: absolútna; hore: 50 %; výška: 100px; margin-top: -50px; /* zohľadňuje odsadenie a orámovanie, ak nepoužívate veľkosť poľa: border-box; */ )

Zarovnanie prvku s neznámou výškou

Aj keď nepoznáte výšku prvku, stále ho môžete posunúť na 50 % výšky jeho rodiča a potom ho zvýšiť na 50 % jeho vlastnej výšky:

Rodič ( pozícia: relatívna; ) .child ( pozícia: absolútna; horná časť: 50 %; transformácia: preložiťY(-50 %); )

Malé prekvapenie, dá sa to urobiť veľmi jednoducho pomocou Flexboxu.

Nadradený (zobraziť: ohyb; smer ohybu: stĺpec; zarovnať obsah: stred; )

Horizontálne a vertikálne zarovnanie

Môžete kombinovať techniky uvedené vyššie, aby ste dosiahli dokonale vycentrované prvky. Zvyčajne sa však dajú rozdeliť do 4 skupín:

Zarovnanie prvku s pevnou šírkou a výškou

Použitím záporného okraja rovnajúceho sa polovici tejto šírky a výšky po absolútnom umiestnení prvku 50 %/50 % sa prvok vycentruje. Táto metóda má pomerne dobrú podporu medzi prehliadačmi:

Nadradená (pozícia: relatívna; ) .child (šírka: 300 pixelov; výška: 100 pixelov; odsadenie: 20 pixelov; pozícia: absolútna; horná časť: 50 %; ľavá strana: 50 %; okraj: -70 pixelov 0 0 -170 pixelov; )

Zarovnanie prvku s neznámou šírkou a výškou

Ak nepoznáte šírku alebo výšku prvku, môžete použiť vlastnosť transform a záporný prevod 50 % v oboch smeroch (v závislosti od aktuálnej šírky/výšky prvku) do stredu:

Rodič ( pozícia: relatívna; ) .child ( pozícia: absolútna; hore: 50 %; vľavo: 50 %; transformovať: preložiť (-50 %, -50 %); )

Zarovnanie prvku pomocou Flexboxu

Ak chcete vycentrovať prvok pomocou Flexboxu, musíte použiť dve vlastnosti centrovania:

Parent ( display: flex; justify-content: center; align-items: center; )

Zarovnanie prvku pomocou mriežky CSS

Toto je len malý trik (zverejnil Lance Janssen), ktorý bude väčšinou fungovať pre jeden prvok:

Telo, html ( výška: 100 %; zobrazenie: mriežka; ) rozpätie ( /* vec na stred */ okraj: auto; )

Záver

Teraz môžete v CSS vycentrovať čokoľvek.

Dobrý deň, predplatitelia a čitatelia tejto publikácie. Dnes chcem ísť do detailov a povedať vám, ako vycentrovať text v CSS. V niektorých predchádzajúcich článkoch som sa tejto témy nepriamo dotkol, takže nejaké znalosti v tejto oblasti máte.

V tejto publikácii vám však poviem o všetkých rôznych spôsoboch zarovnania objektov a tiež vysvetlím, ako odsadzovať a redlineovať odseky. Začnime sa teda učiť materiál!

HTML a jeho potomkovia
a zarovnať

Táto metóda sa takmer nikdy nepoužíva, pretože ju nahradili nástroje kaskádových štýlov. Vedieť, že takáto značka existuje, vám však neublíži.

Pokiaľ ide o validáciu (tento pojem je podrobne popísaný v článku ""), samotná html špecifikácia odsudzuje použitie < centrum>, keďže pre platnosť je potrebné použiť prechod DOCTYPE>.

Tento typumožňuje prechod zakázaných prvkov.

CENTRUM

Teraz prejdime k atribútu zarovnať. Nastavuje vodorovné zarovnanie objektov na deklaráciu tagu a zapadá za ňu. Zvyčajne sa dá použiť na zarovnanie obsahu doľava ( vľavo), pozdĺž pravého okraja ( správny), na stred ( stred) a podľa šírky textu ( ospravedlniť).

Nižšie uvediem príklad, v ktorom umiestnim obrázok a odsek do stredu.

zarovnať

Tento obsah bude vycentrovaný.

Upozorňujeme, že pre obrázok má atribút, ktorý analyzujeme, mierne odlišný význam.

V príklade, ktorý som použil align="stred". Vďaka tomu bol obraz zarovnaný tak, aby sa veta nachádzala jasne v strede obrazu.

Centrovacie nástroje v css

Oveľa častejšie sa využívajú vlastnosti CSS určené na zarovnávanie blokov, textu a grafického obsahu. Je to predovšetkým kvôli pohodliu a flexibilite implementačných štýlov.

Začnime teda prvou vlastnosťou centrovania textu – toto je text-zarovnať.

Funguje rovnako ako zarovnanie v . Spomedzi kľúčových slov si môžete vybrať jedno zo všeobecného zoznamu alebo zdediť vlastnosti predka ( dediť).

Chcel by som poznamenať, že v css3 môžete nastaviť ďalšie 2 parametre: začať– v závislosti od pravidiel písania textu (sprava doľava alebo naopak) nastaví zarovnanie vľavo alebo vpravo (podobne ako pri práci vľavo alebo vpravo) a koniec– opak začiatku (pri písaní textu zľava doprava funguje ako pravý, pri písaní sprava doľava – zľava).

zarovnanie textu

Veta vpravo

Veta s použitím konca

Poviem vám o malom triku. Pri výbere hodnoty ospravedlniť posledný riadok môže zospodu nevábne visieť. Ak ho chcete napríklad umiestniť do stredu, môžete použiť nehnuteľnosť text-align-posledný.

Ak chcete obsah lokality alebo bunky tabuľky zarovnať vertikálne, použite vlastnosť vertikálne zarovnať. Nižšie som opísal hlavné kľúčové slová prvku.

Kľúčové slovo Účel
základná línia Určuje zarovnanie k línii predka, ktorá sa nazýva základná línia. Ak objekt predka takúto čiaru nemá, potom dôjde k zarovnaniu pozdĺž spodnej hranice.
stredná Stred mutovaného objektu sa zarovná k základnej čiare, ku ktorej sa pridá výškové dno nadradeného prvku.
dno Spodná časť vybratého obsahu sa prispôsobí spodnej časti objektu pod ňou.
top Podobne ako dole, ale s hornou časťou objektu.
Super Vytvára horný index postavy.
sub Urobí dolný index prvku.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 vertikálne zarovnať
C IN E TOTO

vertikálne zarovnať

C IN E TOTO

Vrúbky

A nakoniec sa dostávame k zarážkam odsekov. Jazyk CSS využíva špeciálnu vlastnosť tzv zarážka textu.

S jeho pomocou môžete urobiť červenú čiaru aj výčnelok (treba zadať zápornú hodnotu).

zarážka textu

Na vytvorenie červenej čiary potrebujete poznať iba jeden parameter.

Toto je jednoduchá vlastnosť odsadenia textu.

Myslím si, že mnohí z vás, ktorí sa museli zaoberať rozložením, sa stretli s potrebou vertikálneho zarovnania prvkov a poznajú ťažkosti, ktoré vznikajú pri zarovnávaní prvku na stred.

Áno, v CSS existuje špeciálna vlastnosť vertikálneho zarovnania s viacerými hodnotami na vertikálne zarovnanie. V praxi to však vôbec nefunguje podľa predstáv. Skúsme na to prísť.


Porovnajme nasledujúce prístupy. Zarovnajte pomocou:

  • stoly,
  • odsadenie,
  • line-height
  • strečing,
  • záporná marža,
  • transformovať
  • pseudo prvok
  • flexbox.
Na ilustráciu zvážte nasledujúci príklad.

Existujú dva prvky div, pričom jeden z nich je vnorený do druhého. Dajme im zodpovedajúce triedy – vonkajšie a vnútorné.


Výzvou je zarovnať vnútorný prvok so stredom vonkajšieho prvku.

Najprv zvážime prípad, keď sú rozmery vonkajších a vnútorných blokov známy. Pridajme zobrazenie pravidla: inline-block k vnútornému prvku a text-align: center a vertical-align: middle k vonkajšiemu prvku.

Pamätajte, že zarovnanie sa vzťahuje iba na prvky, ktoré majú režim zobrazenia vnorený alebo vložený blok.

Nastavíme veľkosti blokov, ako aj farby pozadia tak, aby sme videli ich okraje.

Vonkajšie ( šírka: 200px; výška: 200px; zarovnanie textu: na stred; zvislé zarovnanie: na stred; farba pozadia: #ffc; ) .vnútorné ( displej: vložený blok; šírka: 100px; výška: 100px; farba pozadia : #fcc ;)
Po použití štýlov uvidíme, že vnútorný blok je zarovnaný horizontálne, ale nie vertikálne:
http://jsfiddle.net/c1bgfffq/

Prečo sa to stalo? Ide o to, že vlastnosť vertical-align ovplyvňuje zarovnanie samotný prvok, nie jeho obsah(okrem prípadov, keď sa použije na bunky tabuľky). Preto aplikovanie tejto vlastnosti na vonkajší prvok nič neprinieslo. Navyše, aplikácia tejto vlastnosti na vnútorný prvok tiež nič neurobí, pretože vložené bloky sú zarovnané vertikálne vzhľadom na susedné bloky a v našom prípade máme jeden vložený blok.

Na vyriešenie tohto problému existuje niekoľko techník. Nižšie sa bližšie pozrieme na každý z nich.

Zarovnanie pomocou tabuľky

Prvé riešenie, ktoré príde na myseľ, je nahradiť vonkajší blok tabuľkou s jednou bunkou. V tomto prípade sa zarovnanie použije na obsah bunky, teda na vnútorný blok.


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

Zjavnou nevýhodou tohto riešenia je, že zo sémantického hľadiska je nesprávne používať tabuľky na zarovnávanie. Druhou nevýhodou je, že vytvorenie tabuľky vyžaduje pridanie ďalšieho prvku okolo vonkajšieho bloku.

Prvé mínus sa dá čiastočne odstrániť nahradením tagov table a td za div a nastavením režimu zobrazenia tabuľky v CSS.


.vonkajší obal ( displej: tabuľka; ) .vonkajší ( displej: bunka tabuľky; )
Vonkajší blok však stále zostane stolom so všetkými z toho vyplývajúcimi dôsledkami.

Zarovnanie pomocou zarážok

Ak sú známe výšky vnútorných a vonkajších blokov, potom je možné zarovnanie nastaviť pomocou zvislých odsadení vnútorného bloku pomocou vzorca: (H vonkajší – H vnútorný) / 2.

Vonkajšie ( výška: 200px; ) .vnútorné (výška: 100px; okraj: 50px 0; )
http://jsfiddle.net/c1bgfffq/6/

Nevýhodou riešenia je, že je použiteľné len v obmedzenom počte prípadov, keď sú známe výšky oboch blokov.

Zarovnanie pomocou výšky čiary

Ak viete, že vnútorný blok by nemal zaberať viac ako jeden riadok textu, môžete použiť vlastnosť line-height a nastaviť ho na rovnakú výšku ako výška vonkajšieho bloku. Keďže obsah vnútorného bloku by sa nemal zalamovať do druhého riadku, odporúča sa pridať aj pravidlá white-space: nowrap a overflow: hidden.

Vonkajšie ( výška: 200px; výška riadku: 200px; ) .vnútorné (biele miesto: nowrap; pretečenie: skryté; )
http://jsfiddle.net/c1bgfffq/12/

Túto techniku ​​je možné použiť aj na zarovnanie viacriadkového textu, ak predefinujete hodnotu výšky riadku pre vnútorný blok a pridáte pravidlá zobrazenia: inline-block a vertical-align: middle.

Vonkajšie ( height: 200px; line-height: 200px; ) .inner ( line-height: normal; display: inline-block; vertical-align: middle; )
http://jsfiddle.net/c1bgfffq/15/

Nevýhodou tejto metódy je, že musí byť známa výška vonkajšieho bloku.

Zarovnanie pomocou "natiahnutia"

Túto metódu možno použiť, keď výška vonkajšieho bloku nie je známa, ale výška vnútorného bloku je známa.

K tomu potrebujete:

  1. nastaviť relatívne umiestnenie k vonkajšiemu bloku a absolútne umiestnenie k vnútornému bloku;
  2. pridajte pravidlá horná: 0 a spodná: 0 k vnútornému bloku, v dôsledku čoho sa roztiahne na celú výšku vonkajšieho bloku;
  3. nastavte vertikálnu výplň vnútorného bloku na auto.
.vonkajšia ( pozícia: relatívna; ) .vnútorná ( výška: 100px; pozícia: absolútna; hore: 0; dole: 0; okraj: auto 0; )
http://jsfiddle.net/c1bgfffq/4/

Myšlienkou tejto techniky je, že nastavenie výšky pre natiahnutý a absolútne umiestnený blok spôsobí, že prehliadač vypočíta zvislé vypchávky v rovnakom pomere, ak je nastavený na auto.

Zarovnanie so záporným okrajom-vrchol

Táto metóda sa stala všeobecne známou a používa sa veľmi často. Rovnako ako predchádzajúci sa používa, keď nie je známa výška vonkajšieho bloku, ale je známa výška vnútorného.

Musíte nastaviť externý blok na relatívne umiestnenie a vnútorný blok na absolútne umiestnenie. Potom musíte posunúť vnútorný blok nadol o polovicu výšky vrchu vonkajšieho bloku: 50 % a zdvihnúť ho o polovicu jeho vlastnej výšky okraj-hor: -H vnútorné / 2.

Vonkajšia ( pozícia: relatívna; ) .vnútorná ( výška: 100 pixelov; pozícia: absolútna; horná časť: 50 %; okraj navrchu: -50 pixelov; )
http://jsfiddle.net/c1bgfffq/13/

Nevýhodou tejto metódy je, že musí byť známa výška vnútornej jednotky.

Zarovnanie s transformáciou

Táto metóda je podobná predchádzajúcej, ale možno ju použiť, keď nie je známa výška vnútornej jednotky. V tomto prípade namiesto nastavenia zápornej výplne pixelov môžete použiť vlastnosť transform a posunúť vnútorný blok nahor pomocou funkcie translateY a hodnoty -50 % .

Vonkajšia ( pozícia: relatívna; ) .vnútorná ( pozícia: absolútna; horná: 50 %; transformácia: preložiťY(-50 %); )
http://jsfiddle.net/c1bgfffq/9/

Prečo nebolo možné nastaviť hodnotu v percentách v predchádzajúcej metóde? Keďže hodnoty percentuálneho rozpätia sa počítajú vzhľadom na nadradený prvok, hodnota 50 % by bola polovica výšky vonkajšieho rámčeka a vnútorný rámček by sme museli zvýšiť na polovicu jeho vlastnej výšky. Vlastnosť transform je na to ako stvorená.

Nevýhodou tejto metódy je, že ju nemožno použiť, ak má vnútorná jednotka absolútne polohovanie.

Zarovnanie s Flexboxom

Najmodernejším spôsobom vertikálneho zarovnania je použitie flexibilného rozloženia boxu (ľudovo známeho ako Flexbox). Tento modul umožňuje flexibilne ovládať umiestnenie prvkov na stránke a usporiadať ich takmer kdekoľvek. Zarovnanie na stred pre Flexbox je veľmi jednoduchá úloha.

Vonkajší blok musí byť nastavený na zobrazenie: flex a vnútorný blok na margin: auto . A to je všetko! Nádhera, však?

Vonkajšie ( displej: flex; šírka: 200px; výška: 200px; ) .vnútorné (šírka: 100px; okraj: auto; )
http://jsfiddle.net/c1bgfffq/14/

Nevýhodou tejto metódy je, že Flexbox podporujú iba moderné prehliadače.

Akú metódu si mám vybrať?

Musíte začať od vyhlásenia problému:
  • Na zvislé zarovnanie textu je lepšie použiť zvislé zarážky alebo vlastnosť line-height.
  • Pre absolútne umiestnené prvky so známou výškou (napríklad ikony) je ideálna metóda s negatívnou vlastnosťou margin-top.
  • V zložitejších prípadoch, keď výška bloku nie je známa, musíte použiť pseudo prvok alebo vlastnosť transform.
  • No, ak máte také šťastie, že nepotrebujete podporovať staršie verzie prehliadača IE, potom je samozrejme lepšie použiť Flexbox.

Analyzujeme zarovnanie prvkov bloku v CCS. Niekoľko ich umiestnime do stredu DIV alebo LI prvkov. Pre väčšinu prípadov ponúkam niekoľko svojich možností.

Tento článok si nekladie za cieľ vymenovať všetky možnosti zarovnania a prepísať to, čo už niekde existuje. Nepamätám si prečo, ale často som nebol spokojný s ponúkanými možnosťami. Buď tam boli pevné bloky, alebo sa všetko rozpadlo pri adaptívnom rozložení, prípadne nejaké iné nedostatky.

Niekedy na zarovnanie na stred stačí pridať pár atribútov a nepotrebujete nič zložité. Napríklad aj ja.

Nižšie je uvedených niekoľko možností adaptívneho rozloženia na zarovnanie blokov v strede, ktoré I používam na ich webových stránkach. A ak je ten prvý celkom bežný, tak možno niektoré ďalšie spôsoby ani nebudú na internete popísané presne takto.

možnosť 1

Jednoduché zarovnanie všetkých blokov na stred stránky.

Poďme na stred UL obsah zo 4 prvkov LI, ktoré sú v bloku DIV s triedou kontajner.






V tomto prípade postačujú nasledujúce pravidlá v CSS:

Kontajner (
šírka: 100 %;
}

Kontajner ul (
text-align: center;
štýl zoznamu: žiadny;
}

Kontajner li (
displej: inline-block;
}

Získame nasledujúci pohľad: Tu sú vycentrované 4 prvky LI. Keď sa veľkosť obrazovky zmenší, prvky, ktoré sa nezmestia, sa presunú nadol.

Ak bloky LI s týmito nehnuteľnosťami nie sú inštalované v strede, čo znamená, že do nich zasahuje nejaký iný majetok. Môže to byť napríklad nehnuteľnosť plavák: vľavo alebo displej: tabuľka; alebo nejaký iný.

Teraz môžete pridať ďalšie štýly do hornej štruktúry (do základného rámca zarovnania CSS). Napríklad vytvorte bloky pevnej veľkosti a odsadzujte ich navzájom:

Kontajner li (
displej: inline-block;
okraj: 5px;
šírka: 100px;
}

Získame nasledovné:

Ale táto možnosť má jednu nevýhodu. Bloky sa nachádzajú v strede, ale vľavo a vpravo sú obrovské vzdialenosti. Dajú sa zmenšiť zmenou šírky.

Alebo môžete vytvoriť nádoby rovnakej veľkosti, takže priehlbiny budú iba medzi nádobami a na ľavej a pravej strane nebudú žiadne.

Potom odstránime marža a pridajte túto šírku šírka tak, aby úplne pokrýval oblasť.

Kontajner li (
vertikálne zarovnať: hore;
displej: inline-block;
šírka: 32,899 %;
}

Medzi blokmi bude malá oblasť prázdneho priestoru. A aby to bolo ešte väčšie, pomocou parametra sa môžete stiahnuť dovnútra vypchávka.

V blokoch schválne nepridávam nič navyše, aby som ponechal presne tie štýly, ktoré priamo ovplyvňujú zarovnanie. Ale ak urobíte to isté, nezískate takéto bloky. Ak len preto, po prvé, musíte do bloku pridať farbu a po druhé, ak je prázdny, vložte výška: 100px;. Ostatné atribúty sú podľa vášho želania.

Finálna verzia je:

Na snímke obrazovky vyššie som nechal ostatné oblasti webu, aby bolo jasné, kde sú hranice blokov, pretože ak susedia s okrajom, potom už nie je viditeľný samotný okraj. A na obrázku sú biele okraje vľavo a vpravo iné zarovnanie, ktoré nemá nič spoločné s príslušným príkladom. Opakujem, samotné bloky susedia s okrajmi, ktoré nie sú viditeľné, pretože bloky ich úplne zakrývajú.

Možnosť 2

Existuje mnoho spôsobov, ako vycentrovať bloky. Ale ak potrebujete urobiť zarovnanie inteligentnejšie, musíte si polámať hlavu. Našťastie som prišiel so zaujímavou metódou na nasledujúce účely:

Ako vycentrujem všetky divy, aby bol blok na ďalšom riadku zarovnaný doľava?

Máme nasledujúcu štruktúru:



Blok 1


Blok 2


Blok 3


Blok 4


Blok 5

Píšeme pre nich triedy:


šírka: 90 %;
okraj: 0 auto;
}

Archív-článok (
displej: inline-block;
vertikálne zarovnať: hore;

Šírka: calc(33,3333% - (0,666666666667 * 36px));
okraj: 0 10px 0 11px;
}

Upozorňujeme, že ak zmeníte veľkosť calc, potom je potrebné experimentálne upraviť rozmery marža. V opačnom prípade nebudú bloky vycentrované.

Toto zarovnanie sa musí vykonať okom. Ale ak je na novom riadku menej blokov ako na riadku vyššie, tento osamelý blok bude s ľavá strana. A vyzerá to oveľa krajšie, ako keď sa na ďalšom riadku nachádza jeden jediný blok v strede.

Použitím vyššie uvedenej techniky získame adaptívne rozloženie so všetkými okrajmi rovnakými, ktoré sa nezhorší pri zmene veľkosti obrazovky.

A ak chceme, aby mobilná verzia nemala 3 bloky, ale 2, tak v ccs pre rozlíšenie 768 pixelov rozdelíme bloky inak:

@media obrazovka a (maximálna šírka: 768 pixelov) (
.archive-article (
šírka: calc(47,3333 % - (0,666666666667 * 25px));
okraj: 0 10px 0 20px;
}
}

Dostaňme rovnaké bloky v mobilnej verzii, ale s dvoma blokmi na riadok:

Možnosť 3

Teraz zarovnáme pomocou flex. Môže sa to zdať ako ideálny spôsob levelovania, pretože to v skutočnosti funguje veľmi jednoducho. FLEX však nezvláda úlohu opísanú v možnosti 2. Prinajmenšom som nebol schopný dosiahnuť rovnaké výsledky.

Do ďalšej sekcie:

Pridanie štýlov:

#cssmenu (
okraj: 20px automaticky;
}

#cssmenu ul (
štýl zoznamu: žiadny;
displej: flex;
flex-wrap: zábal;
zdôvodniť-obsah: stred;
}

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

Dostaneme:

V uvedenom príklade:

flex-wrap: zábal;

Presunie bloky na ďalší riadok, ak plnia kontajner. V opačnom prípade sa dostanú ďalej mimo okna prehliadača.

zdôvodniť-obsah: stred;

Obsah blokov zarovnáme na stred.

Možnosť 4

Ďalšia možnosť zarovnania pomocou technológie flex.

Vo vnútri máme kontajner s dvoma blokmi. Tieto 2 bloky potrebujeme na rozdelenie šírky na dve rovnaké strany.


Blok 1

Blok 2

Za týmto účelom napíšeme do štýlov nasledujúce vlastnosti:

Kontajner (
displej: flex;
}

Blokovať (
ohybnosť: 100 %;
}

Možnosť 5

Existuje ďalšia možnosť centrovania blokov, ak je ich počet presne rovnaký. Napríklad: existuje 9 blokov, 3 pre každý riadok. A viete, že to tak vždy zostane. Napríklad vytvárate vstupnú stránku a určite viete, že medzi tieto bloky na stránku nepribudne nič zbytočné.

Máme teda 9 blokov nasledujúceho typu (riadky som neduplikoval 9-krát, ale majte na pamäti, že existuje 9 blokov):



Blok 1


Blok 2


Blok 3

Použite na ne štýly:

Archive-container-for-articles (
šírka: 100 %;
text-align: center;
}

Archív-článok (
šírka: 25 %;
vertikálne zarovnať: hore;
displej: inline-block;
zarovnanie textu: doľava;
}

Archive-article:n-th-child(1),
.archive-article:nth-child(4),
.archive-article:nth-child(7) (
okraj: 20px 0 30px 40px;
}

Archive-article:n-th-child(2),
.archive-article:nth-child(5),
.archive-article:nth-child(8) (
okraj: 20px 40px 30px;
}

Archive-article:n-th-child(3),
.archive-article:nth-child(6),
.archive-article:nth-child(9) (
okraj: 20px 40px 30px 0;
}

Dostaneme aj adaptívne rozloženie. Keď sa obrazovka zmenší, blok, ktorý sa nezmestí, sa presunie do stredu dole

Výhodou tohto typu centrovania je, že medzi blokmi môžete zreteľne a zreteľne robiť zárezy.

Hlavnou nevýhodou je, že do blokov nemožno umiestniť nič. Akýkoľvek prvok:

buď div alebo p alebo niečo iné, sa bude považovať za vnútorný prvok n-té dieťa. Výsledkom bude, že štýly CSS sa naň prekryjú a všetky zarážky vytvorené pomocou okraja posunú bloky inak, ako bolo pôvodne zamýšľané.