Menu

Rotation en CSS : rotate(), la propriété rotate et spin

Faites pivoter un élément avec transform: rotate(45deg) ou la propriété rotate, plus récente. Découvrez les unités d'angle (deg, turn, rad), la rotation autour d'un coin avec transform-origin, la rotation de textes et d'icônes, un indicateur de chargement qui tourne et la rotation 3D avec rotateX et rotateY.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Faire pivoter un élément

Deux façons, même résultat : la fonction rotate() dans transform, ou la propriété rotate seule. Les angles positifs tournent dans le sens des aiguilles d'une montre :

Les boîtes bleue et verte sont tournées exactement de la même façon, de 45 degrés dans le sens horaire autour de leur centre. La boîte ambre a un angle négatif, elle penche donc dans le sens inverse. La rotation ne déplace jamais la mise en page : chaque boîte occupe toujours son emplacement d'origine de 90 sur 60, c'est pourquoi les éléments tournés peuvent chevaucher leurs voisins.

Les unités d'angle

UnitéTour complet90 degrés
deg360deg90deg
turn1turn0.25turn
rad6.2832rad1.5708rad
grad400grad100grad

deg est le choix habituel ; turn se lit bien pour une rotation continue (rotate: 1turn). Les angles supérieurs à 360 sont autorisés et comptent dans les animations : rotate(720deg) dans une keyframe fait deux tours. Écrivez toujours l'unité : rotate(45) est invalide et ignoré.

Faites glisser le curseur pour voir un angle dans chaque unité :

Pivoter autour d'un coin : transform-origin

Un élément tourne autour de son centre par défaut. transform-origin déplace le pivot. Une aiguille d'horloge pivote sur son extrémité, pas sur son milieu :

L'extrémité basse de l'aiguille repose sur l'axe ambre au centre du cadran, et rotate: 120deg la place sur quatre heures. Supprimez la ligne transform-origin et l'aiguille tourne alors autour de son propre milieu, hors de l'axe.

Faire pivoter un texte et les étiquettes verticales

Une petite inclinaison avec rotate convient pour un badge ou un autocollant. Pour une étiquette vraiment verticale, writing-mode est préférable, car il change la mise en page : l'élément devient haut et étroit au lieu de chevaucher ce qui l'entoure.

L'affichage montre la taille de mise en page de chaque étiquette. Celle qui est tournée occupe toujours sa boîte d'origine, large et basse : elle laisse un espace vide à côté d'elle et dépasse au-dessus et en dessous de sa rangée, sur ce qui s'y trouve. Celle en writing-mode occupe une boîte haute et étroite. Ajouter rotate: 180deg la fait lire de bas en haut, le sens habituel d'une étiquette verticale.

Faire pivoter une icône au clic ou au survol

Tourner une flèche de 180 degrés est la façon standard de montrer qu'une section est ouverte. Combinez rotate avec une transition :

Le chevron est un carré avec deux bordures, tourné de 45 degrés pour pointer vers le bas. Quand le bouton est déplié, il passe à 225 degrés et pointe vers le haut, et la transition anime le demi-tour. C'est l'attribut aria-expanded qui pilote le style : l'état visuel et l'état annoncé par les lecteurs d'écran ne peuvent jamais diverger.

Un indicateur de chargement qui tourne

Une rotation continue va de 0 à 360 degrés, répétée avec une temporisation linear pour que la vitesse ne change jamais :

Avec seulement une keyframe to, l'animation part de la rotation propre de l'élément (aucune) et finit à 360deg, et infinite la répète sans saut, car 360deg ressemble à 0. Pour les personnes qui ont demandé à leur système moins d'animations, l'indicateur tourne trois fois moins vite. Plus d'informations sur les keyframes sur la page animation.

Rotation 3D : rotateX, rotateY

rotateX() fait basculer un élément vers l'arrière autour de l'axe horizontal et rotateY() le fait tourner autour de l'axe vertical, comme une porte. Sans perspective, ils donnent seulement un effet écrasé ; perspective sur le parent ajoute de la profondeur :

.scene { perspective: 600px; }
.card  { transform: rotateY(35deg); }
.flip  { transform: rotateY(180deg); backface-visibility: hidden; } /* card flip */

Pour mettre un élément en miroir plutôt que de le faire tourner, utilisez scale: -1 1 (un retournement horizontal). Une rotation de 180 degrés le met à l'envers, ce qui n'est pas la même chose.

Erreurs courantes

  • Un <span> ou un <a> qui ne tourne pas. Les éléments inline simples ignorent les transformations. Ajoutez display: inline-block.
  • Une rotation qui disparaît au survol. Une règle de survol avec transform: scale(1.1) remplace transform: rotate(...). Utilisez les propriétés séparées rotate et scale, ou listez les deux fonctions.
  • S'attendre à ce que la mise en page fasse de la place. Une image tournée garde sa boîte non tournée et chevauche ses voisines. Donnez au conteneur la taille tournée, ou utilisez writing-mode pour le texte.
  • Des indicateurs de chargement en ease. La temporisation par défaut accélère et ralentit à chaque tour. Utilisez linear.
  • Pivoter autour du mauvais point. Réglez transform-origin avant d'ajuster l'angle.

Questions fréquentes

Comment faire pivoter un élément en CSS ?

Utilisez transform: rotate(45deg); ou la propriété séparée rotate: 45deg;. Les angles positifs tournent dans le sens des aiguilles d'une montre et les angles négatifs dans le sens inverse, autour du centre de l'élément sauf si vous changez transform-origin.

Quelle est la différence entre transform: rotate() et la propriété rotate ?

Elles donnent le même rendu. La propriété rotate est indépendante de transform : une règle de survol peut changer scale ou translate sans supprimer la rotation, et chacune peut avoir sa propre transition. Ensemble, elles agissent comme transform: translate() rotate() scale(), quel que soit l'ordre dans lequel vous les déclarez.

Comment faire pivoter une image de 90 degrés en CSS ?

Ajoutez transform: rotate(90deg); (ou rotate: 90deg;) à l'img. L'image garde son espace d'origine dans la mise en page, donc une image haute passée en paysage peut chevaucher ses voisines ; prévoyez dans son conteneur la place de la taille tournée.

Comment faire tourner un élément en continu en CSS ?

Définissez @keyframes spin { to { rotate: 360deg; } } et appliquez animation: spin 1s linear infinite;. Utilisez linear pour que la vitesse reste constante, et ralentissez ou arrêtez l'animation sous prefers-reduced-motion: reduce.

Comment écrire un texte vertical en CSS ?

Pour une étiquette verticale, writing-mode: vertical-rl est en général préférable à rotate(90deg), car il change aussi la mise en page : l'élément occupe un espace vertical au lieu de chevaucher ses voisins. Utilisez rotate pour de petites inclinaisons décoratives.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER