transform-origin
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
La propriété transform-origin
permet de modifier l'origine du repère pour les opérations de transformation d'un élément.
Exemple interactif
transform-origin: center;
transform-origin: top left;
transform-origin: 50px 50px;
/* 3D rotation with z-axis origin */ transform-origin: bottom right 60px;
<section id="default-example"> <div id="example-container"> <div id="example-element">Rotate me!</div> <img alt="" id="crosshair" src="/shared-assets/images/examples/crosshair.svg" width="24px" /> <div id="static-element"></div> </div> </section>
@keyframes rotate { from { transform: rotate(0); } to { transform: rotate(30deg); } } @keyframes rotate3d { from { transform: rotate3d(0); } to { transform: rotate3d(1, 2, 0, 60deg); } } #example-container { width: 160px; height: 160px; position: relative; } #example-element { width: 100%; height: 100%; display: flex; position: absolute; align-items: center; justify-content: center; background: #f7ebee; color: #000000; font-size: 1.2rem; text-transform: uppercase; } #example-element.rotate { animation: rotate 1s forwards; } #example-element.rotate3d { animation: rotate3d 1s forwards; } #crosshair { width: 24px; height: 24px; opacity: 0; position: absolute; } #static-element { width: 100%; height: 100%; position: absolute; border: dotted 3px #ff1100; }
"use strict"; window.addEventListener("load", () => { function update() { const selected = document.querySelector(".selected"); /* Restart the animation https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Tips */ el.className = ""; window.requestAnimationFrame(() => { window.requestAnimationFrame(() => { el.className = el.style.transformOrigin.split(" ")[2] === "60px" ? "rotate3d" : "rotate"; }); }); const transformOrigin = getComputedStyle(el).transformOrigin; const pos = transformOrigin.split(/\s+/); crosshair.style.left = `calc(${pos[0]} - 12px)`; crosshair.style.top = `calc(${pos[1]} - 12px)`; } const crosshair = document.getElementById("crosshair"); const el = document.getElementById("example-element"); const observer = new MutationObserver(() => { update(); }); observer.observe(el, { attributes: true, attributeFilter: ["style"], }); update(); crosshair.style.opacity = "1"; });
Par exemple, l'origine par défaut pour la fonction rotate()
est le centre de la rotation. Cette propriété est utilisée en :
- Translatant l'élément avec l'opposé de la valeur fournie
- Appliquant la transformation souhaitée sur l'élément
- Translatant l'élément avec la valeur fournie pour cette propriété.
Les valeurs qui ne sont pas définies explicitement sont réinitialisées avec les valeurs correspondantes.
Par défaut, l'origine d'une transformation est center
.
Syntaxe
/* Utilisation d'une seule valeur */ transform-origin: 2px; transform-origin: bottom; /* x-offset y-offset */ transform-origin: 3cm 2px; /* y-offset x-offset-keyword */ transform-origin: 2px left; /* x-offset-keyword y-offset */ transform-origin: left 2px; /* x-offset-keyword y-offset-keyword */ transform-origin: right top; /* y-offset-keyword x-offset-keyword */ transform-origin: top right; /* x-offset y-offset z-offset */ transform-origin: 2px 30% 10px; /* y-offset x-offset-keyword z-offset */ transform-origin: 2px left 10px; /* x-offset-keyword y-offset z-offset */ transform-origin: left 5px -3px; /* x-offset-keyword y-offset-keyword z-offset */ transform-origin: right bottom 2cm; /* y-offset-keyword x-offset-keyword z-offset */ transform-origin: bottom right 2cm; /* Valeurs globales */ transform-origin: inherit; transform-origin: initial; transform-origin: unset;
La propriété transform-origin
peut être définie en utiisant une, deux ou trois valeurs.
Avec une valeur, celle-ci doit être :
- Une longueur (type
<length>
) - Un pourcentage (type
<percentage>
- Un mot-clé parmi
left
,center
,right
,top
,bottom
.
- Une longueur (type
Avec deux valeurs
- La première valeur doit être une longueur (type
<length>
), un pourcentage (type<percentage>
ou un mot-clé parmileft
,center
,right
- La seconde valeur doit être une longueur (type
<length>
), un pourcentage (type<percentage>
ou un mot-clé parmitop
,center
,bottom
.
- La première valeur doit être une longueur (type
Avec trois valeurs
- Les deux premières valeurs doivent être structurées comme la syntaxe avec deux valeurs
- La troisième valeur doit être une longueur (type
<length>
Valeur
x-offset
Une valeur du type
<length>
ou<percentage>
qui décrit la distance, depuis le bord gauche de la boîte, à laquelle l'origine de la transformation sera placée.offset-keyword
Un mot-clé parmi
left
,right
,top
,bottom
oucenter
qui décrit le décalage correspondant.y-offset
Une valeur du type
<length>
ou<percentage>
qui décrit la distance, depuis le bord haut de la boîte, à laquelle l'origine de la transformation sera placée.x-offset-keyword
Un mot-clé parmi
left
,right
oucenter
qui décrit la distance, depuis le bord gauche de la boîte, à laquelle l'origine de la transformation sera placée.y-offset-keyword
Un mot-clé parmi
top
,bottom
oucenter
qui décrit la distance, depuis le bord haut de la boîte, à laquelle l'origine de la transformation sera placée.z-offset
Une valeur du type
<length>
(et jamais une valeur du type<percentage>
, sinon la déclaration serait invalide) qui décrit la distance, depuis l'œil de l'utilisateur, de l'origine de la transformation sur l'axe de profondeur (z)..
Les mots-clés sont des raccourcis qui correspondent aux valeurs <percentage>
suivantes :
Mot-clé | Valeur |
---|---|
left | 0% |
center | 50% |
right | 100% |
top | 0% |
bottom | 100% |
Définition formelle
Valeur initiale | 50% 50% 0 |
---|---|
Applicabilité | éléments transformables |
Héritée | non |
Pourcentages | se rapporte à la taille de la boîte de l'élément |
Valeur calculée | pour une valeur de type <length> sa valeur absolue, sinon un pourcentage |
Type d'animation | simple list of length, percentage, or calc |
Syntaxe formelle
Exemples
Voir la page sur l'utilisation des transformations CSS pour des exemples supplémentaires.
Illustrations des différentes valeurs de transform
Cet exemple illustre ce que donnent les différentes valeurs de transform-origin
pour différentes fonctions de transformation.
Spécifications
Specification |
---|
CSS Transforms Module Level 1 # transform-origin-property |