CSS3で定義されたtransitionsで、要素のプロパティを徐々に変化させられます。
プロパティ | トランジション効果に対する作用 | 初期値 |
---|---|---|
transition-property | 効果を適用するCSSプロパティの名前 | all |
transition-delay | 効果が始まるまでの時間 | 0s |
transition-duration | 効果が完了するまでの時間 | 0s |
transition-timing-function | 効果の適用速度 | ease |
これらのプロパティを、まとめて指定できるプロパティもあります。
transition: [ none | property ] || duration || timing-function || delaytransition - CSS | MDN
単位としてs (秒) またはms (ミリ秒) を指定します。
単位を省略すると、ブラウザによっては機能しないことがあります。<time> - CSS | MDN
トランジション効果の適用速度を指定します。この効果のタイミングを指定するために、2つのタイミング関数
が用意されています。また、これらの関数を簡単に呼び出すために、下表のようにパラメータが設定されたキーワードもあります。
キーワード | 実体 |
---|---|
linear | cubic-bezier(0.0, 0.0, 1.0, 1.0) |
ease | cubic-bezier(0.25, 0.1, 0.25, 1.0) |
ease-in | cubic-bezier(0.42, 0.0, 1.0, 1.0) |
... |
バーのサイズが変化する様子から、キーワードごとのタイミングの違いを確認できます。
:hoverや:activeなどの擬似クラスで指定するのが簡単です。
#sample:hover { color: red; transition: all 1s; }
特定の属性にだけ適用するには、その属性名を明示します。また複数の属性に適用するには、カンマ区切りでそれらを列挙します。
transition: width 1s, height 2s;
width属性など既定値がautoとなっている属性は、初期値を明示しないとtransition-durationによる遷移時間が無視されます。
ページの読み込み時など、対象の要素が表示された時点からトランジションの効果を適用するには、ドキュメントの読み込みを待ってからスクリプトでスタイルを指定します。
<p id="abc">ABC</p> <script type="text/javascript"> window.onload = function() { var elem = document.getElementById( 'abc' ); elem.style.transitionDuration = '1s'; elem.style.color = 'red'; } </script>
または、強制的にスタイルの処理を完了させてから、新しいスタイルを指定する方法もあります。CSS transitions for dynamically created DOM elements - Tim Taubert
<p id="abc">ABC</p> <script type="text/javascript"> var elem = document.getElementById( 'abc' ); window.getComputedStyle( elem ).color; elem.style.transitionDuration = '1s'; elem.style.color = 'red'; </script>
この方法は、動的に作成した要素にトランジション効果を適用するときに、特に有用です。
#sample:hover { background-color: red; transition-duration: 3s; }
#sample > div { position: absolute; left: 0%; transition-duration: 1s; } #sample:hover > div { left: 30%; transition-duration: 3s; }
移動する要素自身の:hoverでスタイルを指定すると、要素が移動したときにマウスポインタが要素から外れ、:hoverのスタイルが解除されることがあります。よってスタイルを適用する親要素の:hoverでスタイルを指定します。
transform属性と組み合わせることで、要素の回転をアニメーション表示できます。
#sample > div { transform: none; transition-duration: 1s; } #sample:hover > div { transform: rotate( 360deg ); transition-duration: 3s; }
必ず単位をつけて指定します。有効な単位は、
の2つです。大文字小文字は区別されないため、SやMsのように指定しても有効ですが、推奨はされません。<time> - CSS | MDN