記事内にはプロモーションが含まれています

【CSS】グラデーションアニメーションの実装テクニック!背景・文字・ボタンを動かす方法

【CSS】グラデーションアニメーションの実装テクニック!背景・文字・ボタンを動かす方法 CSS

Webサイトのデザインにおいて、単色の背景や文字だけでは少し物足りないと感じることはありませんか?

そんな時に役立つのが、色が滑らかに変化する「グラデーションアニメーション」です。

かつてはJavaScriptを使ったり、重たいGIF画像を使ったりする必要がありましたが、現在はCSSだけで軽量かつ美しいアニメーションを実装できます。

背景色をゆっくりと移り変わらせて幻想的な雰囲気にしたり、ボタンのホバー時にキラッと光るような演出を加えたりと、表現の幅は無限大です。

この記事では、CSSを使ってグラデーションをアニメーションさせる基本的な仕組みから、文字やボタンへの応用、さらに現在のモダンな実装方法である「@property」を使ったテクニックまで、コピペで使えるコードとともに徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • OS:Windows 11 / macOS Sequoia
  • IDE:Visual Studio / VS Code / IntelliJ IDEA
  • その他:Chrome DevTools / 各言語最新安定版

※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。

なぜグラデーションはtransitionで動かないのか?

CSSアニメーションに慣れている方なら、「background-image(グラデーション)の色を transition で変化させればいいのでは?」と考えるかもしれません。

しかし、残念ながら通常のCSSでは、グラデーションの色そのものを直接アニメーションさせることはできません。

そこで使われるのが、「背景サイズを大きくして、表示位置をずらす」というトリックです。

巨大なグラデーションの背景画像を作り、それを background-position プロパティを使って少しずつ移動させることで、あたかも色が変化しているかのように見せるのです。

これが現在最も一般的で、ブラウザ対応状況も良い実装方法です。

【実践1】背景色がゆっくり移り変わるアニメーション

まずは基本となる、背景全体のグラデーションがゆったりと変化するアニメーションを作ってみましょう。
ヒーローイメージ(トップページのメイン画像)の背景などでよく使われる手法です。

.bg-gradient-anim {
    width: 100%;
    height: 150px;
    /* 複数の色を指定してグラデーションを作る */
    background: linear-gradient(45deg, #ff9a9e, #fad0c4, #fad0c4, #a18cd1, #fbc2eb);
    /* 背景サイズを画面より大きくする(ここがポイント) */
    background-size: 400% 400%;
    /* アニメーションの設定 */
    animation: gradientLoop 10s ease infinite;
}

/* 背景位置を移動させるキーフレーム */
@keyframes gradientLoop {
    0% {
        background-position: 0% 50%;
    }
    50% {
        background-position: 100% 50%;
    }
    100% {
        background-position: 0% 50%;
    }
}
まず linear-gradient で複数の色をつないだグラデーションを定義します。
この時、色の変化を滑らかにするために、似たトーンの色を多めに設定するのがコツです。
次に background-size: 400% 400%; を指定して、背景を要素の4倍の大きさに拡大します。
こうすることで、画面にはグラデーションの「一部」だけが表示される状態になります。
仕上げに @keyframes を使って、背景の表示位置(background-position)を左から右、右から左へと移動させます。
これにより、窓から見える景色が変わるように、背景色が移り変わって見えるアニメーションが完成します。

【実践2】文字(テキスト)のグラデーションを動かす

次は、背景ではなく「文字の色」をグラデーションにし、さらにそれをキラキラと動かすテクニックです。
見出しやロゴに適用すると、非常に目を引くデザインになります。

.text-gradient-anim {
    font-size: 3rem;
    font-weight: bold;
    /* グラデーションの定義 */
    background: linear-gradient(to right, #30cfd0 0%, #330867 100%);
    /* 文字の形に背景を切り抜く */
    background-clip: text;
    -webkit-background-clip: text;
    /* 文字色を透明にして背景を見せる */
    color: transparent;
    /* 背景を横に伸ばす */
    background-size: 200% auto;
    /* アニメーション実行 */
    animation: textShine 3s linear infinite;
}

@keyframes textShine {
    to {
        background-position: 200% center;
    }
}
文字のグラデーションには background-clip: text; というプロパティを使います。
これは背景画像を文字の形に切り抜く機能です。
文字色(color)を透明(transparent)にすることで、背面のグラデーションが文字として見えるようになります。
アニメーションの仕組みは背景の時と同じです。
background-size で横幅を200%などに広げ、background-position を移動させることで、文字の上を色が流れていくような効果を表現しています。

【実践3】ボタンのホバー時にグラデーションを変化させる

ユーザーがマウスを乗せた(hover)瞬間に、ボタンのグラデーションを動かす演出も人気です。
クリックしたくなるようなインタラクションをCSSだけで実装します。

.btn-gradient {
    padding: 15px 40px;
    color: white;
    border: none;
    border-radius: 50px;
    /* 3色のグラデーション(両端を同じ色にすると自然) */
    background-image: linear-gradient(to right, #f6d365 0%, #fda085 51%, #f6d365 100%);
    background-size: 200% auto;
    cursor: pointer;
    transition: 0.5s; /* 変化のスピード */
    text-decoration: none;
    font-weight: bold;
}

.btn-gradient:hover {
    /* ホバー時に背景位置をずらす */
    background-position: right center;
}
ボタンの背景にグラデーションを設定し、サイズを横に2倍(200%)にしておきます。
通常時は左半分が表示されている状態です。
:hover 擬似クラスを使って、マウスオーバー時に background-position を右側に移動させます。
transition プロパティを設定しているため、瞬時に切り替わるのではなく、ヌルっと滑らかに色が移動するアニメーションになります。

【最新】@propertyを使った色そのもののアニメーション

ここまでは「背景の位置をずらす」という擬似的な方法でしたが、現在はCSSの新しい機能である @property を使うことで、グラデーションの「色」そのものを直接変化させることが可能です。

この方法なら、より直感的で複雑な色の変化もスムーズに実装できます。

/* カスタムプロパティ(変数)の定義 */
@property --color-start {
    syntax: '<color>'; /* 色として扱うことを宣言 */
    initial-value: #3498db;
    inherits: false;
}
@property --color-end {
    syntax: '<color>';
    initial-value: #9b59b6;
    inherits: false;
}

.modern-gradient {
    /* 変数を使ってグラデーションを指定 */
    background: linear-gradient(45deg, var(--color-start), var(--color-end));
    /* 変数に対してtransitionをかける */
    transition: --color-start 1s, --color-end 1s;
    
    /* その他のスタイル */
    width: 100%;
    height: 100px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-weight: bold;
}

.modern-gradient:hover {
    /* ホバー時に変数の値を変更 */
    --color-start: #e74c3c;
    --color-end: #f1c40f;
}
@property ルールを使って、CSS変数(カスタムプロパティ)に「これは色ですよ」という型定義(syntax: '<color>')を行います。
これにより、ブラウザが変数の値の変化を「色の変化」として認識し、補完してくれるようになります。
これまでは不可能だった transition によるグラデーション色の直接変化が、これにより可能になりました。
背景サイズを大きくする必要がないため、パフォーマンス面でも有利な次世代のテクニックです。

面倒な時はジェネレーターを活用しよう

「きれいな色の組み合わせが思いつかない」「コードを書くのが面倒」という場合は、Web上のジェネレーターツールを活用するのも賢い方法です。

画面上で色を選んでプレビューを確認し、生成されたCSSコードをコピー&ペーストするだけで実装できます。

  • CSS Gradient Animator: グラデーションの動きを細かく設定してコードを書き出せるツール。
  • Gradient Magic: 豊富なプリセットからおしゃれなアニメーションを選べるギャラリーサイト。

HTML/CSSのスキルを活かして年収を上げる方法

以上、CSSを使ったグラデーションアニメーションの実装テクニックについて解説してきました。

なお、HTMLやCSSのスキルがある場合には、「副業で稼いで年収を上げる」といったことが可能です。
HTML/CSSのスキルを持つ人は多いものの、その分案件数も多く、副業エージェントやフリーランスエージェントを利用することで予想外の高単価案件が見つかることもあります。
エージェントサービスは、登録も利用もすべて完全無料なので、どんな求人や案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)