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数値文字参照を表示します。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
FPS カウンター
requestAnimationFrame でブラウザーの FPS を測定。平滑化、最小・最大フレームレート、警告しきい値、任意のグラフに対応。ローカルで動作し、アップロードも API も不要です。
プレースホルダー画像ジェネレーター
1〜4000 pxの画像に色と文字を設定し、PNGで保存できます。外部URLとHTMLもコピーできます。
HTML 圧縮ツール
通常のコメントを削除し、空白を整理して、ブラウザ内で HTML をコンパクトにします。使用前に結果を確認してください。
このツールは他の言語でも利用できます
- CSS-Box-Schatten-Generator [DE]
- Gerador de Sombra de Caixa CSS [PT]
- Trình tạo box-shadow CSS [VI]
- CSS box-shadow-generator [SV]
- เครื่องสร้างเงากล่อง CSS [TH]
- Generator Bayangan Kotak CSS [ID]
- CSS 박스 그림자 생성기 [KO]
- Generador de Sombra de Caja CSS [ES]
- مولد الظل لصندوق CSS [AR]
- Générateur d'ombre de boîte CSS [FR]
- CSS-box-shadow-generator [NL]
- Generator cienia CSS (box-shadow) [PL]
- Generatore di Ombre CSS [IT]
- Генератор теней box-shadow для CSS [RU]
- CSS Box Shadow (Kutu Gölgesi) Oluşturucu [TR]
- CSS 盒子阴影生成器 [ZH]
- CSS Box Shadow Generator [EN]