CSS - Fonction matrix()
Description de la fonction matrix()
.
La fonction matrix()
calcule une transformation composite à un élément.
Cette transformation peut faire intervenir des translations, des rotations, des changements de taille
ou des inclinaisons.
matrix()
peut donc remplacer toutes les autres fonctions de transformation :
translate()
, rotate()
, scale()
et skew()
.
Néanmoins son utilisation est plus complexe que celle des fonctions séparées, en particulier pour
déterminer la valeur des paramètres.
La fonction matrix() peut être utilisée avec :
transform
: Applique une transformation géométrique.
Syntaxe de la fonction matrix()
.
- transform: matrix(1, 0, 0, 1, 0, 0); a b c d e f
Les paramètres, de
a
àf
sont six nombres sans unités.a
etd
définissent les ratios de mises à l'échelle, respectivement en horizontal et en vertical.
Entre 0 et 1, ils réduisent la taille de l'élément ; supérieurs à 1 ils l'agrandissent. Les valeurs négatives sont acceptées et provoquent un effet miroir sur l'élément.
La mise à l'échelle d'un élément (effet de zoom) correspond au travail de la propriétéscale()
et de ses dérivées.
Exemples :matrix(2,0,0,1,0,0)
double la largeur de l'élément.
matrix(-1,0,0,1,0,0)
retourne l'élément horizontalement.
b
etc
définissent les inclinaisons appliquées à l'élément (on peut aussi parler de cisaillements). Si ces deux valeurs sont fixées à 0 aucune déformation ne sera appliquée. Les valeurs négatives sont acceptées.
Pour bien comprendre l'effet de ces deux paramètres, faites des tests avec le simulateur ci-dessous en ne précisant à chaque fois que l'une des deux valeurs. Essayez par exemple les valeurs suivantes :
matrix(1, 0.25, 0, 1, 0, 0)
matrix(1, 0, 0.25, 1, 0, 0)
e
etf
définissent une translation qui sera appliquée à l'élément, respectivement dans le sens horizontal et dans le sens vertical. Les valeurs négatives sont autorisées.
Testez dans le simulateur ci-dessous les syntaxes suivantes :
matrix(1, 0, 0, 1, 100, 0)
matrix(1, 0, 0, 1, 0, 50)
Remarque : la rotation de l'élément s'effectue par une combinaison des paramètres de mises à l'échelle et d'inclinaison. Par exemple, pour tourner l'élément d'un angle
a
, utilisez les valeurs suivantes :
matrix(cos(a), sin(a), -sin(a), cos(a), 0, 0)
Ce qui donne pour 30° :
matrix(0.87, 0.5, -0.5, 0.87, 0, 0)
Explication mathématique.
Si le calcul matriciel n'est pas votre tasse de thé, vous pouvez sans problème
sauter cette explication. Pour les autres, sachez que la fonction
matrix()
effectue la multiplication d'une matrice 3x3
composée avec les paramètres de la fonction et d'un vecteur composé
des coordonnées xy d'un point. On obtient alors un vecteur contenant les
nouvelles coordonnées du point. Ce calcul est effectué pour chacun des
coins de l'élément.
x
ety
sont les coordonnées originales du point.x'
et y' sont les coordonnées finales du point (après transformation).scx, skx, sky, scy, trx, try
sont les valeurs passsées en paramètres à la fonctionmatrix()
.
Le calcul matriciel donne les formules suivantes pour le calcul. Le symbole multiplié est le point, pour éviter la confusion avec x.
x' = scx . x + sky . y + trx
y' = skx . x + scy . y + try
Simulateur.
Le simulateur ci-dessous vous donne les paramètres de la fonction matrix()
équivalents à
une transformation de base (translation, rotation, etc).
Il ne permet pas de cumuler plusieurs transformations de base, ce qui est bien entendu possible en CSS.
Attention ! Dans ce cas l'ordre des transformations est important.
transform: matrix
Compatibilité et prise en charge suivant les navigateurs.
La plupart des navigateurs traitent correctement la fonction matrix()
ainsi que toutes les transformations.
Afficher le tableau de compatibilité (informations fournies par canIuse.com).
Voir aussi...
Transformations géométriques - Propriétés.
backface-visibility
: Visibilité de la face arrière de l'élément (pendant sa rotation).perspective
: Effet de perspective appliqué à un élément ayant subi une transformation 3D.perspective-origin
: Position de l'observateur dans le cas d'une déformation 3D avec perspective.transform
: Applique une transformation géométrique.transform-origin
: Point d'origine pour certaines transformations.transform-style
: Rendu des éléments soumis à une transformation 3D.
Transformations géométriques - Fonctions.
matrix3d()
: Applique une série de transformations 3D à un élément.perspective()
: Définit la hauteur de l'observateur dans le cas d'une transformation 3D.rotate()
: Définit une rotation de l'élément en 2D (dans le plan de l'écran).rotate3d()
: Définit une rotation 3D de l'élément autour d'un axe quelconque en 3D.rotateX()
: Définit une rotation de l'élément autour de l'axe X (en 3D),rotateY()
: Définit une rotation 3D de l'élément autour de l'axe Y.rotateZ()
: Définit une rotation de l'élément autour de l'axe Z.scale()
: Définit un agrandissement ou une réduction de l'élément.