zukucode
主にWEB関連の情報を技術メモとして発信しています。

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を指定していない状態でwidth100pxから300pxに変化させると、100px300pxに一瞬でスタイルが適用されます。

transition: width 1sを指定した状態でwidth100pxから300pxに変化させると、以下のように、少しずつスタイルを適用していきます。

100px101px102px→ ... →298px298px300px(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>

関連記事

  • CSS 要素の背景色を透明・半透明にする方法

    要素の背景色を透明・半透明にする方法を紹介します。例えば、以下のように緑背景にボタンを置いた場合を考えます。ボタンの背景色を透明にして、文字だけにしたい場合は以下のようにします。transparent...


  • CSS テーブルのセル内の文字列の折り返しの制御を行う方法

    テーブルのセル内の文字列の折り返しの制御を行う方法を紹介します。以下は、セルの幅を200pxに指定しているのですが、半角英数字の長い文字列があると、セルの幅を無視してセルが伸びてしまいます。テーブルの...


  • CSS テーブルのセルで入りきらない文字列をカットして表示する

    CSSでテーブルのセルで入りきらない文字列をカットして表示する方法を紹介します。以下のようなtableのとき、tdの要素に対して以下のようにスタイルを設定します。white-space: nowrap...


  • CSS テーブルのセルの中身を文字寄せする方法

    テーブルのセルの中身を文字寄せする方法を紹介します。文字寄せするスタイルはtext-alignやvertical-alignを使用しますが、テーブルのセルの場合でも同じように指定します。以下のようなテ...


  • CSS 要素が入り切らない場合にスクロールバーを表示する方法

    要素が入り切らずにはみ出してしまうときにスクロールバーを表示する方法を紹介します。以下のように、サイズを指定した親要素の中に、入り切らないテキストなどがあると、親要素をはみ出してしまいます。overf...


  • CSS 縦または横のみにスクロールバーを表示する方法

    要素が入り切らずにはみ出してしまうときにスクロールバーを表示する方法をCSS 要素が入り切らない場合にスクロールバーを表示する方法で紹介しました。overflowのスタイルは縦と横の両方のスクロールバ...


  • CSS ローディングアニメーションを作成する

    CSSのスタイルのみでローディングアニメーションを作成する方法を紹介します。以下のようなローディングアニメーションを作成します。適用しているスタイルを1つづつ解説します。まずはローディングアニメーショ...


  • CSS リンクボタンの下線を消す方法

    リンクボタンの下線を消す方法を紹介します。以下は何もスタイルを指定していない状態のリンクボタンです。ブラウザによって多少は異なりますが、青色で下線の付いたテキストになります。文字に下線を付けるスタイル...


  • テキストボックスの幅を100%にしたときに親要素からはみ出る問題を解決する

    CSSでテキストボックスの幅を100%にしたときに親要素からはみ出る問題を解決する方法を紹介します。以下のように、親要素に対して100%のサイズのテキストボックスを配置すると、親要素をはみ出してしまい...


  • CSS テキストボックスのサイズを設定する

    CSSでテキストボックスのサイズを設定する方法を紹介します。サイズを設定するには以下のように、テキストボックスの要素に対してwidth: サイズ;とheight: サイズ;の形式で指定します。親要素の...