Über einen Beitrag von Manuel Matuzović, der wiederum auf einer Demo von Temani Afif basiert.
.wrapper {
margin-inline: max(0px, ((100% - 64rem) / 2));
}
Es wäre Ihnen dienlich, Manuel's Aufschlüsselung aller hier stattfindenden Vorgänge zu lesen, aber im Grunde genommen läuft es auf das Äquivalent dieser längeren Syntax hinaus
.wrapper {
max-width: 64rem;
margin: 0 auto;
width: 100%;
}
…wobei
- max() akzeptiert eine durch Kommas getrennte Liste von CSS-numerischen Werten, wobei der angewandte Wert der größte (oder wie MDN es ausdrückt, der „positivste“) Wert in der Menge ist.
0pxist der erste Wert in der Menge und stellt sicher, dass der kleinste Wert immer größer als null Pixel ist.(100% - 64rem)ist der zweite Wert in der Menge, aber er wird als Berechnung ausgedrückt (beachten Sie, dasscalc()unnötig ist), bei der diemax-widthdes Elements (64rem) von seiner voll verfügbarenwidth(100%) abgezogen wird. Was übrig bleibt, ist der Platz, der nicht vom Element eingenommen wird.((100% - 64rem) / 2))teilt diesen verbleibenden Platz gleichmäßig auf, da wir ihn zwischen den Inline-Grenzen des Elements aufteilen.max(0px, ((100% - 64rem) / 2))vergleicht0pxund(100% - 64rem) / 2). Der größere Wert wird verwendet. Das wird in den meisten Fällen das Ergebnis der Gleichung sein, aber wenn64remjemals größer ist als der berechnete Wert der vollen100%Breite des Elements, wird dieser Wert auf Null gesetzt, um sicherzustellen, dass er niemals einen negativen Wert ergibt.margin-inlineist die Eigenschaft, die der gewählte Wert festlegt, was einen Außenabstand zu den Inline-Seiten des Elements anwendet – das ist die logische Kurzschreibweise, die dem Setzen desselben Werts auf die physischen Eigenschaften vonmargin-leftundmargin-rightentspricht.
Es ist im Grunde die gleiche Idee, die Chris vor einiger Zeit vorgestellt hat, bei der die CSS-Funktion max() verwendet wird, um das „Inside Problem“ zu lösen – ein Container, der einen Volltonhintergrund unterstützt und gleichzeitig den darin enthaltenen Inhalt mit padding einschränkt.
max(), calc(), margin-inline… das ist viel neuer Schnickschnack im CSS! Und Manuel schreibt genau darüber und über andere moderne CSS-Features im Rahmen von 100 Tagen.
Es ist sicher clever, aber ich finde die längere Version viel leichter verständlich, was ein sehr wichtiger Vorteil ist.
Außerdem wäre
margin-inline: auto;eine bessere Entsprechung alsmargin: 0 auto;, da die einzeilige Version die Block-Ränder undefiniert lässt.Man sollte sich immer auf das verlassen, was für einen selbst am verständlichsten ist!
Ich stelle mir vor, dass wir nur
0für den Rand in Blockrichtung angeben müssten, wenn von woanders Ränder kommen, die überschrieben werden müssen.Clever, aber die längere Form ist leichter mit Media Queries oder höherer Spezifität zu überschreiben. Zum Beispiel muss man vielleicht nur die max-width überschreiben und nicht die gesamte Zeile, was beim Überschreiben leichter zu lesen ist.
Ich stimme zu, dass die längere Version für andere Entwicklerstufen leichter zu verstehen und leichter zu überschreiben ist. Nicht wirklich lohnenswert.