DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Die Eigenschaft transform erlaubt es Ihnen, ein Element visuell zu manipulieren, indem Sie es verzerren, drehen, verschieben oder skalieren.
.element {
width: 20px;
height: 20px;
transform: scale(20);
}
Selbst mit einer deklarierten Höhe und Breite wird dieses Element nun auf das Zwanzigfache seiner ursprünglichen Größe skaliert.
Wenn dieser Funktion zwei Werte übergeben werden, wird sie horizontal um den ersten Wert und vertikal um den zweiten Wert gestreckt. Im folgenden Beispiel wird das Element nun doppelt so breit, aber halb so hoch wie das ursprüngliche Element sein.
.element {
transform: scale(2, .5);
}
Oder Sie können spezifischer sein, ohne die Kurzschreibweise zu verwenden.
transform: scaleX(2);
transform: scaleY(.5);
Aber scale() ist nur eine von vielen verfügbaren Transformationsfunktionen.
Werte
scale(): Beeinflusst die Größe des Elements. Dies gilt auch für diefont-size,padding,heightundwidtheines Elements. Es ist auch eine Kurzschreibweise für die FunktionenscaleXundscaleY.skewX()undskewY(): Neigt ein Element nach links oder rechts, ähnlich wie ein Rechteck zu einem Parallelogramm wird.skew()ist eine Kurzschreibweise, dieskewX()undskewYkombiniert, indem sie beide Werte akzeptiert.translate(): Verschiebt ein Element seitlich oder nach oben und unten.rotate(): Dreht das Element im Uhrzeigersinn von seiner aktuellen Position aus.matrix(): Eine Funktion, die wahrscheinlich nicht von Hand geschrieben werden soll, aber alle Transformationen in einer kombiniert.perspective(): Beeinflusst das Element selbst nicht, sondern die 3D-Transformationen von absteigenden Elementen, wodurch sie alle eine konsistente Tiefenperspektive erhalten.
Verzerrung
/* Skew points along the x-axis */
.element {
transform: skewX(25deg);
}
/* Skew point along the y-axis */
.element {
transform: skewY(25deg);
}
/* Skew points along the x- and y-axis */
.element {
transform: skew(25deg, 25deg);
}
Die Transformationsfunktionen skewX und skewY neigen ein Element in die eine oder andere Richtung. Denken Sie daran: Es gibt keine Kurzschreibweise für die Verzerrung eines Elements, daher müssen Sie beide Funktionen verwenden. Im folgenden Beispiel können wir ein 100px x 100px großes Quadrat mit skewX nach links und rechts verzerren.
Während wir in diesem Beispiel ein Element vertikal mit skewY verzerren können.
Nun verwenden wir skew(), um die beiden zu kombinieren.
Drehung
.element {
transform: rotate(25deg);
}
Dies dreht ein Element im Uhrzeigersinn von seiner ursprünglichen Position, während ein negativer Wert es in die entgegengesetzte Richtung drehen würde. Hier ist ein einfaches animiertes Beispiel, bei dem sich ein Quadrat alle drei Sekunden um 360 Grad dreht.
Wir können auch die Funktionen rotateX, rotateY und rotateZ verwenden, wie hier gezeigt.
Verschiebung
.element {
transform: translate(20px, 10px);
}
Diese Transformationsfunktion verschiebt ein Element seitlich oder nach oben und unten. Warum nicht einfach top/left/bottom/right verwenden? Nun, es ist manchmal etwas verwirrend. Ich würde diese für Layout/Positionierung (sie haben sowieso eine bessere Browserunterstützung) betrachten und diese als Möglichkeit, diese Dinge als Teil eines Übergangs oder einer Animation zu bewegen.
Diese Werte wären beliebige Längenwerte, wie 10px oder 2,4em. Ein Wert verschiebt das Element nach rechts (negative Werte nach links). Wenn ein zweiter Wert angegeben wird, verschiebt dieser Wert es nach unten (negative Werte nach oben). Oder Sie können spezifisch werden.
transform: translateX(value);
transform: translateY(value);
Es ist wichtig zu beachten, dass ein Element, das transform verwendet, nicht dazu führt, dass andere Elemente um es herumfließen. Indem wir die unten gezeigte translate-Funktion verwenden und das grüne Quadrat aus seiner ursprünglichen Position verschieben, werden wir feststellen, dass der umgebende Text an Ort und Stelle bleibt, als ob das Quadrat ein Blockelement wäre.
Es ist auch erwähnenswert, dass translate hardwarebeschleunigt wird, wenn Sie diese Eigenschaft animieren möchten, im Gegensatz zu position: absolute.
Mehrere Werte
Mit einer durch Leerzeichen getrennten Liste können Sie der Eigenschaft transform mehrere Werte hinzufügen.
.element {
width: 20px;
height: 20px;
transform: scale(20) skew(-20deg);
}
Es ist erwähnenswert, dass es eine Reihenfolge gibt, in der diese Transformationen durchgeführt werden. Im obigen Beispiel wird die Verzerrung zuerst ausgeführt und dann das Element skaliert.
Matrix
Die Transformationsfunktion matrix kann verwendet werden, um alle Transformationen in einer zu kombinieren. Es ist eine Art Kurzschreibweise für Transformationen, nur glaube ich nicht, dass sie wirklich von Hand geschrieben werden soll. Es gibt Werkzeuge wie The Matrix Resolutions, die eine Gruppe von Transformationen in eine einzige Matrixdeklaration umwandeln können. Möglicherweise kann dies in einigen Situationen die Dateigröße reduzieren, obwohl für Sie unübersichtliche Mikrooptimierungen wie diese wahrscheinlich keine Zeit wert sind.
Für Neugierige, dies
rotate(45deg) translate(24px, 25px)
…kann auch dargestellt werden als
matrix(0.7071067811865475, 0.7071067811865476, -0.7071067811865476, 0.7071067811865475, -0.7071067811865497, 34.648232278140824)
3D-Transformationen
Die meisten der oben genannten Eigenschaften haben 3D-Versionen davon.
translate3d(x, y, z)
translateZ(z)
Der dritte Wert in translate3d oder der Wert in translateZ bewegt das Element zum Betrachter hin, negative Werte weg.
scale3d(sx, sy, sz)
scaleZ(sz)
Der dritte Wert in scale3d oder der Wert in scaleZ beeinflusst die Skalierung entlang der z-Achse (z. B. der imaginären Linie, die direkt aus dem Bildschirm kommt).
rotateX(value)
rotateY(value)
rotate3d(x, y, z)
rotateX und rotateY drehen ein Element im 3D-Raum um diese Achsen. rotate3d erlaubt es Ihnen, einen Punkt im 3D-Raum anzugeben, um den das Element gedreht werden soll.
matrix3d(…)
Eine Möglichkeit, eine 3D-Transformation programmatisch in einem 4x4-Raster zu beschreiben. Niemand wird jemals eine von diesen von Hand schreiben.
perspective(value)
Dieser Wert beeinflusst das Element selbst nicht, aber er beeinflusst die 3D-Transformationen von absteigenden Elementen, wodurch sie alle eine konsistente Tiefenperspektive erhalten.
Weitere Informationen
- MDN Docs zu transform und Verwendung.
- David DeSandro's Dokumentation zu 3D-Transformationen
- Surfin’ Safari: 3D-Transformationen
- W3C-Spezifikation zu CSS3-Transformationen
- Einführung in CSS 3D-Transformationen
- Tricks zur Verwendung von CSS
translateZ()undperspective()(DigitalOcean)
Verwandte Eigenschaften
backface-visibility
.element { backface-visibility: hidden; }
perspective
.element { perspective: 1000px; }
perspective-origin
.element { perspective-origin: 25% 75%; }
transform-origin
.element { transform-origin: top left; }
transform-style
.element { transform-style: preserve-3d; }
will-change
.element { will-change: transform; }
Zufällige Tatsache: Eine Transformation erzeugt einen Positionierungskontext genau wie position: relative;
tut.
Browser-Unterstützung
Unterstützung für 2D-Transformationen
Diese Browser-Supportdaten stammen von Caniuse, wo es weitere Details gibt. Eine Zahl gibt an, dass der Browser das Feature ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 4* | 3.5* | 9* | 12 | 3.1* |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 2.1* | 3.2* |
Unterstützung für 3D-Transformationen
Diese Browser-Supportdaten stammen von Caniuse, wo es weitere Details gibt. Eine Zahl gibt an, dass der Browser das Feature ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 12* | 10* | 11 | 12 | 4* |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 3* | 3.2* |
Vielen Dank.
3D-Transformationen werden nützlich sein...
https://codepen.io/uiswarup/full/WPEZqd
3d drehung
Hallo, ich verstehe ScaleZ nicht. In transform, wenn man scaleX(2) ändert, skaliert es die Breite, aber wir haben keinen Tiefenwert des Elements, also ist scaleZ(3) gleich 3 * 0 = 0.
Also hat scaleZ keine Auswirkung auf das Element.
scalez(3) entspricht z-index:3.
Eine kurze Anmerkung, dass
rotate3d()tatsächlich 4 Argumente wie folgt nimmt:Wobei die ersten drei Argumente einen Punkt im 3D-Raum beschreiben, um den Sie drehen möchten; und das vierte einen Winkel, um den das Element gedreht werden soll.
Tatsächlich sind die ersten drei Argumente ein Vektor, der die Drehachse beschreibt. D.h. sie nehmen eine vorzeichenlose
<number>, keine<length>.wow danke
http://www.ituto.org
Spam...
Spammer
-webkit-transform: rotate(-2deg);Dies wird im ursprünglichen Bereich in Webkit-Browsern nicht belegt... Verursacht bei mir einige Probleme.
Gibt es eine Möglichkeit, den Text innerhalb dieser Box ebenfalls zu skalieren?
Ja, wir können einfach ein Element wie p. nehmen, dann Code generieren.
p{-moz-transform: skewX(12deg) skewY(32deg);
-webkit-transform: skewX(12deg) skewY(32deg);
-o-transform: skewX(12deg) skewY(32deg);
-ms-transform: skewX(12deg) skewY(32deg);
transform: skewX(12deg) skewY(32deg);
}
Habt Probleme beim Anwenden von Transform (Translation) auf einen Button:hover?? Hat jemand eine Lösung oder ähnliche Probleme gehabt.??
Das ist die Codierung meiner CSS-Datei.
Transform ist in allen Browsern nicht verfügbar, da es eine neue CSS-Eigenschaft ist. Sie müssen es also browserübergreifend verwenden.
Verwenden Sie -moz-transform für Mozilla FireFox, -webkit-transform für Safari, Chrome...
Du hast ein "`" vor deinem Code, deshalb.
Warum sind diese 2 Codes gleich? Ich stimme der Drehung in beiden zu, aber die Verschiebung in der Matrix müsste 24,25 anstelle von -0,7071067811865497, 34,648232278140824 sein.
1) rotate(45deg) translate(24px, 25px)
2) matrix(0.7071067811865475, 0.7071067811865476, -0.7071067811865476, 0.7071067811865475, -0.7071067811865497, 34.648232278140824)
Die Matrixfunktion nimmt diese Werte an, die andere Werte wie folgt darstellen:
matrix( x scale, y skew, x skew, y scale, x translation (position), y translation (position) )
Extra
Wenn Sie ein kostenloses Logo herunterladen möchten, ist dies der richtige Ort.
http://www.bestfreelogo.com/vector-logos/abstract/
2D-Transformationen funktionieren in IE 9+ und werden über das Präfix -ms- unterstützt.
Können Sie mir eine Möglichkeit zur 3D-Drehung in Adobe Flash CS3 geben? Es kann Code usw. sein.
wirklich cool :)
Danke für Ihre Zeit
Es scheint, dass ein positiver Wert für skewX gegen den Uhrzeigersinn ist, im Gegensatz zu den Werten für rotateX, die im Uhrzeigersinn sind. Sehr seltsam, finde ich, daher ist Ihr Beispiel für skewX(25deg) falsch.
Hallo Ruud, hast du eine Antwort darauf, warum ein positiver Wert von skewX gegen den Uhrzeigersinn statt im Uhrzeigersinn ist? Ich kann nicht verstehen, warum es so funktioniert. Und Hallo Chris, ich hoffe auf deine Antwort.
Ich habe die Logik dahinter verstanden und bin auch zu diesem Schluss gekommen. Weiß jemand den Grund dafür? Es scheint eine Ausnahme zu sein und macht es schwer zu verstehen, was passiert, wenn einige Werte angewendet werden.
Die Skalierungseigenschaft bewirkt, dass das Bild von Breite und Höhe Null skaliert wird.
Ich verwende Scrollen zum Vergrößern oder Verkleinern. Aber sobald ich zu scrollen beginne, geht das Bild auf wahrscheinlich ein Pixel und skaliert entsprechend.
Gibt es eine Eigenschaft von 0 bis 100, um "scale" zu manipulieren, um es wie 100 bis 110 zu machen?
Es ist erwähnenswert, dass es jetzt eine
skew-Kurzschreibweise gibt, à laskew(10deg, 10deg).Wie im Abschnitt "Verzerrung" oben gezeigt, neigt skewX(25deg) es nach rechts. Und das ergibt für mich Sinn (Aber wir irren uns beide hier, Chris). Denn tatsächlich neigt es es nach links. Ich konnte es nicht mit dem Koordinatensystem in Einklang bringen, positive Grad hätten es eigentlich nach rechts neigen sollen.
Hallo..
Eigentlich ist meine Frage off-topic, aber kannst du mir mit dem Pfeil in deinem aktiven Menü helfen...
Der Pfeil, der nach unten kommt, wenn HTML oder SCSS oder Ergebnis aktiv ist...
Bitte hilf.
Vielen Dank im Voraus... :)
skewX()undskewY(): Neigt ein Element nach links oder rechts, wie wenn man ein Dreieck in ein Parallelogramm verwandelt.=> Ein Quadrat in ein Parallelogramm, nicht ein Dreieck (oder ich verstehe es nicht).
Oder tatsächlich ein Rechteck.
wao
Ja, das stimmt ganz sicher )) Sie haben es verstanden. Es soll kein Dreieck, sondern ein Quadrat in ein Parallelogramm sein.
Es ist seltsam, wie scale translate beeinflusst, wenn man sie in der falschen Reihenfolge hinzufügt.
Wenn ich schreibe
transform: scale(.05, .05) translateX(100px);
…bewegt es sich nur 5 Pixel.
Es ist, als ob sich die Distanz vergrößert hätte oder die Translate-Pixel ebenfalls skaliert werden.
Wenn ich jedoch so schreibe:
transform: translateZ(-2000px) translateX(400px);
…wird es kleiner, bewegt sich aber immer noch 400 Pixel von seinem ursprünglichen Platz in der Bildschirmtiefe entfernt.
In Fall 2 hätte ich verstanden, wenn translateX eine horizontale Bewegung in Bezug auf die neue Entfernung vom Bildschirm wäre, aber scale hat nichts mit Perspektive zu tun, oder?
Da dieser Thread noch aktiv ist, versuche ich es trotzdem noch einmal, um zu sehen, ob jemand eine logische Erklärung für die obige Frage hat.
Wie kommt es, dass der Translate-Wert "skaliert" wird, wenn ich ein Element skaliere, bevor ich es verschiebe, aber nicht, wenn ich es weit nach hinten auf der Z-Achse bewege?
Ich mache einen Versuch. Ich glaube, im Fall 1 liegt es daran, dass Sie auf 5 % skaliert und dann eine Transformation von 100 Pixeln angewendet haben. Also sind 5 % davon 5 Pixel. Wenn Sie die Reihenfolge der beiden Transformationen ändern, erhalten Sie den gewünschten Effekt.
Ich bin mir ziemlich sicher, dass es mit der Reihenfolge der Transformationen zusammenhängt. Sie haben es kurz im Artikel oben erwähnt, aber nur gesagt, dass skew vor scale angewendet wird. Ich glaube, die Reihenfolge ist [skew -> scale -> translate].
Ok. Danke Scott und Carry fürs Antworten. Ich erkenne, dass das die Ursache ist. Ich muss es mir nur merken, nehme ich an.
Cary, ich glaube nicht, dass es eine definierte Reihenfolge gibt, sie hängt davon ab, welche Anweisung zuerst geschrieben wird. Ich habe heute gelernt, dass 'translate (x, y) scale(z)' != 'scale(z) translate(x, y)' ist.
Ein wirklich nützliches npm-Plugin gulp-autoprefixer, gulp-autoprefixer erspart Ihnen das manuelle Hinzufügen browser spezifischer Eigenschaften zu Ihrem CSS.
Hallo Leute! Kann mir jemand sagen, warum sich das nicht von der Mitte aus dreht, wie die Standard-Spezifikation besagt... Ich bin ratlos.
http://codepen.io/icommstudios/pen/eZpgEB
FYI: Das Ändern von transform-origin hat ebenfalls keine Auswirkungen....
Nur eine Vermutung, aber wahrscheinlich wird zuerst die Skalierung angewendet und dann gedreht. Die Skalierungsänderung ändert wahrscheinlich das Drehzentrum.
Das ist merkwürdig, wie hat Opera keine 3D-Unterstützung, wenn es auf Chrome basiert?
Ich habe ein seltsames Problem. In Edge bekomme ich eine unnötige Scrollleiste bei einem meiner Kendo-Fenster. Die Verwendung von -webkit-transform auf das Symbol im Fenster macht seltsamerweise die Scrollleiste verschwinden. Bin mir nicht sicher, ob das die richtige Lösung ist. Was übersehe ich?
Die Verwendung von
Scale3d(transform(rotateY: ): 20px): 10px);
funktioniert bei mir nicht. Irgendwelche Ideen?
Was, wenn ich die transform-Eigenschaft entfernen möchte? Wie mache ich das?
Sie können die Matrizen definitiv von Hand schreiben. Alle anderen Transformationen sind nur Kurzschreibweisen für Matrizen. Wenn Sie die Matrixmathematik lernen, werden Sie verstehen, warum unterschiedlich geordnete Transformationen so funktionieren, wie sie es tun.
Die 4x4-Matrix hat 3 Teile:
Die 3x3-Matrix in der oberen linken Ecke beschreibt eine lineare Transformation.
Die rechte Seite ist der Betrag der Verschiebung.
Unten ist für die Perspektive. (Normalerweise möchten Sie nur 0 0 0 1 unten haben, was nichts tut.)
Die lineare Transformationsmatrix enthält drei vertikale 3D-Vektoren. Sie beschreiben, wie die x-, y- und z-Achsen jeweils transformiert werden. Stellen Sie sich vor, Sie greifen jede Achse und drehen und dehnen sie, bis sie dem entsprechenden Vektor entspricht, und stellen Sie sich vor, dass der Zwischenraum Gummi ist, der an den Achsen befestigt ist. Eine bessere Erklärung finden Sie in diesem Video: https://www.youtube.com/watch?v=kYB8IZa5AuE
Hallo zusammen,
Ist es zwingend erforderlich, die folgenden Dinge zu verwenden, um alle Browser zu unterstützen?
-webkit-transform: value;
-moz-transform: value;
-ms-transform: value;
-o-transform: value;
transform: value;
Ich glaube, es lohnt sich wahrscheinlich zu erwähnen, dass transform nur auf bestimmte
display-Typen angewendet wird. Ich habe diesen Artikel gelesen und diesen einfachen Code geschriebenund
Es scheint in Ordnung, aber es funktioniert nicht, weil der
<span>ein Inline-Element ist. Dieses Problem kann gelöst werden, indem man dies versteht und einfachdisplay: inline-blockzur.close-Regel hinzufügt. Daher glaube ich, dass dieser Artikel verbessert würde, wenn er erwähnen würde, welche Elemente von jeder Transformationsfunktion angesprochen werden können.Transform scheint Effekte/Aktionen innerhalb eines Elements zu unterbrechen. Z. B. background-attachement:fixed; oder :hover funktioniert nicht in einem Div, auf das eine Transformation angewendet wurde, noch auf dessen Kinder (nicht vollständig getestet).
Sie beziehen sich auf die Transformationsfunktionen auf drei verschiedene Arten
1) „Aber scale() ist nur eine von vielen Funktionen, die für die Transformation verfügbar sind:“
2) „Mit einer durch Leerzeichen getrennten Liste können Sie der transform-Eigenschaft mehrere Werte hinzufügen:“
3) „Die meisten der oben genannten Eigenschaften haben 3D-Versionen.“
Ist die richtige Terminologie nur Funktion?
Muss der Artikel aktualisiert werden? Es gibt die Kurzschreibweise für skew!
https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
Danke für den Hinweis! Habe es hinzugefügt. :)
Sie erwähnen nicht die Reihenfolge, in der CSS-Transformationen in einer Liste aktiviert werden.
„Es ist erwähnenswert, dass es eine Reihenfolge gibt, in der diese Transformationen ausgeführt werden. Im obigen Beispiel wird zuerst
skewausgeführt und dann wird das Element skaliert.“Es gibt einen Fall, in dem Sie mit position:top animieren müssten – wenn Sie Inhalte nach unten schieben wollen und es einen festen Header gibt, weil https://stackoverflow.com/a/15256339/452587.
Warum funktioniert die Javascript-Rotation von 0 Grad auf 360 Grad nicht?
Hallo, danke für Ihren Artikel
Ich verwende „transform“, um die Titelschriftart, die keine komprimierte Version hat, kompakter zu machen.
Aber ich habe Probleme mit der Größenänderung des gesamten Containers.
Wie gebe ich nur die Textkomprimierung an, während die Container ihre normale adaptive Größe behalten?
h3.name-class {
transform: scale(0.8,1);
transform-origin: left;
}
Vielen Dank
Habe gerade SkewJS gefunden: https://github.com/wiserim/Skew
Jeder, der jemals nach einer Möglichkeit gesucht hat, verzerrte Elemente mit einer zuverlässigen Pixelbreite zu haben, sollte einen Blick darauf werfen.
Ich habe keine Ahnung, warum dieses Repository so unbekannt ist. Die Handhabung von verzerrten Inhalten mit Grad-Werten ist reine Hölle auf Erden, insbesondere wenn es um responsives Design geht. Hoffentlich werden CSS in Zukunft Pixelwerte unterstützen.