〽️① transition-duration。 〽️② transition-property。 〽️③ transition-timing- function。 〽️④ transition-delay。 〽️一括指定(ショートハンド)。 〽️アイデアは浮かびましたか?
⬆︎CSSアニメーションについてのまとめページはこちら。
こんにちは、「ふ」です。
今回はCSS transitionの2回目、各プロパティと一括指定について紹介していきます。
transitionに関するプロパティは4種類あります。
① transition-duration
② transition-property
③ transition-timing-function
④ transition-delay
キーフレームアニメーションに比べるとシンプルなラインナップになっていますね。キーフレームの持つプロパティと同じものもありますが、1つずつ見ていきましょう。
前回の記事はコチラ⬇︎。transitionの基本的な仕組みについて解説しています。
CSSのtransitionについて①。
▶︎ transitionの基本的仕組みと使いかた。
▶︎ キーフレームアニメーションとの使い分けは?
#sample { transition-duration:〇〇s; } 初期値:0s
「trnasition-duration」は、アニメーションの継続時間を指定します。単位として「s(秒)」または「ms(ミリ秒)」を付けて指定します。
transitionを実装するには最低限必要なプロパティです。
サンプル⬆︎です。
「:hover」を利用して、マウスカーソルを乗せると色と形が変化するようにしてあります。
※スマホなどのタッチデバイスでご覧の方は、要素を指でタップしてみてください。
■ HTML
<div id = "sample1"></div>
■ CSS
#sample1 { width:8em; height:8em; background-color:blue; margin-left:10%; } #sample1:hover { 「「4border-radius:50%; background-color:orangered;」」 }
ここに2sのtransition-durationを指定してみましょう。
#sample1 { 〜 略 〜 「「1transition-duration:2s;」」 }
指定どおり、2秒かけてborder-radiusとbackground-colorが変化するようになりました。
transition-durationの初期値は「0s」となっており、そのままだとCSSの変更が瞬間的に行われてしまいます。
つまり、初期値以外の値を指定してやらないと、transitionが発生しません。
#sample { transition-property:(プロパティ名); } 初期値:all
「transition-property」は、transitionの対象となるプロパティを限定します。
どのような使い方をするのでしょうか?
⬆︎先程のduration「2s」を指定したサンプルです。
hover時に変化するプロパティは、「background-color」と「border-radius」でした。
現在transition-propertyは特に指定しておらず、初期値の「all」となっています。「all」の場合、変更するプロパティの全てにtransitionが施されます。
hoverしたとき。
border-radiusはまあいいとして、background-colorについては連続変化させると少し気持ち悪いですよね💧
transition-propertyで以下⬇︎のように記述し、transitionさせるプロパティを「border-radius」に限定しましょう。
■ CSS
#sample1 { 〜 略 〜 transition-duration:2s; 「「1transition-property:border-radius;」」 }
背景色はhoverの瞬間に変化し、border-radiusだけをtransitionさせることができました。
変更させるプロパティのうち、アニメーションさせたくないものがあればtransition-propertyで制御することができます。
transition-propertyの対象を複数指定したい場合には、カンマ「 , 」で区切って記述します。
#sample1 { 〜 略 〜 transition-duration:2s; transition-property:「「1border-radius,background-color;」」 }
bordrer-radiusとbackground-colorの両方をtransitionさせることができました。
う〜ん、やっぱり色変化は気持ち悪いな(笑)
#sample { transition-property:「「1none」」; }
transition-propertyには「none(対象先:なし)」という値も用意されています。
これはどういった使いどころがあると申すのか?
例えば。
複数の要素に対し、class名を使って一括でtransitionを指定しているのだが、特定の要素だけtransitionを解除したい場合。
そんなときにはdiv名をつけて参照し、「none」を指定するといいでしょう。
#sample { transition-timing-function:「値」; } 初期値:ease
「transition-timing-function」はキーフレームアニメーションの「animaiton-timing-function」にあたるものです。
値は、キーフレームのtiming-functionと同じものをひととおり使うことができます。
⬆︎先ほどのサンプル、transition-timing-functionは指定しておらず、初期値の「ease」のままです。
hover(またはタップ)したときのアニメーションの進捗。はじめは少し急に進行し、最後はなめらかに終わっています。
timing-functionを「linear」に指定してみます。
#sample1 { 〜 略 〜 animation-duration:2s; animation-property:border-radius; 「「1animation-timing-function:「「5linear;」」」」 }
timing-functionに「linear」を指定したことにより、hover時のアニメーション進捗が直線的になりました。
他にもやってみましょう。
#sample1 { 〜 略 〜 animation-duration:2s; animation-property:border-radius; animation-timing-function:「「5cubic-bezier(0.9,0,0.9,0.1)」」; }
極端なcubic-bezierを掛けました。
アニメーションの進捗ですが、終盤の追い上げが激しいです。
#sample1 { 〜 略 〜 animation-duration:2s; animation-property:「「5all」」; animation-timing-function:「「5steps(4,jump-none)」」; }
stepsを使ったコマ送り。
今度はtransition-propertyを「all」とし、background-colorもステップアニメーションさせています。
色の変化は連続的だとちょっと気持ち悪いですが、コマ送りにすると見た目悪くないですね。
cubic-bezierとstepsについては、キーフレームアニメーションの記事⬇︎で詳しく紹介しています。
cubic-bezier。
▶︎ 3次ペジェ曲線とは?
▶︎ 任意の変化曲線を指定する。
steps。
▶︎ コマ送りアニメーションの実装。
▶︎ timing-functionとキーフレームの関係。
#sample { transiton-animation-delay:〇〇s; } 初期値:0s
この「transition-delay」も、キーフレームアニメーションに同用意されている「animation-delay」に該当します。
挙動はキーフレームのものと全く同じで、単位は「s(秒)」または「ms(ミリ秒)」。
仕込んでみましょう。
#sample1 { 〜 略 〜 animation-duration:2s; animation-property:border-radius; 「「1animation-delay:1s」」; }
hover(またはタップ)すると1秒後にtransitionアニメーションが開始されます。
解除のときにもdelayが適用されるんですね。
#sample { transition: (各プロパティの値を並べる); }
transitionアニメーションにも一括指定(ショートハンド)ができるtransitionプロパティが用意されています。これまでのプロパティをまとめてみましょう。
#sample1 { 「「3transition-duration:2s; transition-property:border-radius; transition-timing-function:linear; transition-delay:1s;」」 }
この⬆︎ような長ったらしい記述。
tansitionプロパティに、値のみを半角スペースで区切って記述します。
#sample1 { 「「1transition:2s border-radius linear 1s;」」 }
⬆︎1行で済ませることができました。
便利なので是非使ってください。ただし、以下の2点に注意が必要です。
durationとdelayの値は同じ「sまたはms」となっています。
キーフレームアニメーションの場合と同じく、先に記述されたほうがtransition-duration、後のものがtransition-delayとみなされます。
「2s」と「1s」という値があったとします。
2つの記述順を前後させて、結果を比べます。
#sample1 { transition:「「12s」」 border-radius linear 「「41s」」 ; }
先に記述した「2s」がduration(所要時間)とみなされ、後ろの「1s」がdelayとしてレンダリングされました。
#sample1 { transition:「「41s」」 border-radius linear 「「12s」」 ; }
記述順を逆にすると、duration「1s」、delay「2s」として扱われます。
意図したtransitionアニメーションが実装できるよう、2つのプロパティ値の記述順には注意してください。
もう1つ注意点が。
「transition-property」の対象はカンマで区切ることによって、複数指定することができました。
#sample { transition-property:「「1border-radius,opacity」」; }
ただし、この「カンマ区切り記述」をそのままショートハンドに埋め込むことはできません。
「「4✖️ これはダメ。」」 #sample { transition:1s 「「4border-radius,background-color」」; }
transition-propertyが複数の場合、「ショートハンドのセットを複数記述する」必要があります⬇︎。
「「1○ このように記述する」」 #sample { transition: 「「1bb1s border-radius, bb1s background-color」」 bb; }
「(1つのプロパティ先と他の値),(1つのプロパティ先と他の値)」
〜というように、複数のショートハンドのセットを作り、カンマで区切って記述します。
めんどくさいですね💧
....でも、
「ショートハンドを複数セットできる」ということは、「異なる状況のtransitionを施すことができる」ということですね、
遊んでみましょう。
#sample1 { transition: 「「1bb1s border-radius linear」」, 「「5bb3s background-color ease 1s」」 bb; }
border-radiusは「1秒間かけて直線的に変化」、background-colorは「1秒のdelay後、3秒かけてstepsで変化」としました。
結果がこちら⬆︎です。
hover(またはタップ)すると、要素がはじめの1秒で変形、残りの3秒で変色するようになりました。
「何に使うんだ?」と言われそう(笑)ですが、このようなトリッキーなこともtransitionで実装することができます。
最後まで読んでいただき、ありがとうございました。
2記事に渡ってCSSのtransitionについて紹介してきました。なにか面白い使い方があるかも・・皆さんのほうでアイデアは浮かんできたでしょうか?
記事中のサンプルでは擬似要素の「:hover」を使ってきましたが、hover解除で元に戻るときにもアニメーションしてくれる、←ここがキーフレームアニメーションとは違っている点です。transitionならではの効果をねらう上で、ヒントになってくるかもしれません。
ゼロから新しいものを作ってみることは、問題解決能力upに直結します。いろいろ実験してみてくださいね。ではまた〜 ♪
transform:matrixを理解する。
行列計算は必要なし。
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。