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
.block
{
transform: scale(3, 1.3);
}
scaleX(x) où x est un multiplicateur
.block
{
transform: scaleX(3);
}
scaleX(y) où y est un multiplicateur
.block
{
transform: scaleY(1.3);
}
translate(x, y) où x et y sont des distances (px, %, em, ...)
.block
{
transform: translate(200px, 50px);
}
translateX(x) où x est une distance (px, %, em, ...)
.block
{
transform: translateX(200px);
}
translateY(y) où y est une distance (px, %, em, ...)
.block
{
transform: translateY(50px);
}
rotate(a) où a est un angle (deg, rad)
.block
{
transform: rotate(70deg);
}
skew(x,y) où x et y sont des angles (deg, rad)
Ne pas utiliser skew seul !
skewX(x) où x est un angle (deg, rad)
.block
{
transform: skewX(-50deg);
}
skewY(y) où y est un angle (deg, rad)
.block
{
transform: skewY(-50deg);
}
Il est possible de changer le centre de la transformation à l'aide de transform-origin
.block
{
transform-origin: 0 0;
transform: rotate(-70deg);
}
.block
{
transform-origin: 50% 50%;
transform: rotate(-70deg);
}
.block
{
transform-origin: 100% 100%;
transform: rotate(-70deg);
}
Il suffit de les séparer par des espaces
.block
{
transform: rotate(90deg) translateX(100px);
}
.block
{
transform: translateX(100px) rotate(90deg);
}
Étapes à suivre vis-à-vis de la compatibilité
Connaître la compatibilité
Version préfixée pour une meilleure compatibilité
.block
{
-webkit-transform: rotate(-70deg); /* Chrome / Safari */
-moz-transform: rotate(-70deg); /* Firefox */
-ms-transform: rotate(-70deg); /* Internet Explorer */
-o-transform: rotate(-70deg); /* Opera */
transform: rotate(-70deg); /* General */
}
:)
rotateY(y) où y est un angle (deg, rad)
.block
{
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 la propriété perspective.
.container
{
perspective:800px;
}
.block
{
transform: rotateY(250deg);
}
rotateX(x) où x est un angle (deg, rad)
.block
{
transform: rotateX(250deg);
}
translateZ(z) où z est une distance (px, %, em, ...)
.block
{
transform: translateZ(100px);
}
scaleZ(z) où z est un multiplicateur
.block
{
transform: scaleZ(2);
}
Pas de différence ? C'est normal
scale3d(x, y, z) où x, y et z sont des multiplicateurs
.block
{
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é
.block-1
{
backface-visibility: hidden;
}
.block-2
{
backface-visibility: visible;
}
Il est possible de changer l'impact de la perspective. Cela ne concerne que les déformations 3D (évident)
La perspective doit être avant la transformation
.block
{
transform: perspective(800px) rotateX(90deg);
}
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
.block
{
transform-style: preserve-3d;
}
Il est possible d'appliquer des matrices de transformation.
En savoir plus pour les matheux et les curieux.
.block
{
transform: matrix(1.06, 1.84, 0.54, 2.8, 466px, 482px);
}