
記事内に商品プロモーションが含まれる場合があります
今回はCSSを使ってウェブサイトの背景に美しいグラデーションをかける方法を解説します。以下の2パターンの方法に分けて解説します。
- ページの上から下まで全体の背景にグラデーションをかける
- 画面に表示される部分の背景にグラデーションをかける(スクロールしても固定)
1. ページ全体に縦のグラデーションをかける方法
この方法のイメージを図にしてみました。

ページ全体(body)の高さに合わせてグラデーションを描きます。同じ2色でも、ページが長いほど同じ距離での色の変化は緩やかになります。以下のコードでは、短いページも画面の高さ以上になるようにします。
CSSコード
グラデーションを生成するCSS関数linear-gradient()を、background-imageの値に指定します。以下は、ページの上から下へ色が変化するコードです。margin: 0でbodyの初期余白をなくし、min-height: 100vhで最低限の高さを確保しています。
body {
margin: 0;
min-height: 100vh;
background-color: orange;
background-image: linear-gradient(to bottom, gold 0%, orange 100%);
}これをブラウザ表示すると…
以下のようにコンテンツのある部分全体にグラデーションがかかります。

1番上のカラーはgold(色名で指定してます)で、下にかけてorangeへ近づいていきます。※ このgifアニメーションだとカクカクして見えますが、実際の表示はなめらかなグラデーションとなっています。
コードの解説
上のコードから解説していきます。
background-color: orange;↑これは単色の下地です。グラデーション画像を表示できない場合も、この背景色が残ります。
background-image: linear-gradient(to bottom, gold 0%, orange 100%);↑標準の書き方です。現在の主要ブラウザでは、この基本的なグラデーションにベンダープレフィックスは不要です。gold 0%は「1番上のグラデーションの始まりがgold色」ということを示しています。orange 100%は「1番下のグラデーション終わりがorange色」ということを示しています。もちろん「#F89174 100%」のようにカラーコードで書いてもOKです。
background-image: linear-gradient(to right, gold 0%, orange 100%);↑to rightなら左から右へ変化します。旧記事にあったIE専用filterは現行のコード例から外しました。グラデーションの方向は、このように関数の最初の引数で指定できます。
background-image: linear-gradient(to bottom, gold 0%, orange 100%);↑これが正規の指定です。to bottomは上から下ということを表しています。例えばこれをto rightとすれば左から右にグラデーションがかかります。
2. グラデーションの背景を固定する方法
次に表示される画面内でグラデーションをかけ、スクロールしても固定する方法を紹介します。

2-1. サンプル
たとえばサルワカで以前制作した「Typography World」では、スクロールしてもグラデーションが固定されるようにしていました。元ページは現在公開されていませんが、当時の表示を保存したGIFを掲載します。

CSSコード
以下は、背景専用の疑似要素を画面に固定し、本文より後ろに表示するコードです。htmlやbodyにtransformやfilterなどを指定している場合は、固定配置の基準や重なりが変わることがあるため、既存のCSSと合わせて確認してください。
body {
margin: 0;
min-height: 100vh;
isolation: isolate; /* 背景をbodyの重なりの中に保つ */
}
body::after {
content: "";
position: fixed;
inset: 0;
z-index: -1; /* 本文の背面 */
pointer-events: none; /* クリックを妨げない */
background-color: #f89174;
background-image: linear-gradient(to bottom, #ffc778 0%, #f89174 100%);
}ブラウザで表示すると…

このようにグラデーションが画面の上から下にかかっています。スクロールしても背景のグラデーションは固定されたままです。
解説
body::afterで画面サイズいっぱいの擬似要素を作り、それに対してグラデーションをかけています。
body {
margin: 0;
min-height: 100vh;
isolation: isolate;
}↑bodyの高さを最低でも画面の高さにし、長い本文では自然に伸びるようにします。固定背景の大きさは、この高さではなく疑似要素のposition: fixedとinset: 0で決まります。isolation: isolateは、背景の疑似要素をbodyの重なりの中に保つ指定です。
body::after {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
}body::after(疑似要素)を画面の四辺に固定します。z-index: -1で本文の背面へ置き、pointer-events: noneでリンク等のクリックを妨げないようにします。この解説用断片に、続く背景色とグラデーションを組み合わせたものが上の完成コードです。
background-color: #f89174;↑1つめの方法と同じく、背景画像の下に敷く単色を指定しています。
background-image: linear-gradient(to bottom, #ffc778 0%, #f89174 100%);↑上から下へのグラデーションです。0%が上端の色、100%が下端の色です。向きを変えるにはto topやto rightへ変更します。上下の色を逆にするには、始点と終点の色を入れ替えます。方向についてはさきほどの例も参照してください。
なぜ背景用の疑似要素を作るの?
背景専用の固定疑似要素を使うと、本文の長さから独立した画面サイズの背景を作れます。bodyの高さを100%にするだけでは背景は固定されません。背景画像を固定するbackground-attachment: fixedとは別の方法です。スマートフォンではブラウザのバーや表示領域の変化もあるため、対象端末でスクロール中の見え方を確認してください。
3. 対応ブラウザ
この記事は標準の基本的なlinear-gradient()を使います。旧記事の最低バージョン・発売年の表を、現在使う際の確認事項に更新しました。
| プロパティ | IE | Chrome | Safari | Firefox | Opera | iOS | Android |
|---|---|---|---|---|---|---|---|
| 標準の基本記法 | 対象外 | 対応 | 対応 | 対応 | 対応 | Safariで対応 | Chrome等で対応 |
| 確認事項 | 旧IE用コードは掲載しません | 対象の現行版で確認 | 固定背景も確認 | 対象の現行版で確認 | 対象の現行版で確認 | 実機でスクロール確認 | 実機でスクロール確認 |
Chrome・Edge・Firefox・Safariなどの現在の主要ブラウザでは、この基本的な標準記法を利用できます。古いIE専用コードは掲載しません。基本記法への対応と、固定背景が対象端末で期待どおりに動くかは分けて確認しましょう。