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 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 das Rotationszentrum.
In der Praxis umschließt diese Eigenschaft ein Paar von Übersetzungen um die anderen Transformationen des Elements. Die erste Übersetzung 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 Übersetzung angewendet, um den Transformationsursprung zu seiner ursprünglichen Position zurückzubringen. Folglich führt diese Definition
transform-origin: -100% 50%;
transform: rotate(45deg);
zum gleichen Transformationsergebnis 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 tatsächlichen Ursprung zu bringen, rotate(45deg) ist die ursprüngliche Transformation und translate(-100%, 50%) ist die Übersetzung, um den Transformationsursprung zu seiner ursprünglichen Position zurückzubringen.
Standardmäßig liegt der Ursprung einer Transformation im 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 spezifiziert werden, wobei jeder Wert einen Versatz darstellt. Nicht explizit definierte Versätze werden auf ihre entsprechenden Anfangswerte zurückgesetzt.
Wenn ein einzelner <length> oder <percentage> Wert definiert ist, stellt dieser den horizontalen Versatz dar.
Wenn zwei oder mehr Werte definiert sind und 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 eine
<length>, ein<percentage>, oder eines der Schlüsselwörterleft,center,right,top, undbottomsein.
- Der Wert muss eine
-
Zwei-Wert Syntax:
- Ein Wert muss eine
<length>, ein<percentage>, oder eines der Schlüsselwörterleft,center, undrightsein. - Der andere Wert muss eine
<length>, ein<percentage>, oder eines der Schlüsselwörtertop,center, undbottomsein.
- Ein Wert muss eine
-
Drei-Wert Syntax:
- Die ersten beiden Werte sind dieselben wie bei der Zwei-Wert Syntax.
- Der dritte Wert muss eine
<length>sein. Er repräsentiert immer den Z-Versatz.
Werte
- x-offset
-
Ist eine
<length>oder ein<percentage>, das beschreibt, wie weit vom linken Rand des Kastens der Ursprung der Transformation gesetzt ist. - offset-keyword
-
Ist eines der Schlüsselwörter
left,right,top,bottom, odercenter, welches den entsprechenden Versatz beschreibt. - y-offset
-
Ist eine
<length>oder ein<percentage>, das beschreibt, wie weit vom oberen Rand des Kastens der Ursprung der Transformation gesetzt ist. - x-offset-keyword
-
Ist eines der Schlüsselwörter
left,right, odercenter, das beschreibt, wie weit vom linken Rand des Kastens der Ursprung der Transformation gesetzt ist. - y-offset-keyword
-
Ist eines der Schlüsselwörter
top,bottom, odercenter, das beschreibt, wie weit vom oberen Rand des Kastens der Ursprung der Transformation gesetzt ist. - z-offset
-
Ist eine
<length>(und niemals ein<percentage>, das die Aussage ungültig machen würde), das beschreibt, wie weit vom Betrachter das 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 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 Auswirkungen der Auswahl verschiedener transform-origin Werte für verschiedene Transformationsfunktionen.
Spezifikationen
| Specification |
|---|
| CSS Transforms Module Level 1> # transform-origin-property> |
Browser-Kompatibilität
Loading…