Główna » Kodowanie » CSS - marginauto; - Jak to działa

    CSS - marginauto; - Jak to działa

    Za pomocą margin: auto wyśrodkowanie elementu blokowego poziomo jest dobrze znaną techniką. Ale czy kiedykolwiek zastanawiałeś się, dlaczego lub jak działa? Aby odpowiedzieć na to pytanie, najpierw musimy przyjrzeć się, jak margines: działa automatycznie. Również w miksie jest co automatyczny może to robić na marginesach, jeśli działa dla centrowania pionowego, i kilka innych problemów.

    Ale najpierw, co robi automatyczny właściwie to zrobić?

    Definicja automatyczny zależy od elementy, typy elementów i kontekst. W marginesach, automatyczny może oznaczać jedną z dwóch rzeczy: zająć dostępną przestrzeń lub 0 px. Te dwie woli zdefiniuj różne układy dla elementu.

    „auto” zajmowanie dostępnej przestrzeni

    Jest to najpowszechniejsze wykorzystanie marginesu automatyczny spotykamy się często. Przez przypisanie automatyczny na lewy i prawy margines elementu, równomiernie zajmują dostępną przestrzeń poziomą w pojemniku elementu - i w ten sposób element jest wyśrodkowany.

    Jednak będzie to działać tylko dla marginesów poziomych (więcej na temat czemu później), a także nie będzie działać z floatem i elementy inline i sam z siebie nie mogę pracować w absolutny i naprawione elementy pozycjonowane (zobaczymy jednak, jak to zrobić).

    Faux Float, zabierając dostępną przestrzeń

    Od automatyczny zarówno na prawym, jak i lewym marginesie równomiernie zajmują „dostępną” przestrzeń automatyczny jest przyznawany tylko jednemu z nich?

    Lewy lub prawy margines przy pomocy automatyczny zajmie całą „dostępną” przestrzeń, dzięki czemu element będzie wyglądał tak, jakby został opróżniony w prawo lub w lewo.

    “automatyczny” Obliczono na 0px

    Jak wspomniano wcześniej, automatyczny nie będzie działać w elementach pływających, liniowych i absolutnych. Wszystkie te elementy już mają zdecydowałem się na ich układy, więc nie ma sensu używać automatyczny dla marginesów i oczekując, że będzie tak wyśrodkowany.

    To pokona początkowy cel użycia czegoś takiego pływak. Stąd automatyczny będzie miał wartość 0px w tych elementach.

    automatyczny nie działa również na typowym elemencie bloku, jeśli nie ma szerokości. Wszystkie przykłady, które do tej pory pokazałem, mają szerokość.

    Szerokość wartości automatyczny będzie miał 0px marże. Szerokość elementu bloku zazwyczaj pokrywa jego pojemnik, gdy jest automatyczny lub 100% a zatem margines automatyczny zostanie obliczony do 0px w takim przypadku.

    Co dzieje się z pionowymi marginesami z wartością automatyczny?

    automatyczny w obu górnych i dolnych marginesach jest zawsze obliczany do 0px (z wyjątkiem elementów absolutnych). Specyfikacja W3C mówi tak:

    “Jeśli “margines górny” lub “margines dolny” jest “automatyczny”, ich wartość wynosi 0 ”

    Dlaczego, cóż, jak dotąd, tajemnica. Może to wynikać z typowego przepływu strony w pionie, gdzie rozmiar strony zwiększa się w zależności od wysokości. Centrowanie elementu pionowo w kontenerze nie spowoduje, że będzie on wyśrodkowany względem samej strony, w przeciwieństwie do tego, gdy jest wykonywany poziomo (w większości przypadków).

    A może z tego samego powodu postanowili dodać wyjątek dla elementów absolutnych, które można wyśrodkować w pionie na całej wysokości strony.

    Może to również wynikać z efektu zapadania się marginesu (załamania sąsiednich elementów” marginesy), co stanowi kolejny wyjątek dla marginesów pionowych.

    Wydaje się jednak, że ten ostatni przypadek jest mało prawdopodobny - ponieważ elementy, które nie zawalają swoich marginesów - jak Floats i elementy z przelewowy inny niż widoczny, nadal przypisuj marginesy pionowe 0px dla automatyczny.

    Centrowanie absolutnie pozycjonowanych elementów

    Ponieważ zdarza się wyjątek dla elementów pozycjonowanych absolutnie, my”Będę używać automatyczny wartość do środka w pionie i poziomie. Ale zanim to nastąpi, musimy się dowiedzieć, kiedy to nastąpi margin: auto faktycznie działa tak, jak chcemy, w elemencie pozycjonowanym absolutnie.

    W tym miejscu pojawia się kolejna specyfikacja W3C:

    „Jeśli wszystkie trzy “lewo”, “szerokość”, i “dobrze” są “automatyczny”: Najpierw ustaw dowolny “automatyczny” wartości dla “margines lewy” i “margines prawy” do 0…

    „Jeśli żaden z tych trzech nie jest “automatyczny”: Jeśli oba “margines lewy” i “margines prawy” są “automatyczny”, rozwiązać równanie pod dodatkowym ograniczeniem, że dwa marginesy otrzymują równe wartości ”

    To bardzo mówi za poziomy automatyczny marże przejąć równe przestrzenie wartości dla lewo, szerokość i dobrze nie powinno być automatyczny , ich wartość domyślna. Wszystko, co musimy zrobić, to nadać im pewną wartość w elemencie pozycjonowanym absolutnie. lewo i dobrze powinien równe wartości dla idealnego centrowania.

    Specyfikacja wspomina również coś podobnego dla marginesów pionowych.

    “Jeśli wszystkie trzy “Top”, “wysokość”, i “Dolny” są automatyczne, ustawione “Top” do pozycji statycznej… ”

    “Jeśli żaden z nich nie jest “automatyczny”: Jeśli oba “margines górny” i “margines dolny” są “automatyczny”, rozwiązać równanie pod dodatkowym ograniczeniem, że oba marginesy uzyskują równe wartości… ”

    Stąd, aby był to element absolutny wyśrodkowany pionowo, jego Top, wysokość, i Dolny wartości nie powinny być automatyczny.

    Łącząc to wszystko, to właśnie my”Otrzymam:

    Wniosek

    Jeśli kiedykolwiek chcesz opróżnić element na swojej stronie w prawo lub w lewo bez zawijania następujących elementów (np. Co dzieje się z floatem), pamiętaj, że istnieje możliwość użycia automatyczny na marginesy.

    Konwersja elementu na absolutny, aby można go było wyśrodkować w pionie, może nie być dobrym pomysłem. Istnieją inne opcje, takie jak flexbox i transformacja CSS, które są bardziej odpowiednie dla tych.