Úvodná » kódovanie » CSS - marginauto; - Ako to funguje

    CSS - marginauto; - Ako to funguje

    Použitím margin: auto na centralizáciu blokového prvku horizontálne je dobre známa technika. Ale premýšľali ste niekedy, prečo alebo ako to funguje? Ak chcete odpovedať na túto otázku, najskôr sa musíme pozrieť na to, ako funguje automatická práca: Aj v zmesi je čo auto môže to robiť v okrajoch, ak pracuje pre vertikálne centrovanie a niekoľko ďalších otázok.

    Ale najprv, čo robí auto vlastne robiť?

    Definícia auto sa mení s prvky, prvkov a kontext. V okrajoch, auto môže znamenať jednu z dvoch vecí: zaberať dostupný priestor alebo 0 px. Tieto dve budú definovať rôzne rozloženia prvku.

    "auto" Zachytávanie dostupného priestoru

    Toto je najbežnejšie používanie marže auto narazíme často. Priradením auto do ľavého a pravého okraja prvku, zaberajú voľný horizontálny priestor v kontajneri prvku rovnako - a tak sa prvok dostane do stredu.

    Bude to však fungovať len pre horizontálne rozpätia (viac na prečo neskôr) a tiež nebude fungovať s floated a inline prvky a sama o sebe tiež nemôže fungovať v absolútny a pevne umiestnené prvky (budeme však vidieť, ako tieto práce urobiť).

    Faux Float tým, že zdvihne dostupný priestor

    od tej doby auto v pravom aj ľavom okraji zaberajú rovnako "dostupný" priestor, čo si myslíte, že sa stane, keď hodnota auto je daná iba jednému z nich?

    Ľavý alebo pravý okraj s auto bude zaberať všetok "dostupný" priestor, čím bude prvok vyzerať tak, ako by bol prepláchnutý vpravo alebo vľavo.

    “auto” Vypočítané na 0 px

    Ako už bolo uvedené, auto nebudú pracovať s pohyblivými, inline a absolútnymi prvkami. Všetky tieto prvky už majú rozhodli o ich usporiadaní, takže pri používaní nie je žiadny problém auto pre okraje a očakáva, že sa bude sústrediť práve tak.

    To porazí pôvodný účel použitia niečoho podobného plavák. z toho dôvodu auto bude mať v týchto prvkoch hodnotu 0 px.

    auto nebude fungovať aj na typickom prvku bloku, ak nemá šírku. Všetky príklady, ktoré som vám ukázal, majú šírky.

    Šírka hodnoty auto bude mať 0px okraje. Šírka blokového prvku typicky pokrýva jeho kontajner, ak je auto alebo 100% a teda aj marža auto bude vypočítané na 0px v takom prípade.

    Čo sa stane s vertikálnymi okrajmi s hodnotou auto?

    auto v oboch horných a dolných okrajoch je vždy vypočítaný na 0px (s výnimkou absolútnych prvkov). Špecifikácia W3C hovorí takto:

    “ak “margin-top” alebo “margin-bottom” je “auto”, ich použitá hodnota je 0 "

    Prečo, aj tak ďaleko, je to tajomstvo. Môže to byť kvôli typickému vertikálnemu toku stránky, kde veľkosť stránky sa zvyšuje na výšku. Takže centrovanie prvku vertikálne vo svojom kontajneri nebude znamenať, že sa zdá byť centrovaný vzhľadom na samotnú stránku, na rozdiel od toho, kedy sa vykonáva horizontálne (vo väčšine prípadov).

    A možno z toho istého dôvodu sa rozhodli pridať výnimku pre absolútne prvky, ktoré môžu byť vertikálne centrované po celej výške stránky.

    Mohlo by to tiež byť dôsledkom efektu kolapsu okraja (zrútenie priľahlých prvkov” marže), čo je ďalšia výnimka pre vertikálne rozpätia.

    Zdá sa však, že tento prípad je nepravdepodobný - pretože prvky, ktoré nezhŕňajú svoje okraje - ako napríklad plaváky a prvky s pretekať iný ako viditeľný, stále priraďujte 0px vertikálne okraje pre auto.

    Centrovanie absolútne umiestnených prvkov

    Pretože sa vyskytuje výnimka pre absolútne umiestnené prvky, my”bude používať auto hodnotu do stredu jeden vertikálne a horizontálne. Ale predtým, musíme zistiť, kedy bude margin: auto skutočne pracujeme, ako to chceme, v absolútne umiestnenom prvku.

    Toto je miesto, kde prichádza ďalšia špecifikácia W3C:

    "Ak všetky tri “ľavý”, “šírka”, a “správny” sú “auto”: Najprv nastavte akékoľvek “auto” hodnoty pre “margin-left” a “margin-right” na 0 ... "

    "Ak nie je žiadny z troch “auto”: Ak oboje “margin-left” a “margin-right” sú “auto”, vyriešiť rovnicu pod dodatočným obmedzením, že oba okraje majú rovnaké hodnoty "

    To skoro hovorí, že pre horizontálne auto okraje zaistiť rovnaké priestory, hodnoty pre ľavý, šírka a správny by nemal byť auto , ich predvolenú hodnotu. Takže všetko, čo musíme urobiť, je dať im nejakú hodnotu v absolútne umiestnenom prvku. ľavý a správny by mal mať rovnaké hodnoty pre dokonalé centrovanie.

    Špecifikácia tiež uvádza niečo podobné pre vertikálne okraje.

    “Ak sú všetky tri “top”, “výška”, a “dno” sú nastavené automaticky “top” do statickej polohy ... ”

    “Ak nie je žiadny z troch “auto”: Ak oboje “margin-top” a “margin-bottom” sú “auto”, vyriešiť rovnicu pod zvláštnym obmedzením, že oba okraje majú rovnaké hodnoty ... ”

    Preto je absolútny prvok vertikálne, jeho top, výška, a dno hodnoty by nemali byť auto.

    Teraz tým, že sme všetko zjednotili, to sme my”dostanete:

    záver

    Ak ste niekedy chceli prepláchnuť prvok na vašej strane doprava alebo doľava bez toho, aby sa obalili nasledujúce prvky (ako napríklad float), nezabudnite, že máte možnosť použiť auto pre okraje.

    Prevod prvku na absolútne, aby sa mohol nachádzať vertikálne, nemusí byť skvelý nápad. Existujú aj ďalšie možnosti, ako je flexbox a CSS transformácia, ktoré sú pre nich vhodné.