transform-function

Le type de donnée <transform-function> représente une fonction qui, lorsqu'elle est appliquée à un élément, permet de modifier sa représentation géométrique. Ces transformation sont généralement exprimées sous forme de matrices et l'image obtenue peut être déterminée en appliquant la matrice de la transformation sur chaque point de l'image.

Coordonnées en deux dimensions

Il existe plusieurs modèles de repères géométriques permettant de décrire des transformations. Le repère utilisé le plus communément est le système cartésien.

Le système de coordonnées cartésiennes

Pour le système cartésien, chaque point de l'espace est décrit avec deux valeurs, l'abscisse et l'ordonnée. L'origine du repère (0, 0) correspond au coin supérieur gauche de l'élément. À la différence des conventions usuelles, l'axe verticale (y) se dirige vers le bas. Chaque point est décrit avec la notation (x,y).

Chaque fonction linéaire est décrite avec une matrice 2 x 2 :

ac bd

L'application d'une transformation consiste à multiplier la matrice de transformation au vecteur de coordonnées (x,y) :

.

On peut appliquer plusieurs transformations les unes à la suite des autres :

.

En utilisant cette notation, on peut décrire et enchaîner (ou composer) la plupart des transformations : des rotations, des homothéties et des distorsions. Une transformation qui n'est pas linéaire ne pourra pas être représentée par cet outil. Ainsi, l'opération de translation ne pourra pas être représentée par une matrice et devra être gérée à part.

Les coordonnées homogènes de Möbius utilisées en géométrie projective permettent d'obtenir des matrices de transformations 3x3. Bien que plus complexe et moins usitées, celles-ci permettent de représenter les translations car ces dernières correspondent à des fonctions linéaires pour cette algèbre.

Les fonctions de transformation

Plusieurs fonctions sont disponibles en CSS pour décrire des transformations. Chacune des fonctions qui suivent applique une opération géométrique, en 2D ou en 3D.

matrix()
La fonction matrix() permet de définir une matrice de transformation homogène en deux dimensions. Cette matrice contient six coefficients. Les valeurs constantes de ces matrices sont implicites et ne font donc pas partie des paramètres. Les autres paramètres sont décrits dans l'ordre des colonnes.
matrix(a, b, c, d, tx, ty) est une notation raccourcie pour matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1).
matrix3d()
La fonction matrix3d() permet de définir une transformation en trois dimensions grâce à une matrice homogène 4x4. Les 16 paramètres sont décrits dans l'ordre des colonnes.
perspective()
La fonction perspective() définit la distance entre le plan de coordonnées z=0 et l'œil de l'utilisateur. Cela permet de placer une perspective en trois dimensions sur l'élément. Chaque élément 3D pour lequel z est supérieur à 0 devient plus grand et chaque élément pour lequel z est négatif devient plus petit.
rotate()
La fonction rotate() définit une transformation qui déplace l'élément autour d'un point fixe (défini par la propriété transform-origin) sans le déformer. La quantité de mouvement est définie par l'angle passé en argument. Si la valeur fournie est positive, le mouvement se fait dans le sens des aiguilles d'une montre (sens horaire) et sinon dans le sens inverse (sens anti-horaire).
rotate3d()
La fonction rotate3d() définit une transformation qui déplace l'élément autour d'un axe donné, sans déformer l'élément. La quantité de mouvement est indiquée par l'angle passé en argument. Si celui-ci est positif, le mouvement se fera dans le sens des aiguilles d'une montre (sens horaire) et s'il est négatif, il se fera dans le sens anti-horaire. Contrairement aux rotations en deux dimensions (rotations planes), la composition des rotations en trois dimensions n'est pas commutative (autrement dit, l'ordre dans lequel elles sont appliquées a toute son importance).
rotatex()
La fonction rotateX() définit une transformation qui déplace un élément autour de l'axe des abscisses sans le déformer. La quantité de mouvement est indiquée par l'angle passé en argument. Si celui-ci est positif, le mouvement se fera dans le sens des aiguilles d'une montre (sens horaire) et s'il est négatif, il se fera dans le sens anti-horaire. L'origine de cette rotation est définie par la propriété transform-origin.
rotateX(a) est une notation raccourcie pour rotate3D(1, 0, 0, a).
rotatey()
La fonction rotateY() définit une transformation qui déplace un élément autour de l'axe des ordonnées sans le déformer. La quantité de mouvement est indiquée par l'angle passé en argument. Si celui-ci est positif, le mouvement se fera dans le sens des aiguilles d'une montre (sens horaire) et s'il est négatif, il se fera dans le sens anti-horaire. L'origine de cette rotation est définie par la propriété transform-origin.
rotateY(a) est une notation raccourcie pour rotate3D(0, 1, 0, a).
rotatez()
La fonction rotateZ() définit une transformation qui déplace un élément autour de l'axe Z sans le déformer. La quantité de mouvement est indiquée par l'angle passé en argument. Si celui-ci est positif, le mouvement se fera dans le sens des aiguilles d'une montre (sens horaire) et s'il est négatif, il se fera dans le sens anti-horaire. L'origine de cette rotation est définie par la propriété transform-origin.
rotateZ(a) est une notation raccourcie pour rotate3D(0, 0, 1, a).
scale()
La fonction scale() modifie la taille d'un élément. Elle permet d'appliquer une homothétie définie par un vecteur. Ce vecteur décrit l'amplification ou la réduction de l'élément selon chacun des deux axes plans. Si les deux coordonnées sont égales, l'homothétie sera uniforme et la forme de l'élément sera conservée.
scale3d()
La fonction scale3d() modifie la taille d'un élément. Elle permet d'appliquer une homothétie définie par un vecteur. Ce vecteur décrit l'amplification ou la réduction de l'élément selon les trois axes. Si les trpis coordonnées sont égales, l'homothétie sera uniforme et la forme de l'élément sera conservée.
scalex()
La fonction scaleX() modifie l'abscisse de chaque point de l'élément en la multipliant par un facteur. Si ce facteur vaut 1, la fonction de transformation correspondra à l'identité. Cette transformation n'est pas isotropique et les angles de l'élément ne sont pas conservés. scaleX(-1) permet de définir une symétrie axiale qui passe par l'axe vertical de l'origine (définie par la propriété transform-origin).
scaleX(sx) est une notation raccourcie pour scale(sx, 1) ou pour scale3d(sx, 1, 1).
scaley()
La fonction scaleY() modifie l'ordonnée de chaque point de l'élément en la multipliant par un facteur. Si ce facteur vaut 1, la fonction de transformation correspondra à l'identité. Cette transformation n'est pas isotropique et les angles de l'élément ne sont pas conservés. scaleY(-1) permet de définir une symétrie axiale qui passe par l'axe horizontal de l'origine (définie par la propriété transform-origin).
scaleY(sy) est une notation raccourcie pour scale(1, sy) ou pour scale3d(1, sy, 1).
scalez()
La fonction scaleZ() modifie la côte de chaque point de l'élément en la multipliant par un facteur. Si ce facteur vaut 1, la fonction de transformation correspondra à l'identité. Cette transformation n'est pas isotropique et les angles de l'élément ne sont pas conservés. scaleZ(-1) permet de définir une symétrie axiale qui passe par l'axe Z de l'origine (définie par la propriété transform-origin).
scaleZ(sz) est une notation raccourcie pour scale3d(1, 1, sz).
skew()
La fonction skew() permet de décrire une distorsion de l'élément où chaque point est tourné d'un angle dans chaque direction. Plus le point est éloigné de l'origine, plus grande sera la transformation appliquée.
skewx()
La fonction skewX() permet de distordre un élément dans la direction horizontale. Le résultat est obtenu en augmentant l'abscisse par une valeur proportionnelle à l'angle et à la distance par rapport à l'origine. Plus le point est éloigné de l'origine, plus grande sera la transformation appliquée.
skewy()
La fonction skewY() permet de distordre un élément dans la direction verticale. Le résultat est obtenu en augmentant l'ordonnée par une valeur proportionnelle à l'angle et à la distance par rapport à l'origine. Plus le point est éloigné de l'origine, plus grande sera la transformation appliquée.
translate()
La fonction translate() permet de déplacer un élément sur le plan formé par le document. Cette transformation est caractérisée par un vecteur contenant deux coordonnées dont chacune définit la quantité de déplacement horizontale et verticale.
translate3d()
La fonction translate3d() permet de déplacer un élément dans l'espace en 3D. Cette transformation est caractérisée par un vecteur en 3 dimensions dont les coordonnées définissent les quantités de déplacement respectives aux trois axes.
translatex()
The translateX() CSS function moves the element horizontally on the plane. This transformation is characterized by a <length> defining how much it moves horizontally.
translateX(tx) is a shortcut for translate(tx, 0).
translatey()
La fonction translateY() permet de déplacer un élément verticalement dans le plan. Cette transformation est caractérisée par une valeur de type <length> qui définit la quantité de déplacement vertical.
translateY(ty) est une notation raccourcie pour translate(0, ty).
translatez()
La fonction translateZ() permet de déplacer un élément sur l'axe z de l'espace en 3D. Cette transformation est caractérisée par une valeur de type <length> qui définit la quantité de déplacement.
translateZ(tz) est une notation raccourcie pour translate3d(0, 0, tz).

Spécifications

Spécification État Commentaires
CSS Transforms Level 1
La définition de 'transform' dans cette spécification.
Version de travail Définition initiale.

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple (Oui) 3.5 (1.9.1)[1] 9.0[2] 10.5 3.1
Prise en charge de la 3D 12.0 10.0 (10.0) 10.0 15.0 4.0
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple 2.1 (Oui) (Oui) (Oui) 11.5 3.2
Prise en charge de la 3D 3.0 (Oui) (Oui) (Oui) 22 3.2

[1] Gecko 14.0 a retiré la prise en charge expérimentale de skew(). Celle-ci a été réintroduite dans Gecko 15.0 pour des raisons de compatibilité. Cette fonctionnalité n'est pas standard et sera vraisemblablement retirée à l'avenir. Elle ne doit pas être utilisée sur le Web.
Avant Firefox 16, les valeurs de translation pour matrix() et matrix3d() pouvait être des valeurs de type length et de type number.

[2] Internet Explorer 5.5 et les versions ultérieures prennent en charge un filtre propriétaire : Matrix Filter qui peut être utilisé pour obtenir un effet analogue.
Internet Explorer 9.0 et les versions antérieures ne prennent pas en charge les transformations 3D. Le mélange de fonctions de transformations 3D et 2D (ex. -ms-transform: rotate(10deg) translateZ(0);) empêchera l'application de toute la propriété.

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight, mrstork
 Dernière mise à jour par : SphinxKnight,