2026年版 ToolShare Lab / Guide

CSSボックスシャドウ
完全ガイド

「なんとなく影をつけているけど、ちゃんと理解していない」を解決する。box-shadowプロパティの基本構文からinsetシャドウ、複数シャドウの重ね方、ネオモーフィズムやグロウ効果などおしゃれなデザインパターン5選まで、コード付きでまとめた。

読了時間: 約10分 更新日: 2026年3月10日

box-shadowの基本構文

CSSのbox-shadowプロパティは、要素に影(シャドウ)効果を加えるプロパティだ。カードの浮き上がり表現といった単純な使い方から、ネオモーフィズムやグロウといった凝ったデザインまで、UIの奥行きと立体感はほぼこの1プロパティで決まる。

構文の全パラメータ

box-shadowの完全な構文はこうなる。

box-shadow: offset-x offset-y blur-radius spread-radius color inset; /* 例 */ box-shadow: 4px 8px 16px 0px rgba(0, 0, 0, 0.15);

各パラメータの意味を順番に整理する。

パラメータ 意味 必須 初期値
offset-x X方向のずれ。正の値で右、負の値で左へ影が伸びる 必須 -
offset-y Y方向のずれ。正の値で下、負の値で上へ影が伸びる 必須 -
blur-radius ぼかし半径。大きいほど影がふんわりと広がる。0だとシャープな影 任意 0
spread-radius 影の拡大・縮小。正の値で広がり、負の値で縮む 任意 0
color 影の色。rgba()で透明度も指定できる 任意 currentColor
inset キーワード。指定すると内側に影が付く 任意 外側シャドウ

最小構成から順番に理解する

  1. offset-xとoffset-yだけ(最小構成)

    2つの値だけでも影は付くが、ぼかしがなくシャープな影になる。意図的なデジタル風表現なら使えるが、通常はblurも一緒に指定する。

  2. blurを追加する(標準構成)

    blurを加えると自然なふんわりとした影になる。UIカードやボタンでは box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1) のように blur を 8〜16px 程度に設定するのが定番だ。

  3. spreadを使って影の大きさを制御する

    spreadに正の値を指定すると影が要素の周囲に広がり、負の値で縮む。blurだけでは作れない形状のシャドウが、spreadを組み合わせることで実現できる。

  4. 色はrgba()を使う

    rgba(0, 0, 0, 0.15) のように透明度を指定するのが基本だ。不透明な黒や単色の影は浮いて見えることが多い。透明度を持たせることで影が背景に馴染む。

Point

offset-x と offset-y を両方 0 にすることで、全方向均等に広がる影(Ambient Shadow)が作れます。カードUIで最もよく使われるパターンで、box-shadow: 0 2px 8px rgba(0,0,0,0.12) のように書きます。

insetシャドウの使い方

insetキーワードを追加すると、影が要素の外側ではなく内側に付く。押し込まれたような表現や凹んだ溝のようなデザインに使う場面が多く、ネオモーフィズムの凹型ではほぼ必須のキーワードだ。

insetの基本

/* 通常(外側) */ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); /* inset(内側) */ box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.2); /* insetは先頭に書く */ box-shadow: inset 0 4px 8px -2px rgba(0, 0, 0, 0.3);

insetの主な用途

/* ボタンの押下状態でinsetを使う例 */ .button { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); transition: box-shadow 0.1s ease; } .button:active { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); transform: translateY(1px); } /* テキスト入力フィールドの凹み表現 */ .input { box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.08), inset 0 0 0 1px rgba(0, 0, 0, 0.12); }

Point

insetシャドウは要素の overflow プロパティの影響を受ける。overflow: hidden が指定されていると inset shadow が見えなくなる——これは見落としやすいので頭に入れておきたい落とし穴だ。

複数シャドウの重ね方

box-shadowはカンマ区切りで複数の影を同時に指定できる。リストの先に書いた影が上(前面)に描画される。複数シャドウを重ねることで、現実の物体のようなリアルな影の表現が生まれる。

複数シャドウの基本構文

/* カンマで区切って複数指定 */ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05), /* 近い影(強め) */ 0 8px 16px rgba(0, 0, 0, 0.08), /* 遠い影(ふんわり) */ 0 24px 48px rgba(0, 0, 0, 0.06); /* 最も広い環境光 */

2層シャドウで自然な浮き上がりを表現

現実世界の影は1種類ではない。光源に近い鮮明な影と、環境光による拡散した影が重なっている。CSSで2〜3層の影を重ねると、その物理的な現象を再現できる。

/* 自然な浮き上がり(2層) */ .card { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 4px 12px rgba(0, 0, 0, 0.08); } /* ホバー時により浮き上がる */ .card:hover { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12), 0 12px 32px rgba(0, 0, 0, 0.1); transform: translateY(-2px); transition: box-shadow 0.2s ease, transform 0.2s ease; }

外側と内側を組み合わせる

/* 外側シャドウ + insetを同時指定 */ .glass-card { box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12), /* 外側の影 */ inset 0 1px 0 rgba(255, 255, 255, 0.5); /* 内側の光沢 */ }

Point

複数シャドウはインラインでも書けるが、各シャドウを改行してコメントを残す習慣をつけるといい。「近い影」「遠い影」と意図を記録しておけば、数週間後の自分もチームメンバーも即座に意図を読み取れる。

おしゃれなデザインパターン5選

構文を理解したら、実際のデザインパターンへの応用が本番だ。以下の5つはWebデザインの現場で広く使われているシャドウ表現で、コードをそのまま流用できるように用意した。

パターン1: ネオモーフィズム(Neumorphism)

2020年頃に流行したスタイルで、要素が背景から浮き上がって見える立体的なデザイン。「光源は左上」という仮定のもと、左上に明るい影、右下に暗い影を組み合わせる。背景色と近い色のシャドウを使うのがポイント——これが外れると途端に破綻する。

/* ネオモーフィズム(凸型:浮き上がり) */ .neumorphism-raised { background: #e0e5ec; box-shadow: 8px 8px 16px rgba(163, 177, 198, 0.7), /* 右下:暗い影 */ -8px -8px 16px rgba(255, 255, 255, 0.9); /* 左上:明るい影 */ border-radius: 12px; } /* ネオモーフィズム(凹型:押し込み) */ .neumorphism-inset { background: #e0e5ec; box-shadow: inset 8px 8px 16px rgba(163, 177, 198, 0.7), inset -8px -8px 16px rgba(255, 255, 255, 0.9); border-radius: 12px; }

注意

ネオモーフィズムはコントラスト比が低くなりやすく、アクセシビリティ上の問題が指摘されている。デザインとして使う場合、WCAG 2.1 のコントラスト比基準(テキスト 4.5:1 以上)を必ず満たしているか確認すること。

パターン2: フラットシャドウ(Flat Shadow)

blurをゼロにして、斜め方向に影をオフセットさせるデザイン。イラスト的でポップな印象を与え、ランディングページやポートフォリオサイトでよく見られる。ホバー時に影が縮む動きと組み合わせると、ボタンが実際に押し込まれているような手触りが出る。

/* フラットシャドウ */ .flat-shadow { box-shadow: 6px 6px 0px #1a1a2e; border: 2px solid #1a1a2e; border-radius: 8px; transition: box-shadow 0.15s ease, transform 0.15s ease; } /* ホバー時:影が縮んで押し込まれたように見える */ .flat-shadow:hover { box-shadow: 2px 2px 0px #1a1a2e; transform: translate(4px, 4px); }

パターン3: リアルシャドウ(多層シャドウ)

Google の Material Design でも採用されている、複数のシャドウを重ねてリアルな物理的な影を再現するパターン。elevation(浮き高さ)によってシャドウの強度を段階的に変えていく設計で、モーダルが一番上に浮いているという視覚的ヒエラルキーを影だけで伝えられる。

/* elevation 1 (ほぼ地面) */ .elevation-1 { box-shadow: 0 1px 1px rgba(0, 0, 0, 0.14), 0 2px 1px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.20); } /* elevation 4 (標準カード) */ .elevation-4 { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.14), 0 4px 5px rgba(0, 0, 0, 0.12), 0 1px 10px rgba(0, 0, 0, 0.20); } /* elevation 8 (ドロップダウン・メニュー) */ .elevation-8 { box-shadow: 0 5px 5px rgba(0, 0, 0, 0.14), 0 8px 10px rgba(0, 0, 0, 0.12), 0 3px 14px rgba(0, 0, 0, 0.20); } /* elevation 16 (ダイアログ・モーダル) */ .elevation-16 { box-shadow: 0 8px 10px rgba(0, 0, 0, 0.14), 0 16px 24px rgba(0, 0, 0, 0.12), 0 6px 30px rgba(0, 0, 0, 0.20); }

パターン4: グロウ効果(Glow Shadow)

offset-xとoffset-yを0にして、有彩色のシャドウを大きなblurで広げることで発光しているような輝きを表現する。CTAボタンやブランドカラーを強調したい要素に最適で、暗い背景との組み合わせで効果が最大化する。

/* インディゴのグロウ */ .glow-indigo { background: #6366f1; box-shadow: 0 0 24px rgba(99, 102, 241, 0.5); transition: box-shadow 0.3s ease; } .glow-indigo:hover { box-shadow: 0 0 12px rgba(99, 102, 241, 0.4), 0 0 40px rgba(99, 102, 241, 0.3); } /* エメラルドのグロウ */ .glow-emerald { background: #10b981; box-shadow: 0 0 20px rgba(16, 185, 129, 0.45); } /* グロウ + 通常シャドウの組み合わせ(立体感も出る) */ .glow-combined { background: #8b5cf6; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2), 0 0 32px rgba(139, 92, 246, 0.4); }

活用シーン

グロウ効果は暗い背景(#0f172aなど)との組み合わせで最も映えます。明るい背景では効果が薄れるため、カードやヒーローセクションの背景色を落としてから適用すると効果的です。

パターン5: 立体感(3D感)のある影

大きな offset-y と小さな blur を組み合わせることで、物体が実際に宙に浮いているような立体感を出す。ランディングページのスクリーンショット紹介やUIモックアップの掲載でよく見かける、あの「製品画像が浮いてる」表現がこれだ。

/* スクリーンショット・UIモックアップ向け */ .screenshot { box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15), 0 60px 100px rgba(0, 0, 0, 0.1); border-radius: 8px; } /* ボタン(奥行きのある立体感) */ .button-3d { background: #6366f1; box-shadow: 0 4px 0 #4338ca, /* 下面:立体の奥行き部分 */ 0 6px 12px rgba(99, 102, 241, 0.3); /* 底面の影 */ transition: box-shadow 0.1s ease, transform 0.1s ease; } .button-3d:active { box-shadow: 0 1px 0 #4338ca, 0 2px 4px rgba(99, 102, 241, 0.2); transform: translateY(3px); }

パフォーマンスへの影響と最適化

box-shadowはブラウザのGPUでレンダリングされるが、使い方を誤るとアニメーション時のパフォーマンスが落ちる。デスクトップでは気にならなくても、モバイルで突然カクつくのはこの影響であることが多い。

パフォーマンスに影響する要因

最適化のアプローチ

  1. will-changeプロパティを使う

    アニメーション対象の要素に will-change: box-shadow を指定すると、ブラウザが事前にGPUレイヤーを用意する。ただし全要素に指定するとメモリを食いつぶすため、実際にアニメーションする要素だけに限定すること。

  2. box-shadowの代わりにfilter: drop-shadowを使う

    filter: drop-shadow() はGPU処理されやすく、SVGや透明PNGの輪郭に沿った影を付けられる。ただし spread-radius の指定ができないなど機能が限られるため、形状コントロールが必要な場面では box-shadow が適している。

  3. アニメーションはopacityで代替する

    ホバー時に box-shadow の値を変えるより、::after 疑似要素に大きなシャドウを仕込んでおき、ホバー時に opacity でフェードインさせる方法が軽い。opacity は GPU 合成のみで処理されるため、毎フレームのリペイントを避けられる。

/* パフォーマンスに優しいホバーシャドウ(opacityで切り替え) */ .card { position: relative; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .card::after { content: ''; position: absolute; inset: 0; border-radius: inherit; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); opacity: 0; transition: opacity 0.3s ease; } .card:hover::after { opacity: 1; }

Point

Chrome DevTools の Performance パネルで box-shadow 起因のリペイントを確認できる。「Paint flashing」を有効にすると影響を受けている要素が緑でフラッシュするので、スクロールしながら見ると一目瞭然だ。

ダークモードでのシャドウ設計

ダークモードで box-shadow を使うとき、黒い背景に黒い影は当然見えない。ここが見落とされやすいポイントで、ライトモードで完璧に仕上げたシャドウがダークモードで消える——という失敗は珍しくない。設計段階で以下の3つのアプローチを知っておくと対処できる。

アプローチ 方法 向いているケース
影を使わずelevationをborderで表現 透明度の高いborderで要素の輪郭を示す シンプルなダークUI
影の色を明るくする 黒ではなく半透明の白や明るいグレーを使う グラデーションが複雑な背景
グロウシャドウに切り替え 有彩色のグロウでelevationを表現する ブランドカラーが強いデザイン
/* CSS変数でライト/ダークを切り替える例 */ :root { --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.12); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12); } @media (prefers-color-scheme: dark) { :root { /* ダークモードでは影の代わりに微細なborderを使う */ --shadow-sm: 0 0 0 1px rgba(255, 255, 255, 0.08); --shadow-md: 0 0 0 1px rgba(255, 255, 255, 0.1); --shadow-lg: 0 0 0 1px rgba(255, 255, 255, 0.12); } } /* 有彩色グロウをダークモードで使う例 */ @media (prefers-color-scheme: dark) { .card-accent { box-shadow: 0 0 0 1px rgba(99, 102, 241, 0.3), 0 4px 16px rgba(99, 102, 241, 0.15); } }

Material Design 3 のアプローチ

Google Material Design 3では、ダークモードで影の代わりに「Surface tint」(背景をブランドカラーで微妙に染める)でelevationを表現している。シャドウを完全に排除してコントラスト問題を回避するアプローチで、自前のデザインシステム設計にも参考になる。

box-shadowジェネレーターの使い方

box-shadow の値は、数値を細かく調整しながら目視で確認する作業の連続だ。コードを書いてはリロードして確認して——を繰り返すのは時間の無駄。当サイトのbox-shadowジェネレーターなら、スライダーで値をリアルタイムに動かしながらプレビューできる。

ジェネレーターの使い方(5ステップ)

  1. プレビュー要素の設定

    背景色や要素のサイズを設定する。実際のデザインに近い色で確認することで、同じシャドウでも背景色によって印象がまったく変わるのを実感できる。

  2. offset・blur・spreadをスライダーで調整

    各パラメータのスライダーを動かすとリアルタイムでプレビューに反映される。X/Yのオフセット、blur、spreadを順番に調整しながら、各パラメータの効果を確認できる。

  3. 影の色と透明度を選択

    カラーピッカーで影の色を選び、不透明度スライダーで透明度を調整する。rgba()の値がリアルタイムで更新されるので、数値とビジュアルの対応関係を掴みやすい。

  4. insetの切り替えと複数シャドウの追加

    「内側シャドウ」トグルでinsetの有無を切り替えられる。「シャドウを追加」ボタンで複数のシャドウを重ねれば、多層シャドウも視覚的に確認しながら作れる。

  5. CSSコードをコピー

    完成したシャドウのCSSコードを「コピー」ボタンでクリップボードに取得し、プロジェクトにそのまま貼り付けるだけ。

ツールで効率化

登録不要・完全無料。ネオモーフィズム・グロウ・フラットシャドウのプリセットから微調整するだけで、この記事で紹介したデザインパターンを即座に再現できる。

その他の活用場面

box-shadowはUIコンポーネントだけに留まらない。知っておくと地味に役立つ使い方を4つ挙げておく。

box-shadowジェネレーターで今すぐ試す

この記事で解説したbox-shadowのパターンを、スライダーを動かしながらリアルタイムでプレビューできる。ネオモーフィズム・グロウ・フラットシャドウのプリセット収録。登録不要・完全無料。

よくある質問

box-shadowとfilter: drop-shadowの違いは?
box-shadow はボックスモデル(要素の矩形)に基づいて影を付けるが、filter: drop-shadow は要素の実際の形状(透明部分を含む)に沿って影を付ける。SVGアイコンや透過PNGには輪郭通りの影が付くため drop-shadow が向いている。パフォーマンス面では drop-shadow の方が GPU 処理されやすいが、spread-radius の指定ができないなど機能が限られる。用途で使い分けること。
box-shadowはborder-radiusと一緒に使えますか?
使える。border-radius を指定した要素に box-shadow を付けると、影の形も border-radius に沿う。完全に丸い要素(border-radius: 50%)に box-shadow を付けると丸い影になる。ネオモーフィズムのデザインではこの組み合わせが特に重要だ。
box-shadowはCSSトランジションでアニメーションできますか?
できる。transition: box-shadow 0.3s ease のように指定すると box-shadow の変化をアニメーションできる。ただし box-shadow のアニメーションはリペイントを引き起こすため、モバイルでカクつく可能性がある。複雑なアニメーションには ::after 疑似要素に shadow を用意して opacity でフェードさせる方法の方が軽量だ。
ネオモーフィズムをアクセシビリティに配慮して使うには?
ネオモーフィズムはコントラスト比が低くなりやすく、低視力のユーザーには見づらい場合があります。対策として、①テキストには十分なコントラスト比(4.5:1以上)を確保する、②ボタン等のインタラクティブ要素にはフォーカスリングを必ず表示する、③装飾的な使い方に留めてコアなUIコンポーネントへの使用は慎重にする、の3点が基本になる。
box-shadowをborderの代わりに使うメリットは?
box-shadow: 0 0 0 2px #6366f1 のように offset と blur を 0 にして spread だけ指定すると、border と同じ見た目になる。ボックスモデルに影響しないため(要素のサイズが変わらない)、ホバー時に border を追加・除去してもレイアウトがずれない。ボタンのフォーカスリングやホバーハイライトで使うと、ガタツキのないなめらかな UI が作れる。
影の色に黒以外を使うメリットは?
純粋な黒(rgba(0,0,0,x))より、要素の色に合わせた有彩色の影の方が自然でおしゃれに見える。青いボタンには rgba(99, 102, 241, 0.4) のような青みがかった影を使うとグロウ感が出る。背景色に近い色の影を使うと要素がなじんで見えるのがネオモーフィズムの原理だ。「黒い影は安っぽい」はCSSデザイナーの間では定説になっている。