Logische Eigenschaften für Margen, Rahmen und Abstände

Das Modul CSS logical properties and values definiert flussbezogene Zuordnungen für die verschiedenen Margin-, Rahmen- und Abstandseigenschaften und deren Kurzfassungen. In diesem Leitfaden werfen wir einen Blick auf diese.

Wenn Sie sich das Modul logical properties and values ansehen, können Sie feststellen, dass die Liste der Moduleigenschaften sehr lang ist. Dies liegt hauptsächlich daran, dass es für Seite-Margin-, Rahmen- und Abständeigenschaften jeweils vier Langform-Werte sowie alle Kurzform-Werte gibt.

Zuordnungen für Margen, Rahmen und Abstände

Das Modul beschreibt die Zuordnungen für jeden logischen Wert zu einem physischen Gegenstück. Die folgende Tabelle ordnet diese Werte für den Fall zu, dass der writing-mode horizontal-tb ist – mit einer Richtung von links nach rechts. Die Inline-Richtung verläuft daher horizontal – von links nach rechts – und margin-inline-start wäre das Äquivalent zu margin-left.

Wenn Sie einen horizontal-tb Schreibmodus mit einer Textausrichtung von rechts nach links verwenden würden, wäre margin-inline-start dasselbe wie margin-right, und in einem vertikalen Schreibmodus wäre es dasselbe wie die Verwendung von margin-top.

Logische Eigenschaft Physische Eigenschaft
border-block-end border-bottom
border-block-end-color border-bottom-color
border-block-end-style border-bottom-style
border-block-end-width border-bottom-width
border-block-start border-top
border-block-start-color border-top-color
border-block-start-style border-top-style
border-block-start-width border-top-width
border-inline-end border-right
border-inline-end-color border-right-color
border-inline-end-style border-right-style
border-inline-end-width border-right-width
border-inline-start border-left
border-inline-start-color border-left-color
border-inline-start-style border-left-style
border-inline-start-width border-left-width
border-start-start-radius border-top-left-radius
border-end-start-radius border-bottom-left-radius
border-start-end-radius border-top-right-radius
border-end-end-radius border-bottom-right-radius
margin-block-end margin-bottom
margin-block-start margin-top
margin-inline-end margin-right
margin-inline-start margin-left
padding-block-end padding-bottom
padding-block-start padding-top
padding-inline-end padding-right
padding-inline-start padding-left

Es gibt auch einige zusätzliche Kurzfassungen, die es ermöglichen, gleichzeitig beide Block- oder beide Inline-Kanten der Box anzusprechen. Diese Kurzformen haben kein physisches Äquivalent.

Eigenschaft Zweck
border-block Setzt border-color, border-style und border-width für beide Block-Ränder.
border-block-color Setzt border-color für beide Block-Ränder.
border-block-style Setzt border-style für beide Block-Ränder.
border-block-width Setzt border-width für beide Block-Ränder.
border-inline Setzt border-color, -style und -width für beide Inline-Ränder.
border-inline-color Setzt border-color für beide Inline-Ränder.
border-inline-style Setzt border-style für beide Inline-Ränder.
border-inline-width Setzt border-width für beide Inline-Ränder.
margin-block Setzt alle Block-margins.
margin-inline Setzt alle Inline-margins.
padding-block Setzt das Block-padding.
padding-inline Setzt das Inline-padding.

Margin-Beispiele

Die zugeordneten Margin-Eigenschaften margin-inline-start, margin-inline-end, margin-block-start und margin-inline-end können anstelle ihrer physischen Gegenstücke verwendet werden.

Dieses Beispiel enthält zwei Boxen mit unterschiedlich großen Margen an jedem Rand. Ein extra Container mit einem Rahmen wurde hinzugefügt, um den Margin deutlicher zu machen.

Eine Box verwendet physische Eigenschaften und die andere logische Eigenschaften. Versuchen Sie, die Eigenschaft direction auf rtl zu ändern, um die Boxen in einer rechts-nach-links Richtung anzuzeigen; die Margen der ersten Box bleiben an derselben Stelle, während die Margen an der Inline-Dimension der zweiten Box wechseln.

Versuchen Sie auch, den writing-mode von horizontal-tb zu vertical-rl zu ändern. Beachten Sie, wie die Margen bei der ersten Box an derselben Stelle bleiben, sich aber um die Textrichtung in der zweiten Box drehen.

html
<div class="container">
  <div class="inner">
    <div class="physical box">
      margin-top: 5px<br />
      margin-right: 0<br />
      margin-bottom: 2em<br />
      margin-left: 50px
    </div>
  </div>
  <div class="inner">
    <div class="logical box">
      margin-block-start: 5px<br />
      margin-inline-end: 0<br />
      margin-block-end: 2em<br />
      margin-inline-start: 50px
    </div>
  </div>
</div>
css
.box {
  writing-mode: horizontal-tb;
  direction: ltr;
}

.physical {
  margin-top: 5px;
  margin-right: 0;
  margin-bottom: 2em;
  margin-left: 50px;
}

.logical {
  margin-block-start: 5px;
  margin-inline-end: 0;
  margin-block-end: 2em;
  margin-inline-start: 50px;
}

Margin-Kurzformen

Es gibt Kurzformen, um entweder beide Inline-Seiten oder beide Block-Seiten anzusprechen, margin-inline und margin-block. Jede akzeptiert zwei Werte. Der erste Wert wird auf den Anfang dieser Dimension angewendet, der zweite auf das Ende. Wenn nur ein Wert gesetzt wird, wird er auf beide angewendet.

In einem horizontalen Schreibmodus würde dieses CSS 5px Margin auf die Oberseite der Box und 10px Margin auf die Unterseite anwenden.

css
.box {
  margin-block: 5px 10px;
}

Padding-Beispiele

Die zugeordneten Padding-Eigenschaften padding-inline-start, padding-inline-end, padding-block-start und padding-inline-end können anstelle ihrer physischen Gegenstücke verwendet werden.

In diesem Beispiel gibt es zwei Boxen. Eine hat physische Padding-Eigenschaften gesetzt und die andere verwendet logische Padding-Eigenschaften. Mit einem writing-mode von horizontal-tb sollten beide Boxen gleich aussehen.

Versuchen Sie, die direction Eigenschaft auf rtl zu ändern, um die Boxen in einer rechts-nach-links Richtung anzuzeigen. Das Padding der ersten Box bleibt an derselben Stelle, während das Padding an der Inline-Dimension der zweiten Box wechselt.

Sie können auch versuchen, den writing-mode von horizontal-tb zu vertical-rl zu ändern. Beachten Sie erneut, wie das Padding bei der ersten Box an derselben Stelle bleibt, sich aber um die Textrichtung in der zweiten Box dreht.

html
<div class="container">
  <div class="physical box">
    padding-top: 5px<br />
    padding-right: 0<br />
    padding-bottom: 2em<br />
    padding-left: 50px
  </div>

  <div class="logical box">
    padding-block-start: 5px<br />
    padding-inline-end: 0<br />
    padding-block-end: 2em<br />
    padding-inline-start: 50px
  </div>
</div>
css
.box {
  writing-mode: horizontal-tb;
  direction: ltr;
}

.physical {
  padding-top: 5px;
  padding-right: 0;
  padding-bottom: 2em;
  padding-left: 50px;
}

.logical {
  padding-block-start: 5px;
  padding-inline-end: 0;
  padding-block-end: 2em;
  padding-inline-start: 50px;
}

Padding-Kurzformen

Wie bei Margin gibt es zweifache Kurzformen für Padding — padding-inline und padding-block — die es ermöglichen, das Padding der beiden Inline- und der beiden Blockdimensionen zu setzen.

In einem horizontalen writing-mode würde dieses CSS 5px Padding oben und 10px Padding unten auf die Box anwenden:

css
.box {
  padding-block: 5px 10px;
}

Rahmen-Beispiele

Die Rahmen-Eigenschaften sind der Hauptgrund dafür, dass dieses Modul so viele Eigenschaften zu haben scheint, da es Langform-logische Eigenschaften für die Farbe, Breite und den Stil des Rahmens auf jeder Seite einer Box bereitstellt, zusammen mit der Kurzform, um alle drei auf einmal für jede Seite zu setzen. Wie bei Margin und Padding gibt es eine zugeordnete Version jeder physischen Eigenschaft.

Das untenstehende Demo verwendet einige Langformen und drei Kurzformwerte. Wie bei den anderen Demos versuchen Sie, die direction Eigenschaft auf rtl zu ändern, um die Boxen in einer rechts-nach-links Richtung anzuzeigen, oder den writing-mode von horizontal-tb zu vertical-rl zu ändern.

html
<div class="container">
  <div class="physical box">Borders using physical properties.</div>
  <div class="logical box">Borders using logical properties.</div>
</div>
css
.box {
  writing-mode: horizontal-tb;
  direction: ltr;
}

.physical {
  border-top: 2px solid hotpink;
  border-right-style: dotted;
  border-right-color: goldenrod;
  border-right-width: 5px;
  border-bottom: 4px double black;
  border-left: none;
}

.logical {
  border-block-start: 2px solid hotpink;
  border-inline-end-style: dotted;
  border-inline-end-color: goldenrod;
  border-inline-end-width: 5px;
  border-block-end: 4px double black;
  border-inline-start: none;
}

Rahmen-Kurzformen

Es gibt zweifache Kurzformen, um die Breite, den Stil und die Farbe der Block- oder Inline-Dimension zu setzen, sowie Kurzformen, um alle drei Werte in der Block- oder Inline-Dimension zu setzen. Der untenstehende Code würde Ihnen im horizontalen Schreibmodus einen 2px grünen soliden Rahmen an der Ober- und Unterseite der Box, und einen 4px gepunkteten lila Rahmen auf der linken und rechten Seite geben.

css
.box {
  border-block: 2px solid green;
  border-inline-width: 4px;
  border-inline-style: dotted;
  border-inline-color: rebeccapurple;
}

Flussbezogene border-radius Eigenschaften

Das Modul hat flussbezogene Entsprechungen für die Langformen von border-radius. Das folgende Beispiel würde im horizontalen writing-mode den oberen rechten Randradius auf 1em setzen, den unteren rechten auf 0, den unteren linken auf 20px und den oberen linken auf 40px.

css
.box {
  border-end-start-radius: 1em;
  border-end-end-radius: 0;
  border-start-end-radius: 20px;
  border-start-start-radius: 40px;
}

Kennzeichnung logischer Werte für die 4-Wert-Kurzform-Syntax

Die Spezifikation gibt eine Empfehlung für die vier-Wert-Kurzformen wie die margin-Eigenschaft, jedoch ist die endgültige Entscheidung, wie dies gekennzeichnet werden soll, noch ungelöst und wird in dieser Diskussion thematisiert.

Die Verwendung jeder vier-Wert-Kurzform wie margin, padding oder border wird derzeit die physischen Versionen verwenden, daher, wenn es wichtig ist, dem Fluss des Dokuments zu folgen, verwenden Sie vorerst die Langform-Eigenschaften.