Les exemples qui suivent sont animés dans un but de comparaison
La transformation n'est pas une animation !
scale(x, y) où x et y sont des multiplicateurs
.element
{
transform: scale(3, 0.5);
}
scaleX(x) où x est un multiplicateur
.element
{
transform: scaleX(3);
}
scaleX(y) où y est un multiplicateur
.element
{
transform: scaleY(0.5);
}
translate(x, y) où x et y sont des distances
(px, %, em, ...)
.element
{
transform: translate(200px, 50px);
}
translateX(x) où x est une distance (px, %, em, ...)
.element
{
transform: translateX(200px);
}
translateY(y) où y est une distance (px, %, em, ...)
.element
{
transform: translateY(50px);
}
rotate(a) où a est un angle (deg, rad)
.element
{
transform: rotate(70deg);
}
skew(x, y) où x et y sont des angles (deg, rad)
.element
{
transform: skew(-50deg, 10deg);
}
skewX(x) où x est un angle (deg, rad)
.element
{
transform: skewX(-50deg);
}
skewY(y) où y est un angle (deg, rad)
.element
{
transform: skewY(10deg);
}
Il est possible de changer le centre de la transformation à l'aide de transform-origin
.element
{
transform-origin: 0 0;
transform: rotate(-70deg);
}
.element
{
transform-origin: 50% 50%;
transform: rotate(-70deg);
}
.element
{
transform-origin: 100% 100%;
transform: rotate(-70deg);
}
Il suffit de les séparer par des espaces
.element
{
transform: rotate(90deg) translateX(100px);
}
L'ordre des transformations importe
.element
{
transform: translateX(100px) rotate(90deg);
}
Étapes à suivre vis-à-vis de la compatibilité
Version préfixée pour une meilleure compatibilité
.element
{
-webkit-transform: rotate(-70deg);
-moz-transform: rotate(-70deg);
-ms-transform: rotate(-70deg);
-o-transform: rotate(-70deg);
transform: rotate(-70deg);
}
:)
rotateY(y) où y est un angle (deg, rad)
.element
{
transform: rotateY(250deg);
}
Par défaut, la rotation va sembler plate, sans perspective.
Pour lui rajouter de la perspective, il faut mettre l'élément dans un container et, en CSS, modifier sa propriété perspective.
.container
{
perspective: 800px;
}
.element
{
transform: rotateY(250deg);
}
rotateX(x) où x est un angle (deg, rad)
.element
{
transform: rotateX(250deg);
}
translateZ(z) où z est une distance (px, %, em, ...)
.element
{
transform: translateZ(100px);
}
scaleZ(z) où z est un multiplicateur
.element
{
transform: scaleZ(2);
}
Pas de différence ? C'est normal
scale3d(x, y, z) où x, y et z sont des multiplicateurs
.element
{
transform: scale3d(2, 1.7, 1.5);
}
Par défaut, l'arrière d'un élément est visible (sauf sur certains vieux navigateurs)
La propriété backface-visibility permet de contrôler cette visibilité
.element-1
{
backface-visibility: hidden;
}
.element-2
{
backface-visibility: visible;
}
Il est possible de changer la perspective de l'élément directement.
À éviter pour une perspective homogène entre les différents éléments.
La perspective doit être avant la transformation.
.element
{
transform: perspective(800px) rotateX(70deg);
}
Il est possible de propager la perspective de manière à obtenir un espace 3D homogène avec une perspective commune avec transform-style: preserve-3d
Cette modification doit être appliquée sur le parent dont les enfants doivent partager le même espace 3D
.element
{
transform-style: preserve-3d;
}
Il est possible d'appliquer des matrices de transformation.
En savoir plus pour les matheux et les curieux.
.element
{
transform: matrix(1, 0.5, 0.5, 1, 0, 0);
}