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.
Die transform-origin
CSS Eigenschaft setzt den Ursprung für die Transformationen eines Elements fest.
Probieren Sie es aus
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, 0, 0, 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: black;
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;
}
const crosshair = document.getElementById("crosshair");
const el = document.getElementById("example-element");
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 observer = new MutationObserver(() => {
update();
});
observer.observe(el, {
attributes: true,
attributeFilter: ["style"],
});
update();
crosshair.style.opacity = "1";
Der Transformationsursprung ist der Punkt, um den eine Transformation angewendet wird. Zum Beispiel ist der Transformationsursprung der rotate()
-Funktion der Rotationsmittelpunkt.
In der Praxis fügt diese Eigenschaft dem Element ein Paar von Übersetzungen um die anderen Transformationen des Elements hinzu. Die erste Übersetzung verschiebt den Transformationsursprung zum tatsächlichen Ursprung bei . Dann werden die anderen Transformationen angewendet, und da der Transformationsursprung bei liegt, wirken diese Transformationen um den Transformationsursprung. Schließlich wird die gegenläufige Übersetzung angewendet, um den Transformationsursprung zu seinem ursprünglichen Ort zurückzubringen. Folglich ergibt diese Definition
transform-origin: -100% 50%;
transform: rotate(45deg);
dieselbe Transformation wie
transform-origin: 0 0;
transform: translate(-100%, 50%) rotate(45deg) translate(100%, -50%);
Von rechts nach links gelesen, ist translate(100%, -50%)
die Übersetzung, um den Transformationsursprung zum eigentlichen Ursprung zu bringen, rotate(45deg)
ist die ursprüngliche Transformation, und translate(-100%, 50%)
ist die Übersetzung, um den Transformationsursprung zu seinem ursprünglichen Standort zurückzubringen.
Standardmäßig ist der Ursprung einer Transformation das center
.
Syntax
/* One-value syntax */
transform-origin: 2px;
transform-origin: bottom;
/* x-offset | y-offset */
transform-origin: 3cm 2px;
/* 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;
/* 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;
/* Global values */
transform-origin: inherit;
transform-origin: initial;
transform-origin: revert;
transform-origin: revert-layer;
transform-origin: unset;
Die transform-origin
Eigenschaft kann mit einem, zwei oder drei Werten angegeben werden, wobei jeder Wert ein Versatz darstellt. Nicht explizit definierte Versätze werden auf ihre entsprechenden Anfangswerte zurückgesetzt.
Wenn ein einzelner <length>
oder <percentage>
Wert definiert ist, repräsentiert er den horizontalen Versatz.
Wenn zwei oder mehr Werte definiert sind und entweder kein Wert ein Schlüsselwort ist, oder das einzige verwendete Schlüsselwort center
ist, repräsentiert der erste Wert den horizontalen und der zweite den vertikalen Versatz.
-
Ein-Wert-Syntax:
- Der Wert muss ein
<length>
, ein<percentage>
, oder eines der Schlüsselwörterleft
,center
,right
,top
undbottom
sein.
- Der Wert muss ein
-
Zwei-Werte-Syntax:
- Ein Wert muss ein
<length>
, ein<percentage>
, oder eines der Schlüsselwörterleft
,center
, undright
sein. - Der andere Wert muss ein
<length>
, ein<percentage>
, oder eines der Schlüsselwörtertop
,center
, undbottom
sein.
- Ein Wert muss ein
-
Drei-Werte-Syntax:
- Die ersten beiden Werte sind die gleichen wie bei der Zwei-Wert-Syntax.
- Der dritte Wert muss ein
<length>
sein. Er repräsentiert immer den Z-Versatz.
Werte
- x-Versatz
-
Ist ein
<length>
oder ein<percentage>
, der beschreibt, wie weit vom linken Rand der Box der Ursprung der Transformation gesetzt ist. - Versatz-Schlüsselwort
-
Ist eines der
left
,right
,top
,bottom
, odercenter
Schlüsselwörter, die den entsprechenden Versatz beschreiben. - y-Versatz
-
Ist ein
<length>
oder ein<percentage>
, der beschreibt, wie weit vom oberen Rand der Box der Ursprung der Transformation gesetzt ist. - x-Versatz-Schlüsselwort
-
Ist eines der
left
,right
, odercenter
Schlüsselwörter, die beschreiben, wie weit vom linken Rand der Box der Ursprung der Transformation gesetzt ist. - y-Versatz-Schlüsselwort
-
Ist eines der
top
,bottom
, odercenter
Schlüsselwörter, die beschreiben, wie weit vom oberen Rand der Box der Ursprung der Transformation gesetzt ist. - z-Versatz
-
Ist ein
<length>
(und niemals ein<percentage>
, was die Anweisung ungültig machen würde), der beschreibt, wie weit vom Auge des Benutzers der z=0 Ursprung gesetzt ist.
Die Schlüsselwörter sind praktische Abkürzungen und entsprechen den folgenden <percentage>
Werten:
Schlüsselwort | Wert |
---|---|
left |
0% |
center |
50% |
right |
100% |
top |
0% |
bottom |
100% |
Formale Definition
Anfangswert | 50% 50% 0 |
---|---|
Anwendbar auf | transformierbare Elemente |
Vererbt | Nein |
Prozentwerte | bezieht sich auf die Größe der äußeren Box |
Berechneter Wert | for <length> the absolute value, otherwise a percentage |
Animationstyp | simple list of length, percentage, or calc |
Hinweis:
Der Anfangswert von transform-origin
ist 0 0
für alle SVG-Elemente, außer Wurzel-<svg>
Elemente und <svg>
Elemente, die ein direktes Kind eines foreignObject sind, und deren transform-origin
ist 50% 50%
, wie andere CSS-Elemente. Siehe das SVG transform-origin Attribut für mehr Informationen.
Formale Syntax
transform-origin =
[ left | center | right | top | bottom | <length-percentage> ] |
[ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ] <length>? |
[ [ center | left | right ] && [ center | top | bottom ] ] <length>?
<length-percentage> =
<length> |
<percentage>
Beispiele
Eine Demonstration verschiedener Transformationswerte
Dieses Beispiel zeigt die Wirkung der Wahl verschiedener transform-origin
Werte für eine Vielzahl von Transformationsfunktionen.
Spezifikationen
Specification |
---|
CSS Transforms Module Level 1 # transform-origin-property |
Browser-Kompatibilität
Loading…