〽️記述と単位。 〽️skewX/Y/。 〽️0〜90°以外の状態。 〽️実例サンプル。 〽️正体はまた今度。
⬆︎CSSアニメーションについてのまとめページはこちら。
こんにちは、「ふ」です。
CSSアニメーション、transform編。今回はtransform関数4つ目、transform:skewについて学んでいきましょう。
skew
skewとは「傾斜」や「歪み」の意味とされています。
拡大や移動などの変形とは違い、実際の動きがイメージしづらいかもしれません。アニメーションさせながら感触をつかんでいきましょう。
transform-skewの記述です。
#element { 「「1transform:skew(X成分の角度,Y成分の角度);」」 }
( )の中には傾斜させる角度をX成分、Y成分の順に記述します。角度の単位はtransform:rotateのときと同じく、
・deg(度数法)
・rad(弧度法)
・grad(グラード、1周を400で割ったもの)
・turn(回転数)
が使用できます。
X方向に傾斜するアニメーションを書いてみましょう。
#sample { animation:sample 2s alternate infinite; } @ keyframes sample { bbto { transform:「「1skew(20deg,0deg)」」; } bb{
X方向にskewさせると、水平・半時計方向に傾斜しました。
つぎはY方向に傾斜させてみましょう。skewの( )の中を書き換えます。
transform:skew「「1(0deg,20deg)」」;
Y方向に傾斜させると、今度は垂直・時計方向に歪みました。
両方傾斜させてみましょう。
transform:skew「「1(20deg,20deg)」」;
X、Y両方向に傾斜した状態です。
他のtransform関数同様、角度となる値を1つしか記入しなかった場合、X成分の指定とみなされてY成分は初期値のままで扱われます。
transform:skew「「1(-20deg)」」;
角度指定がX方向に採用されました。マイナスの角度を指定したので、逆側に傾斜しています。
Y方向は初期値の「0」のままです。
scaleやtranslateなどと同じく、skewにもX/Y方向のみを指定する関数が存在します。
X方向の傾斜のみを指定します。
#sample { animation:sample 1s alternate infinite; } @keyframes sample { to { transform:「「1skewX(20deg)」」; }
結果⬇︎
Y方向の傾斜を指定します。
transform:「「1skewY(20deg)」」;
結果⬇︎
ちなみに。
「skewZ」というものは用意されていません。
HTML要素は「平面」なので、大きさを持たない「奥行き」を傾斜させることは不可能だからです。
ここまでtransform:skewの値を「0° < 角度 < 90°」の状態で試してきましたが、90°以上やマイナスの角度ではどうなるのでしょうか?
#sample { transform:skewX(「「1θ」」deg); }
要素にskewXをかけた上で、少しずつ角度「θ」の値を変えながら見ていきます。
傾斜角度「0°」、初期値の状態です。
0°以外の角度を与えると傾斜が始まります。
90°に達するまで、要素は反時計回りに歪んでいきます。
そして90°のとき。
要素は完全につぶれてしまうため非表示になってしまいます。
傾斜すればするほど要素の幅は大きくなるため、「幅が無限大になってしまった」ので表示できなくなった、とも言えます。
角度が90°を超えると、今度は逆方向から傾斜を徐々に戻してきます。
180°のところで、要素の見た目は元の状態に。
以降、180°ごとにこの動きを繰り返します。rotateと違い、「半周」で1セットのような感じです。
そしてこれはマイナスの領域も含みます。試しにマイナスの角度に歪ませてみましょう。
#sample { animation:sample 1s alternate infinite; } @keyframes sample { bbto { transform:skewX「「1(-40deg)」」; } bb}
マイナスの角度を指定したので、逆側にskewしました。180°ループの後半部分です。
今度は-180°から+360°までアニメーションさせてみましょう。
#sample { animation:sample 3s infinite; } @keyframes sample { bbfrom { transform:skewX「「1(-180deg)」」; } bbto { transform:skewX「「1(1turn)」」; } bb}
-180°〜360°まで傾斜角を変化させました。
その間、3回ループしています。180°(半周)が1セットになっていることがわかります。
それではtransform:skewを使った実例を紹介します。
要素にマウスカーソルを乗せる(タッチデバイスの場合はタップ)と、小刻みに震えるサンプルです。
hover(擬似クラス)を使用。高速で+ー方向にskewさせています。
#skewimg:hover { animation:skewimg 「「40.1s」」 infinite; } @keyframes skewimg { bbfrom { transform:skewX「「4(-2deg)」」; } bbto { transform:skewX「「4(2deg)」」; } bb}
背景のみskew
テキストの背景のみがskewするCSSアニメーション。
<div>でテキスト要素を囲んで親子構造にし、親要素に適当なskewのキーフレームを指定。
そのあと子要素であるテキストには逆skewのキーフレームを指定し、skewをキャンセルさせています。
■ HTML
<div class = 「「5"soto"」」> bb<p class = 「「5"naka"」」> bb背景のみskew bb</p> </div>
■ CSS
「「5.soto」」 { margin:0 auto; background-color:aqua; width:50%; animation:soto 1s linear alternate infinite; } @keyframes soto { bbfrom { transform:skewX「「1(135deg)」」; } bb} 「「5.naka」」 { text-align:center; animation:naka 1s linear alternate infinite; } @keyframes naka { bbfrom { transform:skewX「「1(-135deg)」」; } bb}
X、Y成分のskewが以下の条件で指定されたとき、要素が反転します。
x<90° かつ y<90° で、 さらに x+y>90° となるとき。
仕組みは次回以降の記事で解説しますが、この性質を取り入れると不思議な動きのCSSアニメーションが実装できます。
■ HTML
<img id = "img1" src = "cyan.svg"> <img id = "img2" src = "magenta.svg">
■ CSS
#img1,#img2 { display:block; width:10%; margin:0 auto; } #img1 { animation:img1 4s linear alternate infinite; } @keyframes img1 { bbto { transform:skew「「1(60deg,80deg)」」; } #img2 { animation:img2 4s linear alternate infinite; } @keyframes img2 { bbto { transform:skew「「1(80deg,60deg)」」; }
最後までお読みくださり、ありがとうございました。
今回はtransformのskew関数についてお伝えしてきましたが、指定に対する結果が「直感的ではない」と感じた方もいらっしゃるかと思います。rotateやscale、他の関数に比べて「skew」は少し特殊な仕組みになっているのです。
今回はtransform:skewの基本的な性質と使い方に焦点を絞りお伝えしたかったため、詳しい解説は別の記事で取り上げさせていただきます。
みなさんのほうでも、skewの値を色々と変えて実験しておいてください。
次回「skewの正体編」でお会いしましょう。ではまた〜 ♪
スマホでのhoverを考える。
2021.07.01
4つのパターンで検証。
transform:matrixを理解する。
行列計算は必要なし。
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。