Početna » šifriranje » CSS - marginauto; - Kako radi

    CSS - marginauto; - Kako radi

    koristeći margin: auto da centrira blok element horizontalno je dobro poznata tehnika. Ali jeste li se ikad zapitali zašto ili kako radi? Da bismo odgovorili na ovo, prvo moramo pogledati kako margina: auto radi. Također u mješavini je što auto može napraviti na marginama, ako radi za vertikalno centriranje, i nekoliko drugih problema.

    Ali prvo, što čini auto zapravo?

    Definicija auto ovisi o elementi, vrste elemenata i kontekst. Na marginama, auto može značiti jednu od dvije stvari: zauzeti raspoloživi prostor ili 0 px. Ove dvije će definiraju različite izglede za element.

    "auto" Uzimajući raspoloživi prostor

    To je najčešće korištenje margine auto često se susrećemo. Dodjeljivanjem auto na lijevu i desnu marginu elementa jednako zauzimaju raspoloživi horizontalni prostor u spremniku elementa - i tako se element centrira.

    Međutim, to će raditi samo za horizontalne margine (više o zašto kasnije), i to također neće raditi s plovkom i inline elementi i sam po sebi, također ne može raditi u apsolutan i fiksno postavljeni elementi (međutim vidjet ćemo kako to raditi).

    Promašaj ploviti zauzimanjem raspoloživog prostora

    Od auto u desnoj i lijevoj margini podjednako zauzimaju "raspoloživi" prostor, što mislite da će se dogoditi kada vrijednost postane auto daje se samo jednom od njih?

    Lijeva ili desna margina s auto će zauzeti sve "raspoložive" prostore čineći element izgleda kao da je ispran u desno ili lijevo.

    “auto” Izračunato na 0px

    Kao što je već spomenuto, auto neće raditi u floated, inline i absolutnim elementima. Svi ti elementi već imaju odlučili su se za njihov raspored, tako da nema koristi od korištenja auto za margine i očekujući da se sredi baš tako.

    To će pobijediti početnu svrhu korištenja nečega sličnog plutati. Stoga auto će u tim elementima imati vrijednost 0px.

    auto Također neće raditi na tipičnom elementu bloka ako nema širinu. Svi primjeri koje sam do sada pokazao imaju širinu.

    Širina vrijednosti auto će imati 0px margine. Širina elementa bloka obično pokriva spremnik kada je auto ili 100% i stoga margina auto bit će izračunato na 0px u tom slučaju.

    Što se događa s vertikalnim marginama s vrijednošću auto?

    auto u gornjoj i donjoj margini uvijek se izračunava na 0px (osim apsolutnih elemenata). Specifikacija W3C to kaže ovako:

    “Ako “margin-top” ili “margin dna” je “auto”, njihova korištena vrijednost je 0 "

    Zašto, pa to je do sada, misterija. To bi moglo biti zbog tipičnog vertikalnog protoka stranica, gdje Veličina stranice se povećava po visini. Dakle, centriranje elementa okomito u njegov spremnik neće ga učiniti centriranim, u odnosu na samu stranicu, za razliku od kad se radi horizontalno (u većini slučajeva).

    I možda je to zbog istog razloga, odlučili dodati izuzetak za apsolutne elemente koji se mogu centrirati vertikalno duž cijele visine stranice.

    To bi moglo biti i zbog efekta kolapsa margine (kolaps susjednih elemenata” margine) što je još jedna iznimka za vertikalne margine.

    Međutim, čini se da je potonje malo vjerojatan slučaj - budući da elementi koji ne sruše njihove margine - kao što su Floats i elementi s prelijevanje osim vidljiv, i dalje dodjeljuju 0px okomite margine za auto.

    Centriranje apsolutno pozicioniranih elemenata

    Budući da postoji iznimka za apsolutno pozicionirane elemente, mi”ću koristiti auto vrijednost centrirajte okomito i vodoravno. Ali prije toga, moramo saznati kada će margin: auto zapravo rade kao što želimo u apsolutno pozicioniranom elementu.

    Ovdje dolazi još jedna W3C specifikacija:

    "Ako su sva tri." “lijevo”, “širina”, i “pravo” su “auto”: Prvo postavite bilo koji “auto” vrijednosti za “margin-left” i “margin-right” do 0… "

    "Ako ništa od tri nije." “auto”: Ako oboje “margin-left” i “margin-right” su “auto”, riješiti jednadžbu pod dodatnim ograničenjem da dvije margine dobiju jednake vrijednosti "

    To uglavnom govori vodoravan auto margine uhvatiti jednake prostore, vrijednosti za lijevo, širina i pravo ne bi smjelo biti auto , njihovu zadanu vrijednost. Dakle, sve što trebamo učiniti je dati im neke vrijednosti u apsolutno pozicioniranom elementu. lijevo i pravo trebao je jednake vrijednosti za savršeno centriranje.

    Specifikacija također spominje nešto slično za vertikalne margine.

    “Ako sve tri “vrh”, “visina”, i “dno” su automatski, postavljeni “vrh” u statičku poziciju ... ”

    “Ako nitko od njih nije “auto”: Ako oboje “margin-top” i “margin dna” su “auto”, riješiti jednadžbu pod dodatnim ograničenjem da dvije granice dobivaju jednake vrijednosti ... ”

    Dakle, za apsolutni element biti centrirano okomito, svoj vrh, visina, i dno vrijednosti ne bi smjele biti auto.

    Kombinirajući sve ovo, to je ono što mi”dobit ću:

    Zaključak

    Ako želite ikada isprazniti element na stranici desno ili lijevo, a da ga ne omotate sljedećim elementima (kao što se događa s float-om), zapamtite da postoji mogućnost upotrebe auto za margine.

    Pretvaranje elementa u apsolutni samo tako da se može centrirati vertikalno, možda nije dobra ideja. Postoje i druge opcije kao što su flexbox i CSS transformacija koje su prikladnije za njih.