CSS transitionでスタイルの変化をアニメーションする
transition
を使って、スタイルの変化をアニメーションで表現する方法を紹介します。
例えば以下のように、マウスオーバーすると擬似クラスが適用されて横幅が伸びる要素があるとします。
<style>
.link {
width: 100px;
}
.link:hover {
width: 300px;
}
</style>
<a class="link">ボタン</a>
このときの横幅の変化をアニメーションで表現したい場合は以下のスタイルを設定します。
<style>
.link {
width: 100px;
transition: width 1s;
}
.link:hover {
width: 300px;
}
</style>
<a class="link">ボタン</a>
transitionの考え方
transition: スタイル 時間
の形式で指定します。
transition: width 1s
と指定した場合は、「width
の変化を1秒かけて適用させる」という意味になります。
transition
を指定していない状態でwidth
を100px
から300px
に変化させると、100px
→300px
に一瞬でスタイルが適用されます。
transition: width 1s
を指定した状態でwidth
を100px
から300px
に変化させると、以下のように、少しずつスタイルを適用していきます。
100px
→101px
→102px
→ ... →298px
→298px
→300px
(1秒かけてスタイルが適用される)
このスタイル適用の変化がアニメーションとして見えることになります。
width
に限らず、数値を指定するスタイルはすべてtransition
を適用することができます。
transition: all 0.5s
とすると、margin
, height
などすべてのスタイルの変化を0.5秒かけて適用することになります。
また、見落としがちですが色も#000
のように色コードでの数値指定になりますので、色の変化も指定可能です。
<style>
.link {
width: 100px;
height: 20px;
background-color: blue;
padding: 5px;
transition: all 1s;
}
.link:hover {
width: 300px;
height: 50px;
background-color: red;
padding: 10px;
}
</style>
<a class="link">ボタン</a>
よくやりがちなミスとして、transition
を擬似クラスに記載するケースがあります。
そうした場合は以下のように、マウスオーバーしたときはアニメーションするのですが、マウスが外れたときはtransition
のスタイルも外れるため、アニメーションしなくなります。(逆にあえてそのようにしたい場合もありますが。。)
間違いパターン
<style>
.link {
width: 100px;
height: 20px;
background-color: blue;
padding: 5px;
transition: all 1s;
}
.link:hover {
width: 300px;
height: 50px;
background-color: red;
padding: 10px;
transition: all 1s;
}
</style>
<a class="link">ボタン</a>