CSS - transform

トップ > CSSリファレンス > transform

概要

属性名 transform
none | <transform-function>+
初期値none
適用可能要素トランスフォーム可能な要素
継承継承しない
メディアvisual
アニメーショントランスフォームとして可能

サポート (説明)

CSSIE/EdgeFirefoxChromeOperaSafari
基本CSS39(-ms)
10
3.5(-moz)
16
4(-webkit)
36
15(-webkit)
23
3.1(-webkit)
9
3DCSS310(制限有)10(-moz)
16
12(-webkit)
36
15(-webkit)
23
4(-webkit)
9

説明

transform 属性を用いて、要素を右方向(X軸方向)、下方向(Y軸方向)に、移動、拡大、縮小、傾斜、回転させたりすることができます。また、3D 関数を用いると、画面に対して手前方向(Z軸方向)方向に移動、拡大、縮小、回転させ、三次元的な描写を行うことが可能となります。3D 効果を出すには、親要素に transform-style: preserve-3d を指定し、perspective で遠近法の視点を設定する必要があります。

使用例

下記の例では、要素(画像)を、X軸方向に 100px、Y軸方向に 10px 移動し、時計方向に 10度回転させています。

CSS
.test {
  transform: translate(100px, 10px) rotate(10deg);
}
HTML
<img src="./image/yuki.gif" width=60 height=80 class="test" alt="Yuki">
HTML
Yuki

トランスフォーム関数

◆ translate(tx, ty)
◆ translate3d(tx, ty, tz)
◆ translateX(tx)
◆ translateY(ty)
◆ translateZ(tz)

要素を X軸方向に tx、Y軸方向に ty、Z軸方向に tz の長さ分移動させます。

CSS
.test-translate {
  transform: translate(10px, 10px);
}
表示
Yuki
◆ scale(sx, sy)
◆ scale3d(sx, sy, sz)
◆ scaleX(sx)
◆ scaleY(sy)
◆ scaleZ(sz)

要素を X軸方向に sx倍、Y軸方向に sy倍、Z軸方向に sz倍拡大・縮小します。1.0 より大きな値を指定すると拡大、1.0 より小さな値を指定すると縮小になります。

CSS
.test-scale {
  transform: scale(0.7, 0.7);
}
表示
Yuki
◆ rotate(angle)
◆ rotate3d(rx, ry, rz, angle)
◆ rotateX(angle)
◆ rotateY(angle)
◆ rotateZ(angle)

rotate(angle) は、要素を angle だけ時計方向に回転させます。角度の指定方法は angle を参照してください。負の値を指定すると反時計回りに回転させます。rotate3d() は、[ 0, 0, 0 ] から [ rx, ry, rz ] に向かう直線を軸とし、角度 angle 分三次元回転させます。rotateX(angle) は X方向を軸とする回転で rotate3d(1, 0, 0, angle) と同じ、rotateY(angle) は Y方向を軸とする回転で rotate3d(0, 1, 0, angle) と同じ、rotateZ(angle) は Z方向を軸とする回転で rotate3d(0, 0, 1, angle) と同じ意味を持ちます。

CSS
.test-rotate {
  transform: rotate(10deg);
}
表示
Yuki
◆ skew(ax, ay)
◆ skewX(ax)
◆ skewY(ay)

skew() は、要素を横方向に ax、縦方向に ay だけ傾斜させます。ay は省略可能で、省略した場合は X方向のみ傾斜させます。skewX() は横方向のみ、skewY() は縦方向のみ傾斜させます。角度の指定方法は angle を参照してください。負の値を指定すると反時計回りに回転させます。

CSS
.test-skew {
  transform: skew(0deg, -15deg);
}
表示
Yuki
◆ perspective(length)

三次元変換を行った際の、Z軸=0 の面から視点までの距離を指定します。perspective() 関数の場合、指定した要素自体に適用されるのに対し、perspective プロパティの場合は、指定した要素の子要素に適用されます。視点の X座標、Y座標は perspective-origin で指定します。

◆ matrix(sx, ay, ax, sy, tx, ty)

translate(), scale(), skew() を同時に指定したような行列変換を行います。sx, ay, ax, sy, tx, ty には 10px や 30deg などの長さや角度ではなく、0.7 や 1.2 などの数値を指定します。tx, ty には translate() で指定するようなX方向、Y方向への移動距離を指定します。sx, sy には scale() で指定するような拡大・縮小率を指定します。ax, ay には、skew() で指定するような傾斜率を指定します。matrix(1, 0, 0, 1, 0, 0) を指定すると何も変換されません。具体的には、下記のベクトル演算を行い、返還後の座標を算出しています。

X sxaxtx X'
Y×aysytyY'
1  0 0 1 W'
CSS
.test-matrix {
  transform: matrix(0.8, 0, -0.5, 0.8, 20, 10);
}
表示
Yuki
◆ matrix3d(a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4, d1, d2, d3, d4)

元要素の X, Y, Z座標上の位置を、下記の 4x4 ベクトル演算を用いて変換した場所に表示します。

X a1b1c1d1 X'
Y×a2b2c2d2Y'
Z a3b3c3d3 Z'
1 a4b4c4d4 W'

matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) は下記の演算となり、何も変換が行われません。

X 1000 X
Y×0100Y
Z 0010 Z
1 0001 1

matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1) は下記の演算となり、translate3d(tx, ty, tz) と同じ効果となります。

X 100tx X + tx
Y×010tyY + ty
Z 001tz Z + tz
1 0001 1

matrix3d(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1) は下記の演算となり、scale3d(sx, sy, sz) と同じ効果となります。

X sx000 X * sx
Y×0sy00Y * sy
Z 00sz0 Z * sz
1 0001 1

rotateX(rx) は下記の演算となります。

X 1000 X
Y×0cos(rx)-sin(rx)0Y*cos(rx) + Z*sin(rx)
Z 0sin(rx)cos(rx)0 -Y*sin(rx) + Z*cos(rx)
1 0001 1
CSS
.test-matrix3d {
  transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 20, 20, 0, 1);
}
表示
Yuki

三次元変換のデモ

表示
Yuki
XYZ
translate:


rotate:


scale:


skew:

perspective:


三次元変換の使用例(2)

※ Chrome, Firefox, Opera, Edge の最新版で表示するとサイコロが動きます。IE11 では 2の面のみが表示されます。

CSS
.cube-container {
  position: relative;
  width: 40px;
  height: 40px;
  perspective: 1000px;
}
.cube {
  position: absolute;
  width: 40px;
  height: 40px;
  margin-top: 20px;
  margin-left: 20px;
  transform-style: preserve-3d;
  animation: roll-over 1s linear infinite;
}
.cube .side {
  position: absolute;
  box-sizing: border-box;
  width: 40px;
  height: 40px;
  border: 1px solid #666;
  text-align: center;
  font-size: 20pt;
}
.side1 { background: #f66; transform: rotateY(0deg) translateZ(20px); }
.side2 { background: #6f6; transform: rotateY(180deg) translateZ(20px); }
.side3 { background: #66f; transform: rotateY(90deg) translateZ(20px); }
.side4 { background: #6ff; transform: rotateY(-90deg) translateZ(20px); }
.side5 { background: #f6f; transform: rotateX(90deg) translateZ(20px); }
.side6 { background: #ff6; transform: rotateX(-90deg) translateZ(20px); }
@keyframes roll-over {
  from { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); }
  to { transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg); }
}
HTML
<div class="cube-container">
  <div class="cube">
    <div class="side side1">1</div>
    <div class="side side2">2</div>
    <div class="side side3">3</div>
    <div class="side side4">4</div>
    <div class="side side5">5</div>
    <div class="side side6">6</div>
  </div>
</div>
表示
1
2
3
4
5
6

関連項目

transform, transform-origin, transform-style, perspective, perspective-origin, backface-visibility

リンク


Copyright (C) 2015 杜甫々
初版:2015年12月13日、最終更新:2015年12月20日
http://www.tohoho-web.com/css/prop/transform.htm