CSSボックスシャドウジェネレーター
box-shadow のルールを 1 つずつ作成します。水平・垂直オフセット、ぼかし、広がり、色、任意の inset を設定して、結果をコピーしてください。本物のシャドウは通常 2〜3 層必要なので、各レイヤーを個別に生成し、ルールをカンマでつなぎます。
ボックスシャドウのデザイン方法
-
1
シャドウの値を設定する
水平オフセット、垂直オフセット、ぼかし半径、広がり、そして不透明度を含む色を指定します。
-
2
inset を切り替える
シャドウを inset に切り替えると内側のシャドウになります。押し込まれたボタンやくぼみの効果に便利です。
-
3
色を選ぶ
不透明度の低い黒が定番です。要素の色合いに合わせた、やや暗めの色付きシャドウのほうが自然に見えます。
-
4
CSS をコピーする
1 つのシャドウルールをコピーしてスタイルシートに貼り付けます。複数レイヤーのシャドウを作るには、各レイヤーを個別に生成し、ルールをカンマで結合します。
box-shadowの構文
box-shadow: <x-offset> <y-offset> <blur> <spread> <colour> [inset];
- x-offset: 正の値は右、負の値は左を表します。
- y-offset: 正の値は下、負の値は上を表します。
- blur: 0ならくっきりとした輪郭、値が大きいほどやわらかくなります。見た目のサイズは、要素の外側にぼかし値の約1.5倍ほど広がります。
- spread: 要素の外側に加わる追加のサイズです。正の値ではシャドウが大きくなり、負の値では小さくなります(控えめなハローに便利です)。
- colour: あらゆるCSSの色に対応します。
rgba(0, 0, 0, 0.15)が定番中の定番です。 - inset: 要素の内側にシャドウを反転させるキーワードです。
多層シャドウはリアルに見える
このジェネレーターは一度に 1 つのシャドウルールしか出力しません。複数レイヤーのシャドウを作るには、各レイヤーを個別に生成し、ルールをカンマで結合してください。
0 0 40px のシャドウを1つだけ使うと、ぼんやりとした印象になります。要素の近くに置く小さく鋭いシャドウと、外側に置く大きくやわらかいシャドウの2層を重ねると、実際の光が散乱する様子を再現できます。
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.08),
0 4px 12px rgba(0, 0, 0, 0.08);
1行目は密着した接地シャドウを、2行目はよりやわらかい環境シャドウを表します。このひとつのパターンだけで、カード型UIの80%をカバーできます。
エレベーションシステム
マテリアルデザインでは6段階のエレベーション(高度)を使い、それぞれ異なるシャドウの組み合わせを割り当てています。簡略化すると次のとおりです。
| エレベーション | シャドウ |
|---|---|
| 1(静止状態) | 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.24) |
| 2 | 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(0,0,0,.23) |
| 3 | 0 10px 20px rgba(0,0,0,.19), 0 6px 6px rgba(0,0,0,.23) |
| 4(浮き上がり) | 0 14px 28px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.22) |
| 5(浮遊) | 0 19px 38px rgba(0,0,0,.30), 0 15px 12px rgba(0,0,0,.22) |
エレベーションの役割ごとに1つを選び、一貫して使いましょう。
色付きシャドウのほうが自然に見える
純粋な黒のシャドウは人工的に見えます。実際のシャドウは、その下にある表面の色を帯びるからです。次のように試してみてください。
box-shadow: 0 12px 24px rgba(40, 80, 120, 0.18);
純黒ではなく、クールな青みがかったグレーを使っています。暖色系の背景では、より暖かみのある色合いを選びましょう。
パフォーマンス
ボックスシャドウは再描画のたびに描かれます。多くの要素に大きく重いシャドウを設定すると、スクロールが遅くなることがあります。対策は次のとおりです。
- 要素に
transform: translateZ(0)を指定し、合成レイヤーを強制的に生成します。 - シャドウをclip-pathに沿わせる必要がある場合にかぎり、複雑なシャドウを
filter: drop-shadow()に置き換えます(一般的には処理が遅くなります)。 - 頻繁に再描画される要素では、シャドウを控えめにします。
押し込み状態のためのinset
.button:active {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.12);
}
insetシャドウはくぼんだ見た目を演出し、ボタンが表面に押し込まれたように見せます。下方向への小さな transform: translateY(1px) と組み合わせると、触感のあるクリック感が得られます。
よくある質問
たいていは、ぼかしが弱すぎるか、広がり(spread)が大きすぎるためです。ぼかしのない輪郭の硬いシャドウは、要素が二重になっているように見えます。ぼかしを大きくし(20〜30pxが一般的な出発点です)、広がりは0か、ごく小さな負の値に保ってください。
box-shadowはborder-radiusを含む要素のボーダーボックスに追従するため、角丸のカードには自動的にきれいに丸まったシャドウが付きます。clip-pathで作った形状の場合、box-shadowはクリップには追従しないので、代わりに filter: drop-shadow() を使ってください。
選んだ方向に大きくオフセットし、負の広がりで反対側を隠します。あるいは2つのシャドウを使い、1つを対象の側に表示させ、もう1つを負の広がりにして、はみ出した不要な部分を「打ち消す」方法もあります。
厳密な上限はありませんが、シャドウが1つ増えるごとに描画処理も1つ増えます。実用的な上限は3〜4層で、それ以上必要な場合は背景画像やSVGの使用を検討すべきです。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
HTML フォーマッター
ブラウザ内で HTML を 2 または 4 スペースで整形します。HTML はアップロードも検証もされません。
カラーパレットジェネレーター
基準のHEXカラーから、モノクロマティック、類似色、補色、トライアド、テトラードのパレットを生成し、コピーしやすいCSS変数として書き出します。
バイナリからASCIIへの変換ツール
バイナリ(スペース区切りのバイト、または長いビット列)を貼り付けると、それが表すASCIIテキストを8ビットずつ復号して取得できます。