〽️なぜtransformなのか?。 〽️transform、4つの値。 〽️transform-origin。 〽️複数指定について。 〽️やりたいことは浮かんできたかな?
⬆︎CSSアニメーションについてのまとめページはこちら。
こんにちは、「ふ」です。
今回から新章、transform編を始めていきます。
これまではCSSアニメーション自体の仕組みについて紹介してきました。内容が複雑になるため、あえてtransformは使用せずに説明を進めていたのですが、webアニメーションにおける要素の変形には欠かせないプロパティです。
transformは「変換する」という意味です。
transformプロパティには、回転・拡大縮小・移動・傾斜など、要素の変形に必要なひととおりの関数が用意されています。
第1回は「概要編」として、
・transformアニメーションでどんなことができるのか?
・使いこなすにあたり、学習すべきこと
についてお伝えしていきます。
CSSアニメーションにtransformを取り入れることで、表現の幅が格段に広がります。是非習得し、すごいアニメーションを作ってしまってください。
はじめに、「なぜtransformなのか?」についてお話しします。
というのも、
transformには例えば、拡大縮小を行う「scale」という値があります。
でもこれって、わざわざ「変形」をつかうまでもなく、widthやheightを変更すればいい話なのでは?と思うかもしれません。
しかし、むやみにwidthやheightを動かすのはよろしくありません。
3Dの概念を使っていない、通常のHTMLページの場合。
全ての要素は「1つの平面上に並べられている」状態です。
そして、それぞれの要素は初期値または指定されたmarginなどの余白にしたがって配置されています。
したがってある要素の大きさや余白を変化させると、隣接する要素は決められた余白を厳守すべく、上下に移動せざるを得ません。以降の要素もそれに続いて動かされます。
結果、ページ全体のレイアウトが崩れてしまうこともあるでしょう。
〜transformには、この問題を解決する性質を持ち合わせています。
transformの初期値以外を与えられた要素は、ページ本体とは別の、もう1つ新しく作られた平面に置かれたような状態に成増。
その結果、隣接する要素のレイアウトに影響を与えることなく変形させることができます。
これがtransfromの便利なところです。
transformの代表的な値(関数)を紹介していきます。
ベースとして、⬇︎のようなCSSアニメーションを用意しました。キーフレームにはtransformの初期値「none」を指定しておき、この部分を書き換えていきます。
現在は「none」なので変形は起こりません。
#sample { animation:henkei 2s alternate inifinite; } @keyframes henkei { to { 「「4transform:none;」」 } }
当コーナー(CSSアニメーション作り方)では、キーフレームアニメーションのコードはちょっと久しぶりですね、覚えていますか? ふふふ。
transform:rotate(90deg);
rotate
1つめ。「rotate」は、回転を与えます。
角度も自由に指定することができ、サンプル⬆︎では90°にしています。
transform:translate(50%);
traslate
「translate」は移動のコマンドで、水平/垂直方向、また前後「Z方向」に移動させることもできます。
サンプル⬆︎はx方向に50%分移動させています。
transform:scale(4);
scale
「scale」は拡大縮小です。
サンプル⬆︎は4倍に拡大しています。transformを使えば、隣接する要素にレイアウト上の影響を与えません。
transform:skewX(60deg);
skew
「skew」は要素全体に傾きを与えます。
X/Y方向または両方に傾斜させることができます。サンプル⬆︎では「X方向に60°」と指定したもの。
CSSのtransformを扱う上で重要になってくるのが、「transform-origin」というプロパティです。
これは、「変形の基準点」を指定するものであり、その位置によってCSSアニメーションの結果が変わってきます。
center
transform-originの初期値は「center」で、要素の中心に指定されています。
この⬆︎要素を回転させてみましょう。
#sample { animation:center 2s linear infinite; } @keyframes center { bbto { transform:rotate(1turn); } }
center
transform-originの指定なしの状態なので、初期値の「center」が採用されています。実際、中心を基準に回転していますね。
値の「1turn」というのは「1回転」という意味です。こういった指定の仕方も可能です。
それでは「変形の基準点」を要素の右端にしてみましょう。
#sample { 「「1transform-origin:right;」」 animation:center 2s linear infinite; } @keyframes center { bbto { transform:rotate(1turn); } }
right
要素の右端を基準に回転するようになりました。
このように、transform-originの指定によっては結果が大きく異なってきます。
multi
transformの基本的な変形は、回転・移動・拡大縮小・傾斜ですが、実際にはこれらを組み合わせたCSSアニメーションを実装するケースが多いです。
その際には以下のように、
transform:translate(150%) rotate(180deg);
1つのtransformプロパティに、変形の内容を半角スペースで区切って記述します。
multi
要素が回転しながら右へと移動する、CSSアニメーションができました。
ちなみに。
transformの値を複数列挙した場合は、後に書いた内容から「前提とした動き」として採用されます。今のコードでは、
transform:translate(150%) 「「4rotate(180deg)」」;
と、rotate(回転)の動きを後ろに書きました。
したがって、「回転している状態が、移動(translate)する」という動きになっています。
回転と移動の書き順を変えてみましょう。
tranform:「「4rotate(180deg)」」 translate(150%);
multi
記述順をひっくり返した結果です。
「移動(translate)している状態が、回転(rotate)する」という不思議なCSSアニメーションになっています。
結果を安易に想像しにくい時もありますが、transformの内容を複数組み合わせるときには、書き順の影響に配慮するようにしましょう。
最後までお読みくださり、ありがとうございました。
今回はCSSのtransform「概要編」。実装するにあたって学習すべきこと、それらを駆け足で紹介してきました。作ってみたいCSSアニメーションのアイデアは浮かんできたでしょうか? ふふふ。
今後は各内容について、もっと踏み込んだ記事を順次アップしていきます。transformを詳しく学んで、すごいCSSアニメーションを作りましょう!
ではまた〜 ♪
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。