CSS グラデーションが「のっぺり」する原因と、デザイナーが嫌がらない作り方
執筆: デジタル道具屋 編集部 / フロントエンド担当
Web フロントエンドの設計・実装に従事する編集チーム。デザインシステム構築や Tailwind / Vanilla CSS でのスタイリング実装が得意分野です。
本記事の執筆方針と編集ポリシーについてはAbout ページをご覧ください。
導入:「いい感じのグラデを当ててほしい」と頼まれて詰むフロントエンド


linear-gradient(blue, yellow) のような書き方をしておるな? 補間途中で『泥のような灰色』を経由しておる典型的な失敗じゃよ。」
1. グラデーションが「のっぺり/濁る」3大原因

- 補間色空間が sRGB のまま:色相が遠い2色(補色関係)を直接つなぐと、中間がグレーに沈む
- 中間カラーストップが無い:2色だけで距離が長いと、変化が直線的すぎて「帯」に見える
- 色の明度差が大きすぎる:白〜濃紺など極端な明度ジャンプは、画面サイズによってはバンディング(縞)の原因になる

2. 補間色空間を意識するだけで化ける
CSS Color Module Level 4 から、グラデーションの補間色空間を in oklch や in hsl のように指定できるようになりました。 色相環を経由する補間に切り替えると、彩度を保ったまま自然に変化します。
濁る書き方
background: linear-gradient(90deg, #2196f3, #ffeb3b);
/* 中間が灰色っぽくなりがち */OKLCH 補間
background: linear-gradient(in oklch 90deg, #2196f3, #ffeb3b);
/* 色相環を経由するため、彩度を保ったまま遷移 */
古いブラウザを考慮するなら「中間ストップ」
in oklch はモダンブラウザでは動きますが、レガシー対応が必要な場合は中間カラーストップを明示的に挟むのが確実です。 例えば青→黄なら、間に「青寄りの紫」「ピンク」など、色相環を時計回りに辿る色を 1〜2 個挟むだけで、濁りは消えます。
3. 線形 / 放射状 / 円錐の使い分け

| 関数 | 用途 | 注意点 |
|---|---|---|
linear-gradient | 背景の方向感、シンプルなボタンの陰影 | 角度を 90deg や to right で明示 |
radial-gradient | スポットライト効果、中心への注目誘導 | circle at top right など中心位置を指定 |
conic-gradient | ドーナツチャート、虹色グラデ、装飾的な背景 | 境目が鋭くなりがち。色の手前に 0deg, X 50% で繰り返し |

4. 実務の「困った」事例集
事例1:iOS Safari で線が見える(バンディング)
グラデーションが帯状の縞として見える現象です。8bit カラーの色解像度が足りないのが原因。 対策は noise() SVG フィルタを薄く重ねるか、半透明の ::after でディザを入れること。 極端な明度差を縮める(白→灰白など)でも軽減できます。
事例2:ボタンのグラデが「ペカペカ」して安っぽい
色差が大きすぎる、もしくは中央がハイライトになっていないケースが多いです。 プロは linear-gradient(180deg, rgba(255,255,255,0.15), rgba(0,0,0,0.05)) を主色の上に重ねて、 立体感だけを軽く付与します。色そのものは単色のまま、です。
事例3:グラデ背景上の文字が読めない
テキストとの間に background-blend-mode: multiply や半透明オーバーレイを挟むのが定石。 WCAG AA 基準(コントラスト比 4.5:1 以上)は、最も明るい点と最も暗い点の両方で確認します。 ヒーローセクションでは「下半分だけグラデを濃くする」テクニックも有効です。
🚨 現場の注意点:CSS変数とグラデーションの併用
--accent: #ff0000 のような CSS変数をグラデーションに使う場合、ブラウザによっては再描画コストが高くなります。 アニメーション(カーソル追従など)でグラデを動かすときは、@property で型を明示するか、 要素自体を transform で動かす方が滑らかです。
5. 自分で作るより、まず「叩き台」を生成する
ゼロから書くと、角度・色・カラーストップの調整に時間が溶けがちです。 当サイトのCSSグラデーション作成ツールでは、 ビジュアルで色とカラーストップを調整しながら、即座に CSS コードをコピーできます。 生成したコードをベースに、本記事の OKLCH 補間や中間ストップのテクニックを追加して仕上げると、 所要時間が大幅に短縮されます。
関連: Box Shadow 作成、Border Radius 作成 も組み合わせると、UI パーツの試作が一気に進みます。
参考にした一次情報
本記事の内容は、以下の公式仕様や一次情報を参照して執筆しています。
- CSS Images Module Level 4 - Gradients
W3C
https://www.w3.org/TR/css-images-4/#gradients
- linear-gradient() - CSS: Cascading Style Sheets | MDN
MDN Web Docs
https://developer.mozilla.org/ja/docs/Web/CSS/gradient/linear-gradient
- CSS Color Module Level 4 - Color Interpolation
W3C
https://www.w3.org/TR/css-color-4/#interpolation
この記事の内容を実際に試す
解説した内容は、以下のツールでブラウザ上から無料で試せます。