Pagina principala » Codificare » CSS - marginauto; - Cum functioneaza

    CSS - marginauto; - Cum functioneaza

    Utilizarea margin: auto pentru a centra un element de bloc orizontal este o tehnică bine cunoscută. Dar v-ați întrebat vreodată de ce sau cum funcționează? Pentru a răspunde la aceasta, trebuie mai întâi să aruncăm o privire la modul în care funcționează automat: De asemenea, în amestec este ceea ce auto poate face în margini, dacă funcționează pentru centrarea verticală și câteva alte probleme.

    Dar mai intai, ce face auto de fapt?

    Definiția auto variază cu element, elemente de elemente și context. În margini, auto poate însemna unul din două lucruri: ocupați spațiul disponibil sau 0 px. Aceste două vor definiți structuri diferite pentru un element.

    "auto" preluarea spațiului disponibil

    Aceasta este cea mai obișnuită utilizare a marjei auto ne întâlnim de multe ori. Prin alocare auto la marginea stângă și dreaptă a unui element, aceștia preia spațiul orizontal disponibil în containerul elementului în mod egal - și astfel elementul devine centrat.

    Cu toate acestea, aceasta va funcționa doar pentru marjele orizontale (mai mult pe De ce mai târziu), și de asemenea nu va funcționa cu plutitor și elemente inline și prin ea însăși, și ea nu poate funcționa în absolut și elemente fixe fixate (vom vedea totuși cum să-i facem pe aceștia să lucreze).

    Faux Float prin preluarea spațiului disponibil

    De cand auto atât în ​​marginea dreaptă cât și în cea din stânga ocupă spațiul "disponibil" în mod egal, ceea ce credeți că se va întâmpla atunci când valoarea auto este acordat doar unuia dintre aceștia?

    O margine stanga sau dreapta cu auto va ocupa tot spatiul "disponibil", ceea ce face ca elementul sa arate ca a fost spalat dreapta sau stanga.

    “auto” Compusă la 0 px

    Așa cum sa menționat mai înainte, auto nu vor funcționa în elemente plutitoare, inline și absolute. Toate aceste elemente au deja au hotărât asupra aspectului lor, astfel încât nu există nici o utilizare în utilizarea auto pentru marjele și așteptându-i să se centreze așa.

    Acest lucru va învinge scopul inițial de a folosi ceva de genul pluti. prin urmare auto va avea o valoare de 0px în aceste elemente.

    auto nu va funcționa, de asemenea, pe un element tipic de bloc dacă nu are o lățime. Toate exemplele pe care le-am arătat până acum au lățimi.

    O lățime de valoare auto vom avea 0px marjele. O lățime a elementului bloc acoperă, în mod obișnuit, recipientul său atunci când este auto sau 100% și, prin urmare, o marjă auto va fi calculat la 0px in acest caz.

    Ce se întâmplă cu marginile verticale cu valoarea auto?

    auto în ambele margini de sus și de jos este întotdeauna calculată la 0px (cu excepția elementelor absolute). Specia W3C spune așa:

    “Dacă “margin-top” sau “margin-bottom” este “auto”, valoarea lor utilizată este 0 "

    De ce, până acum, este un mister. Ar putea fi din cauza fluxului tipic al paginii verticale, unde dimensiunea paginii crește înălțime. Deci, centrarea unui element pe verticală în containerul său nu va face să pară centrat, relativ la pagina însăși, spre deosebire de momentul în care se face orizontal (în majoritatea cazurilor).

    Și poate din acest motiv au decis să adauge o excepție pentru elementele absolute care pot fi centrate vertical pe toată înălțimea paginii.

    Ar putea fi și din cauza efectului de colaps al marjei (o colapsare a elementelor adiacente” marje), care reprezintă o altă excepție pentru marjele verticale.

    Cu toate acestea, acesta din urmă pare a fi un caz improbabil - deoarece elementele care nu își prăbușesc marjele - cum ar fi plutitele și elementele cu revărsare în afară de vizibil, încă atribuiți marjele verticale de 0px pentru auto.

    Centrarea elementelor poziționate în mod absolut

    Deoarece se întâmplă să existe o excepție pentru elementele absolut poziționate, noi”Voi folosi auto pentru a centra unul vertical și orizontal. Dar înainte de asta, trebuie să aflăm când va fi margin: auto lucrează de fapt așa cum dorim să fie într-un element absolut poziționat.

    Aici intră și un alt spec. W3C:

    "Dacă toți trei “stânga”, “lăţime”, și “dreapta” sunteți “auto”: Mai întâi setați orice “auto” valori pentru “-Marginea din stânga” și “margin-dreapta” la 0 ... "

    "Dacă niciuna dintre cele trei nu este “auto”: Dacă ambele “-Marginea din stânga” și “margin-dreapta” sunteți “auto”, rezolva ecuația sub constrângerea suplimentară că cele două marje obțin valori egale "

    Asta spune destul de mult pentru asta orizontală auto marjele să profite de spații egale, valori pentru stânga, lăţime și dreapta nu ar trebui să fie auto , valoarea lor implicită. Deci, tot ce trebuie să facem este să le oferim o valoare într-un element absolut poziționat. stânga și dreapta ar trebui sa aiba valori egale pentru centrarea perfectă.

    Specificația menționează, de asemenea, ceva similar pentru marjele verticale.

    “Dacă toate trei “top”, “înălţime”, și “fund” sunt setate automat “top” la poziția statică ... ”

    “Dacă niciuna dintre cele trei nu este “auto”: Dacă ambele “margin-top” și “margin-bottom” sunteți “auto”, rezolva ecuația sub constrângerea suplimentară că cele două marje obțin valori egale ... ”

    Prin urmare, pentru ca un element absolut să fie centrat pe verticală, este top, înălţime, și fund valorile nu ar trebui să fie auto.

    Acum combinând toate acestea, asta este ceea ce noi”voi primi:

    Concluzie

    Dacă doriți vreodată să ștergeți un element de pe pagina dvs. spre dreapta sau spre stânga fără ca următoarele elemente să îl înfășoare (cum ar fi ce se întâmplă cu float), amintiți-vă că există opțiunea de a utiliza auto pentru marje.

    Conversia unui element la absolut doar pentru a putea fi centrat pe verticală poate să nu fie o idee grozavă. Există și alte opțiuni, cum ar fi transformarea flexbox și CSS, care sunt mai potrivite pentru acestea.