Startseite » Codierung » CSS - Marginauto; - Wie es funktioniert

    CSS - Marginauto; - Wie es funktioniert

    Verwenden Marge: auto ein Blockelement horizontal zu zentrieren, ist eine bekannte Technik. Aber haben Sie sich jemals gefragt, warum oder wie es funktioniert? Um dies zu beantworten, müssen wir uns zunächst die Funktionsweise von margin: auto ansehen. Auch in der Mischung ist was Auto kann in Rändern tun, wenn es für vertikale Zentrierung und einige andere Probleme funktioniert.

    Aber zuerst, was macht Auto eigentlich tun?

    Die Definition von Auto variiert mit Elemente, Elementtypen und Kontext. In Rändern, Auto kann eines von zwei Dingen bedeuten: Nehmen Sie den verfügbaren Platz oder 0 px in Anspruch. Diese beiden werden Definieren Sie verschiedene Layouts für ein Element.

    "auto" Den verfügbaren Speicherplatz belegen

    Dies ist die am häufigsten verwendete Margin Auto Wir kommen oft vor. Durch Zuweisung Auto Am linken und rechten Rand eines Elements nehmen sie den verfügbaren horizontalen Platz im Elementcontainer gleichermaßen ein. Dadurch wird das Element zentriert.

    Dies funktioniert jedoch nur für horizontale Ränder (mehr für den Warum später) und auch funktioniert nicht mit Float und Inline-Elemente und an sich auch kann nicht arbeiten im absolut und fest positionierte Elemente (wir werden jedoch sehen, wie man diese Arbeit machen kann).

    Faux Float durch den verfügbaren Platz

    Schon seit Auto Sowohl im rechten als auch im linken Rand beansprucht der "verfügbare" Raum gleich viel, was wird Ihrer Meinung nach passieren, wenn der Wert liegt Auto wird nur einer von denen gegeben?

    Ein linker oder rechter Rand mit Auto nimmt den gesamten "verfügbaren Platz" ein, sodass das Element so aussieht, als sei es nach rechts oder links gespült worden.

    “Auto” Berechnet zu 0px

    Wie schon erwähnt, Auto funktioniert nicht in Floated-, Inline- und absoluten Elementen. Alle diese Elemente haben bereits entschied sich für ihre Layouts, es ist also sinnlos zu gebrauchen Auto für die Margen und erwarten, dass es genau so zentriert wird.

    Dadurch wird der anfängliche Zweck der Verwendung von etwas besiegt schweben. Daher Auto hat in diesen Elementen einen Wert von 0px.

    Auto funktioniert auch nicht mit einem typischen Blockelement, wenn es keine Breite hat. Alle Beispiele, die ich Ihnen bis jetzt gezeigt habe, haben Breiten.

    Eine Wertbreite Auto werde haben 0px Ränder. Die Breite eines Blockelements deckt in der Regel die Breite des Containers ab Auto oder 100% und damit eine Marge Auto wird zu berechnet 0px in einem solchen Fall.

    Was passiert mit vertikalen Rändern mit dem Wert Auto?

    Auto Sowohl in den oberen als auch in den unteren Rändern wird immer 0px berechnet (außer für absolute Elemente). W3C-Spezifikation sagt es so:

    “Ob “Rand oben” oder “Rand unten” ist “Auto”, Ihr benutzter Wert ist 0 "

    Das Warum, nun, das ist bis jetzt ein Rätsel. Es könnte an dem typischen vertikalen Seitenfluss liegen, wo Die Seitengröße nimmt in der Höhe zu. Wenn Sie also ein Element vertikal in seinem Container zentrieren, wird es nicht zentriert, relativ zur Seite selbst, anders als bei horizontaler Ausrichtung (in den meisten Fällen)..

    Und vielleicht ist es aus demselben Grund, dass sie beschlossen haben, eine Ausnahme für absolute Elemente hinzuzufügen, die vertikal über die gesamte Seitenhöhe zentriert werden können.

    Möglicherweise liegt dies auch am Randeinsturzeffekt (Zusammenbruch benachbarter Elemente)” Margen), eine weitere Ausnahme für die vertikalen Margen.

    Letzteres scheint jedoch ein unwahrscheinlicher Fall zu sein - da Elemente, die ihre Ränder nicht zusammenbrechen - wie Floats und Elemente mit Überlauf außer sichtbar, noch 0px vertikale Ränder für zuweisen Auto.

    Zentrieren absolut positionierter Elemente

    Da es für absolut positionierte Elemente eine Ausnahme gibt, haben wir”ll verwenden Auto Wert, um eine vertikal und horizontal zu zentrieren. Aber vorher müssen wir herausfinden, wann der Wille ist Marge: auto eigentlich so arbeiten, wie wir es wollen, in einem absolut positionierten Element.

    Hier kommt eine weitere W3C-Spezifikation ins Spiel:

    "Wenn alle drei von “links”, “Breite”, und “Recht” sind “Auto”: Zuerst ein beliebiges einstellen “Auto” Werte für “Rand links” und “Rand rechts” bis 0… "

    "Wenn keiner der drei ist “Auto”Wenn beide “Rand links” und “Rand rechts” sind “Auto”, lösen Sie die Gleichung unter der zusätzlichen Bedingung, dass die beiden Ränder gleiche Werte erhalten "

    Das sagt so ziemlich das aus horizontal Auto Ränder gleiche Räume zu ergreifen, die Werte für links, Breite und Recht sollte nicht sein Auto , ihr Standardwert. Alles, was wir tun müssen, ist, ihnen in einem absolut positionierten Element einen Wert zu geben. links und Recht sollte haben gleiche Werte für perfekte Zentrierung.

    Die Spezifikation erwähnt auch etwas ähnliches für vertikale Ränder.

    “Wenn alle drei von “oben”, “Höhe”, und “Unterseite” sind automatisch eingestellt “oben” in die statische Position… ”

    “Wenn keiner der drei ist “Auto”Wenn beide “Rand oben” und “Rand unten” sind “Auto”, lösen Sie die Gleichung unter der zusätzlichen Bedingung, dass die beiden Ränder gleiche Werte erhalten… ”

    Also für ein absolutes Element vertikal zentriert, es ist oben, Höhe, und Unterseite Werte sollten nicht sein Auto.

    Jetzt, indem wir all dies kombinieren, sind wir es”Verstanden:

    Fazit

    Wenn Sie ein Element auf Ihrer Seite nach rechts oder links leeren möchten, ohne dass die folgenden Elemente es einwickeln (wie bei Float), sollten Sie daran denken, dass Sie die Option verwenden können Auto für Margen.

    Das Konvertieren eines Elements in ein absolutes Element, damit es vertikal zentriert werden kann, ist möglicherweise keine gute Idee. Es gibt andere Optionen wie Flexbox und CSS-Transformation, die für diese Optionen besser geeignet sind.