Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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: 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/API/Web_Animations_API/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. Beispielsweise ist der Transformationsursprung der rotate() Funktion das Rotationszentrum.

Effektiv umhüllt diese Eigenschaft ein Paar von Translationen um die anderen Transformationen des Elements. Die erste Translation verschiebt den Transformationsursprung zur wahren Quelle bei (0,0). Dann werden die anderen Transformationen angewendet, und weil der Transformationsursprung bei (0,0) liegt, wirken diese Transformationen um den Transformationsursprung. Schließlich wird die entgegengesetzte Translation angewandt, die den Transformationsursprung zurück zu seiner ursprünglichen Position bringt. Folglich resultiert diese Definition

css
transform-origin: -100% 50%;
transform: rotate(45deg);

in der gleichen Transformation wie

css
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 zur wahren Quelle zu bringen, rotate(45deg) ist die ursprüngliche Transformation, und translate(-100%, 50%) ist die Translation, um den Transformationsursprung zu seiner ursprünglichen Position zurückzubringen.

Standardmäßig liegt der Ursprung einer Transformation im Center.

Syntax

css
/* 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 Angabe von einem, zwei oder drei Werten spezifiziert werden, wobei jeder Wert einen Versatz darstellt. Offsets, die nicht explizit definiert sind, werden auf ihre entsprechenden Anfangswerte 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 entweder kein Wert ein Schlüsselwort ist oder das einzige verwendete Schlüsselwort center ist, dann stellt der erste Wert den horizontalen Versatz und der zweite Wert den vertikalen Versatz dar.

  • Ein-Wert-Syntax:

    • Der Wert muss ein <length>, ein <percentage>, oder eines der Schlüsselwörter left, center, right, top und bottom sein.
  • Zwei-Wert-Syntax:

    • Ein Wert muss ein <length>, ein <percentage>, oder eines der Schlüsselwörter left, center und right sein.
    • Der andere Wert muss ein <length>, ein <percentage>, oder eines der Schlüsselwörter top, center und bottom sein.
  • Drei-Wert-Syntax:

    • Die ersten beiden Werte sind dieselben wie für die Zwei-Wert-Syntax.
    • Der dritte Wert muss ein <length> sein. Er stellt immer den Z-Versatz dar.

Werte

x-offset

Ist ein <length> oder ein <percentage>, der beschreibt, wie weit vom linken Rand der Box der Ursprung der Transformation gesetzt ist.

offset-keyword

Ist eines der left, right, top, bottom oder center Schlüsselwörter, das den entsprechenden Versatz beschreibt.

y-offset

Ist ein <length> oder ein <percentage>, der beschreibt, wie weit vom oberen Rand der Box der Ursprung der Transformation gesetzt ist.

x-offset-keyword

Ist eines der left, right oder center Schlüsselwörter, das beschreibt, wie weit vom linken Rand der Box der Ursprung der Transformation gesetzt ist.

y-offset-keyword

Ist eines der top, bottom oder center Schlüsselwörter, das beschreibt, wie weit vom oberen Rand der Box der Ursprung der Transformation gesetzt ist.

z-offset

Ist ein <length> (und niemals ein <percentage>, was die Aussage ungültig machen würde) und beschreibt, wie weit vom Nutzerauge der z=0 Ursprung gesetzt 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

Anfangswert50% 50% 0
Anwendbar auftransformierbare Elemente
VererbtNein
Prozentwertebezieht sich auf die Größe der äußeren Box
Berechneter Wertfor <length> the absolute value, otherwise a percentage
Animationstypsimple list of length, percentage, or calc

Hinweis: Der Anfangswert von transform-origin ist 0 0 für alle SVG-Elemente, außer für Wurzel-<svg>-Elemente und <svg>-Elemente, die ein direktes Kind eines foreignObject sind, und deren transform-origin 50% 50% ist, wie bei anderen CSS-Elementen. Sehen Sie sich das SVG transform-origin Attribut für weitere Informationen an.

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 eine Vielzahl von Transformationsfunktionen.

Spezifikationen

Specification
CSS Transforms Module Level 1
# transform-origin-property

Browser-Kompatibilität

Siehe auch