今回はCSS3でもあまり一般的に知られてないtransformプロパティについて説明します。transformプロパティは2008年の11月まではWebkit系とAppleのブラウザとSafariの独自実装でしたが、
今後のブラウザでは、
今回説明するプロパティは
transformプロパティをサポートしているブラウザ
現在、
- 対応ブラウザ:
- Webkit nightly version (mac, win, linux)
- Firefox 3.
1 以上 - Safari 3.
1 以上 - Google chrome
なお、
Transformの基本
Transformプロパティは、
ファンクション名 | 機能 |
---|---|
transform-origin | transformの支点を設定 |
rotate | 回転 |
translate | 移動 |
scale | 拡大/ |
skew | X軸、 |
ファンクション名 | 機能 |
---|---|
backface-visibility | 要素の裏側の可視、 |
perspective | 奥行き |
perspective-origin | 奥行きの支点 |
transform-style | 2D |
Transformプロパティを学ぶ際は、
3DとはX軸、
- X軸
(上下方向) - Y軸
(左右方向) - Z軸
(奥行き)

Transformプロパティの記述方法
上述したように、
- -moz-transform: hoge;
- -webkit-transform: hoge;
- transform: hoge;
Transformプロパティの記述順序
transformプロパティは記述の順番に適用されます。特にscale
次ページからは、
transform-originプロパティ
transform-originはtransformプロパティを使用する際に重要なプロパティです。transform-originは
機能 | transformの支点を設定 |
---|---|
初期値 | 50% 50% |
値 | background-positionと同じ値を指定可 ・ ・ ・ |
適用できる要素 | ・ ・ |
継承 | なし |
記述例 | Firefox3. ・ ・ ・ Webkit系 ・ ・ ・ |
transform-originプロパティのサンプル
それでは、
デフォルトのHTMLとCSS
まずは、
<h1>トランスフォーム</h1>
*{
margin: 0;
padding: 0;
}
h1{
width: 500px;
background-color: green;
}
このデフォルトの表示結果は、

transform-originを指定せずに、45度時計回りに回転
まずはh1を45度、
h1{
width: 500px;
background-color: green;
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
Safariでは、

transform-originを指定せずに、90度時計回りに回転
同じように、
h1{
width: 500px;
background-color: green;
-moz-transform: rotate(90deg);
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
}
Safariでは、

transform-originを要素の左下に指定して、45度時計回りに回転
次はこの中心を文字がすべて見えるようにtransform-originプロパティ
そのために、
h1{
width: 500px;
background-color: green;
-webkit-transform-origin: 0 100%;
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
Safariでは、

また、
そのため、
h1{
width: 500px;
background-color: green;
-webkit-transform-origin-x: 0;
-webkit-transform-origin-y: 100%;
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
rotateファンクション
rotateは3Dでの時計回りへの回転を適用させるためのファンクションです。rotateファンクションを適用すると要素を回転させることができます。執筆時点では、
機能 | 回転 |
---|---|
初期値 | 0 |
値 | ポジティブ、 ・ ・ |
適用できる要素 | ・ ・ |
継承 | なし |
記述例 | Firefox3. ・ ・ ・ Webkit系 ・ ・ ・ |
rotateファンクションのサンプル
例えば、
<h1>トランスフォーム</h1>
*{
margin: 0;
padding: 0;
}
h1{
width: 500px;
background-color: green;
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
Safariでは、

rotateの単位
要素の角度を指定する場合は、
gradという単位は以下の表のようにdegを対応させることができますが、
0deg | 0grad |
90deg | 100grad |
180deg | 200grad |
270deg | 300grad |
360deg | 400grad |
100gradを指定
90度回転させたい場合に、
h1{
-webkit-transform: rotate(100grad);
}
Safariでは、

rotateの時計周りと逆時計回り
次に、
ただし、
h1{
-webkit-transform: rotate(-10grad);
}

h1{
-webkit-transform: rotate(350deg);
}

scaleファンクション
scaleとは要素の拡大/
scaleの値を指定した後にtranslateの値を指定する場合には、
機能 | 拡大/ |
---|---|
初期値 | 0 |
値 | ポジティブ、 ・ |
適用できる要素 | ・ ・ |
継承 | なし |
記述例 | Firefox3. ・ ・ ・ ・ ・ Webkit系 ・ ・ ・ ・ ・ |
scaleファンクションの記述方法
まず、
h1{
transform: scaleX(2.0);
}
Y軸方向に拡大したい場合は、
h1{
transform: scaleY(2.0);
}
そして、
h1{
transform: scale(2.0, 2.0);
}
また、
h1{
transform: scale(2.0);
}
X軸、Y軸の両方向への拡大を確認する(Webkitの場合)
それでは、
h1{
-moz-transform: scale(2.0);
-webkit-transform: scale(2.0);
}
Safari

Firefox

scaleへネガティブバリューを指定
少し応用してみましょう。scaleの値にネガティブバリュー
h1{
transform: scale(-2.0);
}
Safariでは、

scale3dとscaleZ
また、
scale3d(scaleX, scaleY, scaleZ)
現状では、
skewファンクション
skewは、

機能 | ゆがみ |
---|---|
初期値 | 0 |
値 | ポジティブ、 ・ ・ |
適用できる要素 | ・ ・ |
継承 | なし |
記述例 | Firefox3. ・ ・ ・ Webkit系 ・ ・ ・ |
skewファンクションのサンプル
実際に、
<h1>トランスフォーム</h1>
*{
margin: 0;
padding: 0;
}
h1{
width: 500px;
background-color: green;
-moz-transform: skew(45deg);
-webkit-transform: skew(45deg);
}
Safariでは、

Y軸に対して45度傾ける
以下のように記述すると、
h1{
-moz-transform: skewY(45deg);
-webkit-transform: skewY(45deg);
}
Safariでは、

translateファンクション
translateは、
機能 | 移動 |
---|---|
初期値 | 0 |
値 | ポジティブ、 ・ ・ |
適用できる要素 | ・ ・ |
継承 | なし |
記述例 | Firefox3. ・ ・ ・ Webkit系 ・ ・ ・ |
基本の記述 | translate(<translation-value>[, <translation-value>]) X軸、 translateX(<translation-value>) X軸方向 translateY(<translation-value>) Y軸方向 |
translateファンクションのサンプル
以下のサンプルを用意しました。これはtranslateを指定していない状態

X軸方向へ100px, Y軸方向へ200px移動させる
このサンプルの要素を、
h1{
width: 200px;
height: 200px;
background-color: green;
-moz-transform:translate(100px,200px);
-webkit-transform: translate(100px,200px);
transform: translate(100px,200px);
}

transformのショートハンド
また、
通常、
h1{
-webkit-transform: rotate(45deg);
-webkit-transform: scale(2.0);
-webkit-transform: skew(20deg);
-webkit-transform: translate(100px 100px);
}
これは、
リスト20 transformのショートハンドを利用した例
h1{
-moz-transform: rotate(45deg) scale(2.0) skew(20deg) translate(100px 100px);
-webkit-transform: rotate(45deg) scale(2.0) skew(20deg) translate(100px 100px);
transform: rotate(45deg) scale(2.0) skew(20deg) translate(100px 100px);
}
matrixファンクション
matrix
機能 | 移動 拡大 歪み 移動 回転 |
---|---|
初期値 | 1 0 0 1 0 0 |
値 | 数字にて指定 |
適用できる要素 | ・ ・ |
継承 | なし |
記述例 | Firefox3. ・ Webkit系 ・ |
matrixファンクションのサンプル
matrix(1, 0, 0, 1, 0, 0)はこの状態でデフォルトであり、
<h1>トランスフォーム</h1>
*{
margin: 0;
padding: 0;
}
h1{
margin: 500px 500px;
width: 500px;
background-color: green;
-moz-transform: matrix(2, 1, 0, 6, 0, 0);
-webkit-transform: matrix(2, 1, 0, 6, 0, 0);
transform: matrix(2, 1, 0, 6, 0, 0);
}
Safariでは、

matrix3d
matrix3dは、
webkit-matrix3d(<number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>, <number>)
実際に、
h1{
margin: 500px 500px;
width: 500px;
background-color: green;
-moz-transform: matrix3d(1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1);
-webkit-transform: matrix3d(1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1);
transform: matrix3d(1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1);
}
Safariでは、

Firefoxでは、

実践テクニック(1)写真ギャラリー
最後に、
写真をランダムに配置する写真ギャラリーをよく見たりすると思います。通常であれば、
<ul>
<li id="andy"><img src="images/andy.jpg" alt="" /></li>
<li id="jeremy"><img src="images/jeremy.jpg" alt="" /></li>
<li id="eric"><img src="images/eric.jpg" alt="" /></li>
<li id="mike"><img src="images/mike.jpg" alt="" /></li>
</ul>
*{
margin: 0;
padding: 0;
}
:root{
background: #000;
}
ul{
position: relative;
margin: 0 auto;
}
ul li{
list-style-type: none;
}
ul li img{
border: 5px solid #f5f5f5;
}
/*andy
====================*/
ul li#andy img{
position: absolute;
top: 10px;
left: 30px;
-moz-transform: rotate(15deg) scale(.5);
-webkit-transform: rotate(15deg) scale(.5);
transform: rotate(15deg) scale(.5);
}
ul li#andy img:hover{
z-index: 100;
top:90px;
left: 100px;
-moz-transform: rotate(0deg) scale(1.2);
-webkit-transform: rotate(0deg) scale(1.2);
transform: rotate(0deg) scale(1.2);
}
/*jeremy
====================*/
ul li#jeremy img{
position: absolute;
top: 90px;
left:200px;
-moz-transform: rotate(-5deg) scale(.5);
-webkit-transform: rotate(-5deg) scale(.5);
transform: rotate(-5deg) scale(.5);
}
ul li#jeremy img:hover{
z-index: 100;
top: 100px;
left: 300px;
-moz-transform: rotate(0deg) scale(1.2);
-webkit-transform: rotate(0deg) scale(1.2);
transform: rotate(0deg) scale(1.2);
}
/*eric
====================*/
ul li#eric img{
position: absolute;
top: 100px;
left: 500px;
-moz-transform: rotate(40deg) scale(.5);
-webkit-transform: rotate(40deg) scale(.5);
transform: rotate(40deg) scale(.5);
}
ul li#eric img:hover{
z-index: 100;
top: 100px;
left: 300px;
-moz-transform: rotate(0deg) scale(1.2);
-webkit-transform: rotate(0deg) scale(1.2);
transform: rotate(0deg) scale(1.2);
}
/*mike
====================*/
ul li#mike img{
position: absolute;
top: 0px;
left: 450px;
-moz-transform: rotate(10deg) scale(.5);
-webkit-transform: rotate(10deg) scale(.5);
transform: rotate(10deg) scale(.5);
}
ul li#mike img:hover{
z-index: 100;
top: 100px;
left: 300px;
-moz-transform: rotate(0deg) scale(1.2);
-webkit-transform: rotate(0deg) scale(1.2);
transform: rotate(0deg) scale(1.2);
-moz-transition: all 3s liner;
-webkit-transition: all 3s liner;
transition: all 3s liner;
}
Safariでは、

実践テクニック(2)Macのカバーフロー効果
Macのカバーフロー効果をtransformを利用して再現したものです。実際のサンプルには次回で説明するtransitionやSVGの画像エフェクトなどを利用しています。:hoverと隣接セレクター組み合わせ、
Firefox3.
html body ul#navigation{
width: 80%;
height: 128px;
margin: 0 auto;
padding: 100px 10px;
border: 2px solid #999;
overflow: auto;
-webkit-mask-box-image: url(images/mask.png) 95% stretch;
}
html body ul#navigation li{
float: left;
list-stye-type: none;
margin: 0 -10px;
-moz-transform: scale(.5);
-webkit-transform: scale(.5);
transform: scale(.5);
}
html body ul#navigation li:hover{
-moz-transform: scale(1.0);
-webkit-transform: scale(1.0);
transform: scale(1.0);
}
html body ul#navigation li:hover+li{
-moz-transform: scale(.65);
-webkit-transform: scale(.65);
transform: scale(.65);
}
html body ul#navigation li:hover+li+li{
-moz-transform: scale(.55);
-webkit-transform: scale(.55);
transform: scale(.55);
}
html body ul#navigation li img{
-webkit-box-reflect:below 5px -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0.1, transparent), to(black));
}
html body ul#navigation li{
-webkit-transition: all .4s ease-out;
}
このサンプルは、

参考文献
今回の解説には、