← 返回首页
matrix3d() CSS-Funktion - CSS | MDN

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

matrix3d() CSS-Funktion

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Die matrix3d() CSS-Funktion definiert eine 3D-Transformation als 4x4 homogene Matrix. Ihr Ergebnis ist ein <transform-function> Daten-Typ.

In diesem Artikel

Probieren Sie es aus

transform: matrix3d( -0.6, 1.34788, 0, 0, -2.34788, -0.6, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1 );
transform: matrix3d( 0.5, 0, -0.866025, 0, 0.595877, 1.2, -1.03209, 0, 0.866025, 0, 0.5, 0, 25.9808, 0, 15, 1 );
<section id="default-example"> <img class="transition-all" id="example-element" src="/shared-assets/images/examples/firefox-logo.svg" width="200" /> </section>

Syntax

css
matrix3d(a1, b1, c1, d1, a2, b2, c2, d2, a3, b3, c3, d3, a4, b4, c4, d4)

Werte

Die matrix3d()-Funktion wird mit 16 Werten angegeben. Sie sind in der Spalten-Major-Ordnung beschrieben.

a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3

Sind <number>, die die lineare Transformation beschreiben.

a4 b4 c4 d4

Sind <number>, die die anzuwendende Translation beschreiben.

Kartesische Koordinaten auf ℝ^2Homogene Koordinaten auf ℝℙ^2 Kartesische Koordinaten auf ℝ^3 Homogene Koordinaten auf ℝℙ^3
Diese Transformation wird auf den 3D-Raum angewendet und kann nicht auf der Ebene dargestellt werden. Eine generische 3D-affine Transformation kann nicht mit einer kartesischen Koordinatenmatrix dargestellt werden, da Translationen keine linearen Transformationen sind. (a1a2a3a4b1b2b3b4c1c2c3c4d1d2d3d4)\left( \begin{array}{cccc} a1 & a2 & a3 & a4 \\ b1 & b2 & b3 & b4 \\ c1 & c2 & c3 & c4 \\ d1 & d2 & d3 & d4 \\ \end{array} \right)

Formale Syntax

<matrix3d()> =
matrix3d( <number>#{16} )
Diese Syntax spiegelt den neuesten Standard gemäß CSS Transforms Module Level 2 wider. Möglicherweise haben nicht alle Browser jeden Teil implementiert. Siehe Browserkompatibilität für Informationen zur Unterstützung.

Beispiele

Beispiel zur Verzerrung eines Würfels

Das folgende Beispiel zeigt einen 3D-Würfel, der aus DOM-Elementen und Transformationen erstellt wurde, der bei Hover/Focus eine matrix3d()-Transformation auf ihn anwendet.

HTML

html
<section id="example-element" tabindex="0"> <div class="face front">1</div> <div class="face back">2</div> <div class="face right">3</div> <div class="face left">4</div> <div class="face top">5</div> <div class="face bottom">6</div> </section>

CSS

css
#example-element { width: 100px; height: 100px; transform-style: preserve-3d; transition: transform 1.5s; transform: rotate3d(1, 1, 1, 30deg); margin: 50px auto; } #example-element:hover, #example-element:focus { transform: rotate3d(1, 1, 1, 30deg) matrix3d(1, 0, 0, 0, 0, 1, 6, 0, 0, 0, 1, 0, 50, 100, 0, 1.1); } .face { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; position: absolute; backface-visibility: inherit; font-size: 60px; color: white; } .front { background: rgb(90 90 90 / 70%); transform: translateZ(50px); } .back { background: rgb(0 210 0 / 70%); transform: rotateY(180deg) translateZ(50px); } .right { background: rgb(210 0 0 / 70%); transform: rotateY(90deg) translateZ(50px); } .left { background: rgb(0 0 210 / 70%); transform: rotateY(-90deg) translateZ(50px); } .top { background: rgb(210 210 0 / 70%); transform: rotateX(90deg) translateZ(50px); } .bottom { background: rgb(210 0 210 / 70%); transform: rotateX(-90deg) translateZ(50px); }

Ergebnis

Beispiel zur Matrix-Translation und Skalierung

Ein weiteres transform3d()-Beispiel, das eine animierte Kombination aus Translation und Skalierung implementiert.

HTML

html
<div class="foo"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quos quaerat sit soluta, quisquam exercitationem delectus qui unde in facere necessitatibus aut quia porro dolorem nesciunt enim, at consequuntur aliquam esse? </div>

CSS

css
html { width: 100%; } body { height: 100vh; /* Centering content */ display: flex; flex-flow: row wrap; justify-content: center; align-content: center; } .foo { width: 50%; padding: 1em; color: white; background: #ff8c66; border: 2px dashed black; text-align: center; font-family: system-ui, sans-serif; font-size: 14px; /* Setting up animation for better demonstration */ animation: MotionScale 2s alternate linear infinite; } @keyframes MotionScale { 0% { /* Identity matrix is used as basis here. The matrix below describes the following transformations: Translates every X point by -50px Translates every Y point by -100px Translates every Z point by 0 Scales down by 10% */ /* prettier-ignore */ transform: matrix3d( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -50, -100, 0, 1.1 ); } 50% { /* prettier-ignore */ transform: matrix3d( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.9 ); } 100% { /* prettier-ignore */ transform: matrix3d( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 50, 100, 0, 1.1 ) } }

Ergebnis

Spezifikationen

Spezifikation
CSS Transforms Module Level 2
# funcdef-matrix3d

Browser-Kompatibilität

JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.

Siehe auch