Movatterモバイル変換


[0]ホーム

URL:


  1. 給開發者的 Web 技術文件
  2. CSS
  3. Reference
  4. Properties
  5. transform-origin

此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。

View in EnglishAlways 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 2015年9月.

CSS 內的**transform-origin**屬性可以設定元素變化的原點。

嘗試一下

transform-origin: center;
transform-origin: top left;
transform-origin: 50px 50px;
/* 3D rotation with z-axis origin */transform-origin: bottom right 60px;
<section>  <div>    <div>Rotate me!</div>    <img      alt=""           src="/shared-assets/images/examples/crosshair.svg"      width="24px" />    <div></div>  </div></section>
@keyframes rotate {  from {    transform: rotate(0);  }  to {    transform: rotate(30deg);  }}@keyframes rotate3d {  from {    transform: rotate3d(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";});

變化原點指的是應用變化的點。舉例來說,rotate()函數的原點為旋轉中心。 (This property is applied by first translating the element by the negated value of the property, then applying the element's transform, then translating by the property value.)

語法

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: unset;

transform-origin 屬性可以使用多次,每一次都代表著一個偏移量。若未設定偏移量,則重置為其對應的初始值

If two or more values are defined and either no value is a keyword, or the only used keyword iscenter, then the first value represents the horizontal offset and the second represents the vertical offset.

  • One-value syntax:

  • Two-value syntax:

  • Three-value syntax:

    • The first two values are the same as for the two-value syntax.
    • The third value must be a<length>. It always represents the Z offset.

Values

x-offset

Is a<length> or a<percentage> describing how far from the left edge of the box the origin of the transform is set.

offset-keyword

Is one of theleft,right,top,bottom, orcenter keyword describing the corresponding offset.

y-offset

Is a<length> or a<percentage> describing how far from the top edge of the box the origin of the transform is set.

x-offset-keyword

Is one of theleft,right, orcenter keyword describing how far from the left edge of the box the origin of the transform is set.

y-offset-keyword

Is one of thetop,bottom, orcenter keyword describing how far from the top edge of the box the origin of the transform is set.

z-offset

Is a<length> (and never a<percentage> which would make the statement invalid) describing how far from the user eye the z=0 origin is set.

The keywords are convenience shorthands and match the following<percentage> values:

KeywordValue
left0%
center50%
right100%
top0%
bottom100%

Formal 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>

範例

<div>  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: none;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: rotate(30deg);</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: rotate(30deg);transform-origin: 0 0;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: rotate(30deg);transform-origin: 100% 100%;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: rotate(30deg);transform-origin: -1em -3em;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: scale(1.7);</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: scale(1.7);transform-origin: 0 0;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: scale(1.7);transform-origin: 100% -30%;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: skewX(50deg);transform-origin: 100% -30%;</pre  >  <div>    <div>&nbsp;</div>    <div>&nbsp;</div>  </div>  <pre>transform: skewY(50deg);transform-origin: 100% -30%;</pre  ></div>
.container {  display: grid;  grid-template-columns: 200px 100px;  gap: 20px;}.example {  position: relative;  margin: 0 2em 4em 5em;}.box {  display: inline-block;  width: 3em;  height: 3em;  border: solid 1px;  background-color: palegreen;}.original {  position: absolute;  left: 0;  opacity: 20%;}.box1 {  transform: none;}.box2 {  transform: rotate(30deg);}.box3 {  transform: rotate(30deg);  transform-origin: 0 0;}.box4 {  transform: rotate(30deg);  transform-origin: 100% 100%;}.box5 {  transform: rotate(30deg);  transform-origin: -1em -3em;}.box6 {  transform: scale(1.7);}.box7 {  transform: scale(1.7);  transform-origin: 0 0;}.box8 {  transform: scale(1.7);  transform-origin: 100% -30%;}.box9 {  transform: skewX(50deg);  transform-origin: 100% -30%;}.box10 {  transform: skewY(50deg);  transform-origin: 100% -30%;}

規範

Specification
CSS Transforms Module Level 1
# transform-origin-property
預設值50% 50% 0
適用於可變形元素
繼承與否
百分比指邊界框的尺寸
Computed valuefor<length> the absolute value, otherwise a percentage
動畫類型包含長度、百分比或 calc 的簡單列表

瀏覽器相容性

參見

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2026 Movatter.jp