私、htmlとcssは完全独学で覚えたのですが、一番理解に苦しんだのが「z軸」という謎の言葉。
主に変形(transform)プロパティの説明で出てきますが、数学は中学で終わった私にとって、X(横・水平)とY(たて・垂直)なら分かってもz方向とか言われても???でした。
他にもzに苦しめられている人がいると信じて、自分の復習がてら解説してみようと思います。
z軸は立体を表現する為に存在している
まず分かりやすくZ方向を画像にするとこうなります。
なんとなくイメージできたと思うので実際に書いてみます。
< div > < / div >に縦横200pxのシンプルな平面を2つ作り、positionでぴったり重ねてz軸だけずらしてみます。z方向の値は0が初期値。値が大きくなるほど手前に、小さくなるほど奥に配置されます。
手前には枠線をつけ、奥には背景色を指定しています。
width:200px;
height:200px;
position:relative;
transform-style: preserve-3d;
perspective:( 1000px);
}
.demo > div{
width:100%;
height:100%;
position:absolute;
}.demo > div:first-of-type{
background:transparent;
border: #000 3px solid;
}.demo > div:nth-of-type(2){
background:rgba(0,0,0,.3);
transform: translateZ( -200px);
}
奥の方が小さく表示されているのが分かると思います。rotateで少し傾けてみると分かりやすいでしょうか
cssの設定について
Z軸を指定して立体感を出すには下記2つの指定が必須です。
- transform-style : preserve-3d
- perspective : [任意の数字]px
transform-styleは初期値が「flat(平面)」なので「preserve-3d(立体)」を指定。
perspective は絵を描く方や建築設計関係の方ならおなじみのパースです。視点からの距離を定めます。初期値は0。マイナスの値を設定するとエラーになります。
たとえば、スカイツリーを間近で見るのと離れた位置から見るのとでは迫力・立体感が違うように、視点からの距離が短い( = perspectiveの値が小さい)ほど、遠近感は大きく表現されます。
下のサンプルはパタンと前に倒れるシンプルなものですが、上がperspective:1000px。下は50pxです。
一度z軸の概念を理解してしまえば、ホバーアクションやアニメーションなどで色々使えるので、多少なりとも理解の一助になっていれば幸いです。
See the Pen
transform animation 3d by Takashi Abe (@TakeshiAbe)
on CodePen.