Webページの雰囲気を、もっと変わった感じにしたい・・・
そんなときにおすすめなのが、時間によって背景がじわっと変化するグラデーション背景の演出です。
この記事では、JavaScriptとCSSを使って、数秒ごとに背景グラデーションがなめらかに切り替わる演出を紹介します。
このページの背景でも、実際にその演出が動いています。
リアルタイムで動きを体験しながら、仕組みを理解していきましょう。
背景グラデーションを「時間で切り替える」とは?
CSSではアニメーションはできても、「時間経過で別のグラデーションに切り替える」ようなことは基本的にできません。
そこでJavaScriptで制御することで、以下のような流れで自然な背景の切り替えを実現します:
- 背景用のレイヤー(
div)を2つ重ねて配置 - JavaScriptでランダムにグラデーションを選ぶ
opacityを使ってフェード切り替えする
貼るだけで動く!完成コード
HTMLコード
<!-- 背景レイヤー2つと見出し --> <div id="bg1" class="background"></div> <div id="bg2" class="background"></div>
CSSコード
body {
margin: 0;
/*高さが足りない時に設定
min-height: 100vh;
overflow: hidden;
*/
}
.background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
transition: opacity 2s ease-in-out;
background: linear-gradient(135deg, #1a1a1a, #2c2c2c);
}
#bg1 {
opacity: 1;
}
#bg2 {
opacity: 0;
}JavaScriptコード
const gradients = [
"linear-gradient(135deg, #0f2027, #203a43, #2c5364)",
"linear-gradient(180deg, #232526, #ffffff,#414345,#ffffff)",
"linear-gradient(135deg, #141e30,#dddddd, #243b55)",
"linear-gradient(150deg, #ffffff,#000000, #434343)",
"linear-gradient(180deg, #1c1c1c, #ff0000,#383838)",
"linear-gradient(135deg, #2b5876, #4e4376,#ff00ff,#141e30,#0f2027)"
];
const bg1 = document.getElementById("bg1");
const bg2 = document.getElementById("bg2");
let isBg1Visible = true;
setInterval(() => {
const nextGradient = gradients[Math.floor(Math.random() * gradients.length)];
if (isBg1Visible) {
bg2.style.background = nextGradient;
bg2.style.opacity = 1;
bg1.style.opacity = 0;
} else {
bg1.style.background = nextGradient;
bg1.style.opacity = 1;
bg2.style.opacity = 0;
}
isBg1Visible = !isBg1Visible;
}, 6000);
コードのポイント解説
.backgroundを2つ用意して、交互に表示することで切り替えを演出opacityでフェードするので、カクカクせず自然な印象gradients配列にお好みのグラデーションを追加すれば、自由に変更可能- 6秒ごとにランダムで背景が切り替わる仕組みになっています
カスタマイズ例:色・時間・効果を変える
以下のポイントを変えることで、演出を好みに合わせてカスタマイズできます:
gradients[]の色を変更 → 表現の雰囲気を変える(季節、ブランドカラーなど)setInterval(..., 6000)→ 6秒→10秒、など調整可能transition: opacity→ 時間を2秒→3秒にして、もっとゆったりとした切り替えに
gradients[]の色を変更
下記コードのgradients[]配列の中の色を変更します。また、グラデーション行を追加することも可能です。
const gradients = [
"linear-gradient(135deg, #0f2027, #203a43, #2c5364)",
"linear-gradient(180deg, #232526, #ffffff,#414345,#ffffff)",
"linear-gradient(135deg, #141e30,#dddddd, #243b55)",
"linear-gradient(150deg, #ffffff,#000000, #434343)",
"linear-gradient(180deg, #1c1c1c, #ff0000,#383838)",
"linear-gradient(135deg, #2b5876, #4e4376,#ff00ff,#141e30,#0f2027)"
];下記ページのグラデーションジェネレーターを利用して、色を変更してみましょう
あわせて読みたい

作成されたグラデーションを選んで編集 CSSグラデーションジェネレーター レッド系 ブルー系 グリーン系 オレンジ系 パープル系 ブラウン系 日本の伝統色 ゴールド系 ボタン色(CTA) 角度 (°)は、-180~180度を指定 0° 色1: #ff7eb3 色2: #ff75...
切り替えのタイミングを変更する
下記の数値は「ミリ秒(1000 = 1秒)」です。
たとえば10秒ごとにしたい場合は 10000 に変更すればOKです。
setInterval(..., 6000);
この setInterval() は、一定の時間ごとに処理をくり返すための関数です。
setInterval(関数, 間隔);
関数:繰り返し実行したい処理(今回は背景の切り替え)間隔:繰り返す時間(ミリ秒で指定。1000 = 1秒)
フェードのスピードを調整する
下記のCSSコードの2s を 3s や 4s に変更すると、よりゆっくりと切り替わる演出になります。
transition: opacity 2s ease-in-out;
背景の重ね方を少し工夫する
デザインによっては、背景にぼかしやフィルター、動く模様を追加したくなるかもしれません。
その場合は .background に以下のようなスタイルを加えてみてください:
.background{
filter: blur(4px);
mix-blend-mode: overlay;
}
または、背景画像とグラデーションを重ねるなどの応用も可能です。



