--- title: transform-origin slug: Web/CSS/transform-origin tags: - CSS - CSS Property - CSS Transforms - Reference - 'default value: center' - 'recipe:css-property' - transform-origin translation_of: Web/CSS/transform-origin ---
transform-origin は CSS のプロパティで、要素の変形における原点を設定します。
このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 https://github.com/mdn/interactive-examples をクローンしてプルリクエストを送信してください。
変形の原点とは、それを中心に変形が適用される点です。例えば、 rotate() 関数における変形の原点は、回転の中心です。
このプロパティは最初にプロパティ値の反対に平行移動し、それから要素の変形を適用し、プロパティ値の分だけ平行移動する形でで適用されます。
すなわち、
transform-origin: -100% 50%; transform: rotate(45deg);
この定義は以下の変形と同じです。
transform-origin: 0 0; transform: translate(-100%, 50%) rotate(45deg) translate(100%, -50%);
既定で、変形の原点は center です。
/* 値1つの構文 */ 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; /* グローバル値 */ transform-origin: inherit; transform-origin: initial; transform-origin: unset;
transform-origin プロパティは、オフセットを表す1~3つの値を使用して指定することができます。明示的に定義されなかったオフセットは、それぞれの対応する初期値にリセットされます。
2つ以上の値が定義され、どちらもの値もキーワードでない場合、または使われているキーワードが center だけであった場合、最初の値は水平方向のオフセットであり、二番目の値は垂直方向のオフセットです。
left, center, right, top, bottom のうちの1つでなければなりません。left, center, right のうちの1つでなければなりません。top, center, bottom のうちの1つでなければなりません。left, right, top, bottom, center のいずれかのキーワードで、対応するオフセットを表します。left, right, center のいずれかのキーワードで、ボックスの左端から変形の原点までの距離を示します。top, bottom, center のいずれかのキーワードで、ボックスの上端から変形の原点までの距離を示します。キーワードは便利な速記であり、次の {{cssxref("<percentage>")}} 値に相当します。
| キーワード | 値 |
|---|---|
left |
0% |
center |
50% |
right |
100% |
top |
0% |
bottom |
100% |
{{CSSInfo}}
| コード | サンプル |
|---|---|
|
|
<div class="box1"> </div>
.box1 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: none;
-webkit-transform: none;
}
{{EmbedLiveSample('transform_none', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box2"> </div>
.box2 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: rotate(30deg);
-webkit-transform: rotate(30deg);
}
{{EmbedLiveSample('transform_rotate_only', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box3"> </div>
.box3 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform-origin: 0 0;
-webkit-transform-origin: 0 0;
transform: rotate(30deg);
-webkit-transform: rotate(30deg);
}
{{EmbedLiveSample('transform_rotate', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box4"> </div>
.box4 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform-origin: 100% 100%;
-webkit-transform-origin: 100% 100%;
transform: rotate(30deg);
-webkit-transform: rotate(30deg);
}
{{EmbedLiveSample('transform_rotate_with_percentage', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box5"> </div>
.box5 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform-origin: -1em -3em;
-webkit-transform-origin: -1em -3em;
transform: rotate(30deg);
-webkit-transform: rotate(30deg);
}
{{EmbedLiveSample('transform_rotate_with_em', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box6"> </div>
.box6 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: scale(
{{EmbedLiveSample('transform_scale_only', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box7"> </div>
.box7 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: scale(
{{EmbedLiveSample('transform_scale_without_origin', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box8"> </div>
.box8 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: scale(
{{EmbedLiveSample('transform_scale', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box9"> </div>
.box9 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: skewX(50deg);
-webkit-transform: skewX(50deg);
transform-origin: 100% -30%;
-webkit-transform-origin: 100% -30%;
}
{{EmbedLiveSample('transform_skew_x', '', 120, '', '', 'no-button') }}
|
|
|
<div class="box10"> </div>
.box10 {
margin: 0.5em;
width: 3em;
height: 3em;
border: solid 1px;
background-color: palegreen;
transform: skewY(50deg);
-webkit-transform: skewY(50deg);
transform-origin: 100% -30%;
-webkit-transform-origin: 100% -30%;
}
{{EmbedLiveSample('transform_skew_y', '', 120, '', '', 'no-button') }}
|
| 仕様書 | 状態 | 備考 |
|---|---|---|
| {{ SpecName('CSS3 Transforms', '#transform-origin-property', 'transform-origin') }} | {{ Spec2('CSS3 Transforms') }} |
{{Compat("css.properties.transform-origin")}}