CSSアニメーション、
傾斜〜transform:skewについて。

〽️記述と単位。 〽️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」のままです。

skewX/Y。

scaleやtranslateなどと同じく、skewにもX/Y方向のみを指定する関数が存在します。

 ■ skewX。

X方向の傾斜のみを指定します。

#sample { animation:sample 1s alternate infinite; } @keyframes sample { to { transform:「「1skewX(20deg)」」; }

結果⬇︎

 ■ skewY。

Y方向の傾斜を指定します。

transform:「「1skewY(20deg)」」;

結果⬇︎

ちなみに。

「skewZ」というものは用意されていません。
HTML要素は「平面」なので、大きさを持たない「奥行き」を傾斜させることは不可能だからです。

0〜90°以外の状態。


ここまでtransform:skewの値を「0° < 角度 < 90°」の状態で試してきましたが、90°以上やマイナスの角度ではどうなるのでしょうか?

#sample { transform:skewX(「「1θ」」deg); }

要素にskewXをかけた上で、少しずつ角度「θ」の値を変えながら見ていきます。

傾斜角度「0°」、初期値の状態です。

0°以外の角度を与えると傾斜が始まります。
90°に達するまで、要素は反時計回りに歪んでいきます。

そして90°のとき。
要素は完全につぶれてしまうため非表示になってしまいます。
傾斜すればするほど要素の幅は大きくなるため、「幅が無限大になってしまった」ので表示できなくなった、とも言えます。

角度が90°を超えると、今度は逆方向から傾斜を徐々に戻してきます。

180°のところで、要素の見た目は元の状態に。

半周で1セット。

以降、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セットになっていることがわかります。

※注意。Safariブラウザでは最終結果をもとにレンダリングされるため、静止した状態で表示されてしまいます。Skewを3回ループさせたい場合には、キーフレームを細かく分けて記述しましょう。

実例サンプル。


それではtransform:skewを使った実例を紹介します。

 ■ wiggle(揺らす)。


要素にマウスカーソルを乗せる(タッチデバイスの場合はタップ)と、小刻みに震えるサンプルです。
hover(擬似クラス)を使用。高速で+ー方向にskewさせています。

#skewimg:hover { animation:skewimg 「「40.1s」」 infinite; } @keyframes skewimg { bbfrom { transform:skewX「「4(-2deg)」」; } bbto { transform:skewX「「4(2deg)」」; } bb}

 ■ 背景のみskew。




背景のみ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、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。