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; }
または、背景画像とグラデーションを重ねるなどの応用も可能です。