Webサイトのデザインにおいて、単色の背景や文字だけでは少し物足りないと感じることはありませんか?
そんな時に役立つのが、色が滑らかに変化する「グラデーションアニメーション」です。
背景色をゆっくりと移り変わらせて幻想的な雰囲気にしたり、ボタンのホバー時にキラッと光るような演出を加えたりと、表現の幅は無限大です。
この記事では、CSSを使ってグラデーションをアニメーションさせる基本的な仕組みから、文字やボタンへの応用、さらに現在のモダンな実装方法である「@property」を使ったテクニックまで、コピペで使えるコードとともに徹底解説します。
![]() 執筆者:マヒロ |
|
- 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; というプロパティを使います。これは背景画像を文字の形に切り抜く機能です。
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;
}
通常時は左半分が表示されている状態です。
: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を使ったグラデーションアニメーションの実装テクニックについて解説してきました。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



