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-Eigenschaft von CSS legt den Ursprung der Transformationen für ein Element 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(/de/docs/Web/CSS/transform-function/rotate) das Rotationszentrum.
Diese Eigenschaft umschließt im Grunde eine Reihe von Verschiebungen um die anderen Transformationen eines Elements. Die erste Verschiebung bewegt den Transformationsursprung zum wahren Ursprung bei . Dann werden die anderen Transformationen angewendet und da sich der Transformationsursprung bei befindet, wirken diese Transformationen um den Transformationsursprung. Schließlich wird die entgegengesetzte Verschiebung angewendet, um den Transformationsursprung an seinen ursprünglichen Ort zurückzubringen. Folglich ergibt diese Definition
transform-origin: -100% 50%;
transform: rotate(45deg);
die gleiche 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 Verschiebung, um den Transformationsursprung zum wahren Ursprung zu bringen, rotate(45deg) die ursprüngliche Transformation und translate(-100%, 50%) die Verschiebung, um den Transformationsursprung an seinen ursprünglichen Ort zurückzubringen.
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 mit einem, zwei oder drei Werten angegeben werden, wobei jeder Wert einen Versatz darstellt. Versätze, die nicht explizit definiert sind, werden auf ihre entsprechenden anfänglichen Werte zurückgesetzt.
Wenn ein einzelner <length> oder <percentage> Wert definiert ist, stellt er den horizontalen Versatz dar.
Wenn zwei oder mehr Werte definiert sind und keiner dieser Werte ein Schlüsselwort ist, oder das einzige verwendete Schlüsselwort center ist, dann stellt der erste Wert den horizontalen Versatz und der zweite den vertikalen Versatz dar.
-
Ein-Wert-Syntax:
- Der Wert muss eine
<length>, ein<percentage>, oder eines der Schlüsselwörterleft,center,right,topundbottomsein.
- 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 die gleichen wie bei der Zwei-Wert-Syntax.
- Der dritte Wert muss eine
<length>sein. Er stellt immer den Z-Versatz dar.
Werte
- x-offset
-
Ist eine
<length>oder ein<percentage>, die 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 den entsprechenden Versatz beschreibt. - y-offset
-
Ist eine
<length>oder ein<percentage>, die 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 eine
<length>(und niemals ein<percentage>, das die Anweisung ungültig machen würde), die beschreibt, wie weit vom Benutzerauge der Ursprung bei z=0 festgelegt ist.
Die Schlüsselwörter sind bequeme Kurzschriften 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 root <svg>-Elemente und <svg>-Elemente, die ein direktes Kind eines foreignObject sind, und deren transform-origin ist 50% 50%, wie bei anderen CSS-Elementen. Siehe das Attribut SVG transform-origin für weitere 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…