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 legt den Ursprung für 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: #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";
});
Der Transformationsursprung ist der Punkt, um den eine Transformation angewendet wird. Zum Beispiel ist der Transformationsursprung der rotate()
Funktion das Rotationszentrum.
Im Endeffekt umschließt diese Eigenschaft ein Paar von Translationen um die anderen Transformationen des Elements. Die erste Translation verschiebt den Transformationsursprung zum tatsächlichen Ursprung bei . Dann werden die anderen Transformationen angewendet, und da sich der Transformationsursprung bei befindet, wirken diese Transformationen um den Transformationsursprung herum. Schließlich wird die entgegengesetzte Translation angewendet, die den Transformationsursprung wieder an seinen ursprünglichen Ort verschiebt. Folglich führt diese Definition
transform-origin: -100% 50%;
transform: rotate(45deg);
zur gleichen 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 Translation, um den Transformationsursprung zum tatsächlichen Ursprung zu bringen, rotate(45deg)
die ursprüngliche Transformation und translate(-100%, 50%)
die Translation, um den Transformationsursprung wieder an seinen ursprünglichen Ort zu bringen.
Standardmäßig ist der Ursprung einer Transformation 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 unter Verwendung von einem, zwei oder drei Werten angegeben werden, wobei jeder Wert ein Offset darstellt. Offsets, die nicht explizit definiert sind, werden auf ihre entsprechenden Initialwerte zurückgesetzt.
Wenn ein einzelner <length>
oder <percentage>
Wert definiert ist, stellt er das horizontale Offset dar.
Wenn zwei oder mehr Werte definiert sind und entweder kein Wert ein Schlüsselwort ist oder das einzige verwendete Schlüsselwort center
ist, dann stellt der erste Wert das horizontale Offset dar und der zweite das vertikale Offset.
-
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-Wert-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-Wert-Syntax:
- Die ersten beiden Werte sind identisch mit der Zwei-Wert-Syntax.
- Der dritte Wert muss ein
<length>
sein. Er stellt immer das Z-Offset dar.
Werte
- x-offset
-
Ist ein
<length>
oder ein<percentage>
, das beschreibt, wie weit vom linken Rand der Box der Ursprung der Transformation festgelegt ist. - offset-keyword
-
Ist eines der Schlüsselwörter
left
,right
,top
,bottom
odercenter
, das das entsprechende Offset beschreibt. - y-offset
-
Ist ein
<length>
oder ein<percentage>
, das beschreibt, wie weit vom oberen Rand der Box der Ursprung der Transformation festgelegt ist. - x-offset-keyword
-
Ist eines der Schlüsselwörter
left
,right
odercenter
, das beschreibt, wie weit vom linken Rand der Box der Ursprung der Transformation festgelegt ist. - y-offset-keyword
-
Ist eines der Schlüsselwörter
top
,bottom
odercenter
, das beschreibt, wie weit vom oberen Rand der Box der Ursprung der Transformation festgelegt ist. - z-offset
-
Ist ein
<length>
(und niemals ein<percentage>
, was die Aussage ungültig machen würde), das beschreibt, wie weit von der Benutzeransicht der Ursprung des z=0 festgelegt ist.
Die Schlüsselwörter sind bequeme 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 Initialwert von transform-origin
ist 0 0
für alle SVG-Elemente außer für die Wurzel-<svg>
-Elemente und <svg>
-Elemente, die ein direktes Kind eines foreignObject sind, und deren transform-origin
ist 50% 50%
, wie bei anderen CSS-Elementen. Weitere Informationen finden Sie im SVG transform-origin Attribut.
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 Auswirkung der Wahl verschiedener transform-origin
Werte für eine Vielzahl von Transformationsfunktionen.
Spezifikationen
Specification |
---|
CSS Transforms Module Level 1 # transform-origin-property |