W3docs

CSS transform-style Eigenschaft

Wie man die CSS-Eigenschaft transform-style nutzt, um Kindelemente im 3D-Raum zu positionieren. Funktionen und Beispiele.

Die CSS-Eigenschaft transform-style steuert, ob die Kinder eines transformierten Elements im selben 3D-Renderraum wie ihr Elternelement gehalten werden oder in die Ebene des Elternelements abgeflacht werden. Sie verwandelt einen Stapel verschachtelter transform-Boxen in eine echte 3D-Szene statt in ein flaches Bild.

Diese Eigenschaft gehört zu den CSS3-Eigenschaften und hat nur dann einen sichtbaren Effekt auf Elemente, die selbst mit der Eigenschaft transform transformiert werden.

Was „3D-Renderkontext" bedeutet

Wenn man ein Element in 3D dreht (z. B. transform: rotateY(50deg)), muss der Browser entscheiden, ob die Nachkommen dieses Elements Teil derselben 3D-Welt sind oder lediglich wie ein Aufkleber auf der Oberfläche des Elternelements aufgemalt werden.

  • flat (der Standardwert) flacht jedes Kind auf die 2D-Ebene des Elternelements ab. Das Kind kann weiterhin transformiert werden, lebt jedoch in einem eigenen abgeflachten Raum – es kann in 3D nicht „vor" oder „hinter" seinem Elternelement erscheinen.
  • preserve-3d behält die Kinder im 3D-Koordinatensystem des Elternelements, sodass ihre rotateX/rotateY/translateZ-Werte relativ zum selben Fluchtpunkt interpretiert werden. Dies ermöglicht den Bau von Würfeln, Karten-Flip-Animationen und geschichteten 3D-Szenen.

transform-style arbeitet Hand in Hand mit perspective: Setze perspective auf dem Vorfahrelement, um die Stärke des 3D-Effekts festzulegen, und transform-style: preserve-3d auf dem Elternelement, damit seine Kinder tatsächlich in diesem 3D-Raum leben.

Info

preserve-3d wird von mehreren anderen Eigenschaften überschrieben: Wird overflow (außer visible), clip-path, filter, opacity unter 1 oder mask auf dasselbe Element angewendet, erzwingt dies eine Gruppierung, die die Kinder abflacht. Wenn eine 3D-Szene plötzlich flach wirkt, sollte man das preserve-3d-Element auf eine dieser Eigenschaften prüfen.

Info

Für maximale Browserkompatibilität kann das Präfix -webkit- (Safari, älteres Chrome und Opera) zusammen mit der präfixlosen Eigenschaft verwendet werden. Moderne Browser unterstützen transform-style ohne Präfix.

Anfangswertflat
Gilt fürTransformierbare Elemente.
VererbbarNein.
AnimierbarNein.
VersionCSS3
DOM Syntaxobject.style.transformStyle = "flat";

Syntax

CSS transform-style Werte

transform-style: flat | preserve-3d | initial | inherit;

Beispiel der transform-style Eigenschaft:

CSS transform-style Code-Beispiel

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      #element {
        position: relative;
        height: 250px;
        width: 250px;
        margin: 50px;
        padding: 10px;
        border: 2px solid #666666;
        background-color: #eeeeee;
      }
      #element1 {
        padding: 50px;
        position: absolute;
        border: 2px solid #000000;
        background-color: #8ebf42;
        -webkit-transform: rotateY(50deg);
        -webkit-transform-style: preserve-3d;
        transform: rotateY(50deg);
        transform-style: preserve-3d;
      }
      #element2 {
        padding: 50px;
        position: absolute;
        border: 2px solid #000000;
        background-color: #1c87c9;
        -webkit-transform: rotateY(-100deg);
        transform: rotateY(-100deg);
      }
    </style>
  </head>
  <body>
    <h2>Transform-style property example</h2>
    <div id="element">
      <div id="element1">
        Green
        <div id="element2">Blue</div>
      </div>
    </div>
  </body>
</html>

Ergebnis

CSS transform-style Eigenschaft

Beispiel der transform-style Eigenschaft mit dem Wert „flat":

Beispiel der CSS transform-style Eigenschaft mit dem Wert flat

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .element {
        position: relative;
        height: 250px;
        margin: 50px;
        padding: 10px;
        border: 2px solid #cccccc;
        background-color: #eeeeee;
      }
      .element1 {
        margin: 20px;
        border: 1px dotted;
        height: 150px;
        width: 150px;
        background-color: green;
        transform: rotateX(15deg);
        transform-style: flat;
      }
      .element2 {
        margin: 20px;
        border: 1px dotted;
        height: 200px;
        width: 200px;
        background-color: lightgreen;
        transform: rotateX(45deg);
      }
    </style>
  </head>
  <body>
    <h2>Transform-style property example</h2>
    <div class="element">
      <div class="element1">
        Green
        <div class="element2">Blue</div>
      </div>
    </div>
  </body>
</html>

Werte

WertBeschreibung
flatLegt fest, dass die Kinder des Elements nicht dreidimensional positioniert werden. Dies ist der Standardwert dieser Eigenschaft.
preserve-3dLegt fest, dass die Kinder des Elements dreidimensional positioniert werden.
initialSetzt diese Eigenschaft auf ihren Standardwert zurück.
inheritErbt diese Eigenschaft vom Elternelement.

Wann es verwendet werden sollte

transform-style: preserve-3d sollte immer dann eingesetzt werden, wenn 3D-Transformationen verschachtelt werden und die inneren Elemente eine gemeinsame Perspektive teilen sollen:

  • Karten-Flip — eine Karte mit Vorder- und Rückseite: Der Container erhält preserve-3d, und die Rückseite wird mit rotateY(180deg) gedreht, sodass sie hinter der Vorderseite liegt.
  • 3D-Würfel / Karussell — sechs Flächen, die jeweils mit translateZ verschoben und von einem gemeinsamen Mittelpunkt aus gedreht werden.
  • Geschichtete Parallax-Szenen — Kinder, die mit translateZ unter einer gemeinsamen perspective nach vorne und hinten verschoben werden.

Der Standardwert flat sollte beibehalten werden, wenn nur eine einzelne 2D-artige Transformation (Skalierung, ebene Drehung, Schrägstellung) angewendet wird und keine Tiefenwirkung benötigt wird — er ist kostengünstiger zu rendern und vermeidet unerwartete Effekte durch die oben genannten Abflachungsregeln.

Verwandte Eigenschaften, die gut mit transform-style kombiniert werden können:

Übung

Übung
Die transform-style-Eigenschaft funktioniert nur mit der
Die transform-style-Eigenschaft funktioniert nur mit der
Was this page helpful?