使い方
- プリセットを選ぶか、最初のレイヤーのオフセット、ぼかし、拡張、色、不透明度を調整します。
- より自然な奥行きを出すにはレイヤーを追加します。内側に影を付けるには「Inset」にチェックを入れます。
- プレビューの背景色とボックスの色をデザインに合わせて変更し、CSSをコピーします。
仕組み
box-shadowでは、各レイヤーに水平方向のオフセット、垂直方向のオフセット、ぼかし半径、拡張半径、色を指定します。必要に応じて先頭にinsetを付けます。正のオフセットは影を右下に移動します。ぼかしを加えると輪郭が柔らかくなります。ぼかし半径に負の値は指定できません。拡張半径は、ぼかす前に影を広げ(正の値)たり縮めたり(負の値)します。複数のレイヤーはカンマで区切り、最初のレイヤーが最前面に描画されます。
自然な立体感を出すには、薄い不透明度で小さくくっきりした影と、大きく柔らかな影を組み合わせるのが一般的です。「浮き上がり」プリセットではこの方法を使っています。色は不透明度を明示できるrgba()で記述します。影は要素のborder-radiusに沿って描画され、レイアウト上のスペースを取らないため、ほかの要素を移動させることはありません。
多くの要素に非常に大きなぼかしを指定すると、性能の低いスマートフォンではスクロールが遅くなることがあります。影をアニメーションさせる場合は、box-shadow自体をアニメーションさせるより、あらかじめ影を付けた疑似要素をフェードインさせるほうが滑らかです。
使用例
明るいページ上のカード
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.12), 0 8px 24px -4px rgba(0, 0, 0, 0.18); を指定すると、カードの輪郭がくっきりし、柔らかな浮き上がりを表現できます。
レイアウトをずらさないフォーカスリング
オフセット0、ぼかし0、拡張3pxのレイヤーをブランドカラーで指定すると、ボタンの周囲にくっきりした輪郭を描けます。borderと異なり、要素のサイズは変わりません。
押し込まれた入力欄
inset 0 2px 6px 0 rgba(0, 0, 0, 0.25) を指定すると、テキストフィールドが少しへこんで見えます。
よくある質問
box-shadowとfilter: drop-shadow()の違いは何ですか?
box-shadowは要素のボックスとborder-radiusに沿って描画され、拡張とinsetに対応しています。drop-shadow()はPNGやSVG画像の透明部分を含む、目に見える形状に沿って描画されますが、拡張やinsetには対応していません。
影が途中で切れるのはなぜですか?
親要素にoverflow: hiddenが指定されていると、影を含め、ボックスの外側にはみ出したものが切り取られます。親要素にpaddingを追加するか、overflowの指定を移動してください。
レイヤーはいくつ使えばよいですか?
ほとんどのインターフェースでは、1~2レイヤーで十分です。レイヤーを増やすとなめらかに見えることがありますが、描画コストが少し上がるため、長いリストでは影響することがあります。
プライバシー
CSSはブラウザー内で生成されます。データがアップロードまたは保存されることはありません。