Yes You Web!

Publié le 18 avril 2020

Après les transformations 2D, les transitions et les animations, il est temps de passer au dernier article de la série, les transformations 3D.

Petit rappel pour bien visualiser le contexte :

  • Les transformations 2D permettent de modifier l’apparence d’un élément en l’étirant, le déplaçant, le faisant tourner…
  • Les transitions permettent de faire bouger un élément en le faisant passer d’un état à un autre
  • Les animations sont plusieurs transitions à la suite

Aujourd’hui, nous allons aborder la perspective pour faire des transformations en 3D. Et comme vous savez déjà faire des animations, vous allez pouvoir faire… des animations 3D !

Principe des transformations 3D

Les transformations 3D utilisent la même propriété que les transformations 2D, à savoir la propriété « transform ».

En revanche, on a de nouvelles fonctions de transformations :

  • rotate3d(x,y,z,angle) : pour des rotations en 3D.
  • translate3d(x,y,z) : pour des déplacements en 3D.
  • scale3d(x,y,z) : pour des changements d’échelle en 3D.
  • matrix3d() : spécifie une matrice de transformation 4×4 avec 16 valeurs entre les parenthèses.

Ce sont les versions courtes mais on peut toujours utiliser les versions longues avec scaleX(), scaleY(),… en les complétant avec scaleZ(), translateZ() et rotateZ() qui précisent le 3ème axe. Vous noterez qu’on a perdu la fonction « skew ».

De nouvelles propriétés sont également apparues pour pouvoir gérer cet affichage en 3D :

  • perspective : sans perspective, pas de 3D. Elle représente la notion de profondeur.
  • perspective-origin : définit l’origine de la perspective (Là où les points de fuite des éléments se rejoignent).
  • transform-style : définit si les éléments inclus subissent les transformations en 3D. 2 valeurs sont possibles : flat et preserve-3d.
  • backface-visibility : précise si les faces arrières des éléments sont visibles ou non. 2 valeurs sont possibles : visible et hidden.

Découverte des différentes fonctions

Nous allons passer en revue les différentes fonctions pour que ce soit bien clair pour vous, avant de passer à un exemple concret.

Définir la perspective

La perspective est la dimension qui permet de donner de la profondeur à un objet et donc de donner l’effet 3D. C’est une notion fréquemment utilisée en dessin pour faire des croquis réalistes. Elle est représentée par la distance entre l’oeil et la scène. Une perspective faible donne l’impression d’être proche de la scène ; une perspective élevée donne une impression de distance lointaine.

On peut utiliser la perspective via la propriété transform ou via la propriété perspective. Nous allons privilégier cette 2nde méthode car elle s’applique sur plusieurs éléments alors que la 1ère ne concerne qu’un élément. :

Copier

Définir l’origine du point de fuite

Voici une autre notion à bien comprendre pour réaliser des transformations 3D : le point de fuite. Il indique le sens dans lequel regarder la scène, c’est son point d’ancrage. Il peut y avoir plusieurs points de fuite, voici 3 exemples :

Yes You Web!

Point de fuite central :
vision frontale

Yes You Web!

2 points de fuite latéraux :
vision oblique

Yes You Web!

2 points de fuite horizontaux et 1 vertical :
vision aérienne

Par défaut, le point de fuite est placé au centre de l’élément mais il peut être déplacé grâce à la propriété perspective-origin.

La propriété perspective-origin prend une valeur horizontale et une valeur verticale :

Copier

Si on n’a pas besoin de tant de précision, on peut aussi utiliser les valeurs de placement : top, bottom, center, left, right. Ainsi, pour un point de fuite en haut à droite, on aura :

Copier

Définir le style de la transformation

La propriété transform-style définit si les éléments enfant d’un élément sont positionnés dans l’espace 3D ou s’ils sont aplatis dans le plan de l’élément.

La propriété peut prendre 2 valeurs : flat (valeur par défaut) ou preserve-3D.

Voici 2 les exemples en images.

Yes You Web!
Copier
Yes You Web!
Copier

Définir les faces visibles

Quand on tourne suffisamment un bloc, on va voir sa face arrière… ou pas… C’est à ça que sert la propriété backface-visibility.

Cette propriété a 2 valeurs : visible (valeur par défaut) ou hidden. Hidden va permettre de masquer l’arrière du bloc.

Visualiser ces notions en direct

Si comme nous vous avez un peu de mal avec la perspective, nous vous proposons de jouer avec l’outil ci-dessous. Bougez le curseur « perspective », plus vous faites descendre le nombre de pixel, plus l’impression de profondeur est grande.

Si vous voulez jouer avec le point de fuite et ses 2 axes, vous pouvez utiliser les curseurs dynamiques perspective-origin x et perspective-origin y.

Pour voir la propriété backface-visibility en action, cochez / décochez la case Backface visible.

See the Pen Perspective cube by Dave DeSandro (@desandro) on CodePen.

Transformations 3D en pratique

Nous allons maintenant voir comment se passent les rotations, les translations et les mises à l’échelle en 3D. Il faut bien retenir qu’on n’est plus sur 2 axes mais sur 3 : horizontal (x), vertical (y) et profondeur (z).

Yes You Web!

Vous pouvez définir une transformation sur un seul axe, dans ce cas vous aurez :

  • Axe x : rotateX(x) ; translateX(x) ; scaleX(x)
  • Axe y : rotateY(y) ; translateY(y) ; scaleY(y)
  • Axe z : rotateZ(z) ; translateZ(z) ; scaleZ(z)

En revanche, si vous voulez jouer sur les 3 axes, vous allez utiliser :

  • rotate3d(x, y, z)
  • translate3d(x, y, z)
  • scale3d(x, y, z)

Les rotations 3D

Commençons avec 3 exemples de rotations, une par axe et le code qui va avec. Passez votre souris sur chaque bloc rose et ne la touchez plus.

Rotation x

Exemple 1

Rotation y

Exemple 2

Rotation z

Exemple 3

Code HTML

Copier

Code CSS

Copier

Les translations 3D

Nous allons prendre l’exemple d’une translation sur l’axe Z, celui de la profondeur, avec 3 valeurs différentes. Cela pourrait donner ça :

Yes You Web!

La mise à l’échelle 3D

La mise à l’échelle ets difficile à visualiser en l’état, car il est dur d’épaissir un aplat. On l’utilise surtout en combinaison avec d’autres propriétés / fonctions. Sa version multi-axes s’écrit comme ça :

Copier

Exemple du carrousel

Voici un exemple de carrousel fait exclusivement avec tout ce qu’on a vu, impressionnant, non ?

See the Pen 3D Rotating Carousel by Sean Emmel (@seanemmel) on CodePen.

Conclusion

Voilà, nous espérons que cet article vous aura plu et vous permettra de vous amuser.
Si vous avez des questions, posez-les en commentaires ci-dessous.
Et n’hésitez pas à partager vos propres retours d’expérience !