de.hideout-lastation.com
Paradies Für Designer Und Entwickler


CSS - margin: auto - Wie es funktioniert

Verwenden von margin:auto um ein Blockelement horizontal zu zentrieren, ist eine wohlbekannte Technik. Aber haben Sie sich jemals gefragt, warum oder wie es funktioniert? Um dies zu beantworten, müssen wir uns zuerst ansehen, wie margin: auto funktioniert. In der Mischung ist auch, was auto in den Rändern möglicherweise tun kann, wenn es für vertikales Zentrieren und einige andere Probleme arbeitet.

Aber zuerst, was macht auto eigentlich?

Die Definition von auto variiert mit Elementen, Elementtypen und Kontext . In den Rändern kann auto eine von zwei Dingen bedeuten: den verfügbaren Platz oder 0 px einnehmen. Diese beiden definieren unterschiedliche Layouts für ein Element .

"auto" Aufnahme des verfügbaren Speicherplatzes

Dies ist die häufigste Verwendung von Margin- auto wir oft stoßen. Wenn Sie auto dem linken und rechten Rand eines Elements zuweisen, nehmen sie den verfügbaren horizontalen Abstand im Container des Elements gleichmäßig in Anspruch - und das Element wird zentriert.

Dies funktioniert jedoch nur für horizontale Ränder (mehr über das Warum später), und es wird auch nicht mit floated und inline Elementen funktionieren und es kann auch nicht in absoluten und fest positionierten Elementen arbeiten (wir werden jedoch sehen wie mache diese Arbeit).

Faux Float durch Aufnahme verfügbaren Speicherplatzes

Da auto sowohl am rechten als auch am linken Rand gleichmäßig den "verfügbaren" Platz einnimmt, was wird Ihrer Meinung nach passieren, wenn der Wert auto nur einem dieser Werte auto wird?

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

"Auto" Berechnet auf 0px

Wie bereits erwähnt, funktioniert auto nicht in Floated-, Inline- und Absolute-Elementen. Alle diese Elemente haben sich bereits für ihre Layouts entschieden, also ist es nicht sinnvoll, auto für die Ränder zu verwenden und zu erwarten, dass es genau so zentriert wird.

Das wird den ursprünglichen Zweck, etwas wie float verwenden, float . Daher hat auto in diesen Elementen einen Wert von 0px.

auto funktioniert auch nicht auf einem typischen Blockelement, wenn es keine Breite hat. Alle Beispiele, die ich dir bisher gezeigt habe, haben Breiten.

Eine Breite von Wert auto wird 0px Ränder haben . Die Breite eines Blockelements deckt normalerweise die 0px seines Containers ab, wenn es auto oder 100% und daher wird ein Rand auto in diesem Fall auf 0px berechnet.

Was passiert mit dem auto Wert für vertikale Ränder?

auto am oberen und unteren Rand wird immer auf 0px (außer für absolute Elemente) berechnet. W3C spec sagt es so:

"Wenn" margin-top "oder" margin-bottom "" auto "ist, ist ihr benutzter Wert 0"

Das Warum, nun, das ist so weit, ein Geheimnis. Dies könnte an dem typischen vertikalen Seitenfluss liegen, bei dem die Seitengröße in der Höhe zunimmt . Wenn Sie also ein Element vertikal in seinem Container zentrieren, wird es nicht zentriert erscheinen, relativ zur Seite selbst, anders als wenn es horizontal gemacht wird (in den meisten Fällen).

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

Es könnte auch wegen des Margenkollaps-Effekts (ein Kollaps von benachbarten Margen) sein, was eine weitere Ausnahme für die vertikalen Ränder ist.

Letzteres scheint jedoch ein unwahrscheinlicher Fall zu sein - da Elemente, die ihre Ränder nicht reduzieren - wie Floats und Elemente mit overflow nicht visible - immer noch 0px vertikale Ränder für auto zuweisen.

Zentrieren von absolut positionierten Elementen

Da es für absolut positionierte Elemente eine Ausnahme gibt, verwenden wir den auto Wert, um einen vertikal und horizontal zu zentrieren. Aber vorher müssen wir herausfinden, wann margin:auto tatsächlich so funktioniert, wie wir es in einem absolut positionierten Element wollen.

Hier kommt eine andere W3C-Spezifikation ins Spiel:

"Wenn alle drei von" links ", " Breite "und" rechts "" automatisch "sind: Setzen Sie zunächst alle" auto "-Werte für" margin-left "und" margin-right "auf 0 ... "

"Wenn keines der drei" auto "ist: Wenn sowohl" margin-left "als auch" margin-right "" auto "sind, löse die Gleichung unter der zusätzlichen Einschränkung, dass die zwei Ränder gleiche Werte erhalten.

Das besagt ziemlich genau, dass für horizontale auto Ränder, um gleiche Abstände zu belegen, die Werte für left, width und right nicht auto, ihr Standardwert. Wir müssen ihnen nur einen Wert in einem absolut positionierten Element geben. left und right sollten gleiche Werte für eine perfekte Zentrierung haben .

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

"Wenn alle drei von" oben ", " Höhe "und" unten "automatisch sind, setze" oben "auf die statische Position ..."

"Wenn keine der drei" auto "ist: Wenn sowohl" margin-top "als auch" margin-bottom "" auto "sind, löse die Gleichung unter der zusätzlichen Einschränkung, dass die zwei Ränder gleiche Werte erhalten ..."

Damit ein absolutes Element vertikal zentriert werden kann, sollten die Werte für top, height und bottom nicht auto .

Jetzt, indem wir all das kombinieren, bekommen wir Folgendes:

Fazit

Wenn Sie ein Element auf Ihrer Seite nach rechts oder links leerteln möchten, ohne dass die folgenden Elemente es umbrechen (wie es bei float der Fall ist), denken Sie daran, dass es die Option auto für Ränder gibt.

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

5 Internet Acts, die deinen Glauben in der Menschheit wiederherstellen werden

5 Internet Acts, die deinen Glauben in der Menschheit wiederherstellen werden

Müde von den schlechten Vibes, die du das ganze Jahr über bekommen hast? Wenn es sich anfühlt, als ob dein friedliches Leben mit entmutigenden Nachrichten aus seinem Kern entwurzelt wird, mach eine Pause. Stelle den Glauben mit Wohlfühlgeschichten wieder her und finde Trost darin zu wissen, dass es da draußen eine Menge Gutes gibt, weil wir alle tief in den Himmel gehen, auch wenn einige von uns nicht daran glauben.Zum

(Tech- und Design-Tipps)

Sketch App Sources - Die einzige Website, die Sie für Sketch Freebies & Tutorials benötigen

Sketch App Sources - Die einzige Website, die Sie für Sketch Freebies & Tutorials benötigen

Es ist nicht zu leugnen, dass Sketch sich wie ein Lauffeuer verfangen hat. Es ist viel billiger als die gesamte Adobe-Software, und es wurde speziell für digitales Design entwickelt, was es zur perfekten Wahl für Mobile- und Webdesigner macht.Wenn Sie Sketch neu sind, werden Sie Sketch App Sources lieben.

(Tech- und Design-Tipps)