ナビゲーション

トークン

シャドウ

ライトとダークに合わせて調整した、重なりのあるエレベーションシャドウ。

このページの内容

クラス

クラス宣言
shadow-<name>box-shadow: var(--shadow-<name>);

shadow-<name> は box-shadow の値全体を設定します。2 つのシャドウクラスが互いのリストを追加し合うことはなく、優先される宣言がシャドウ全体を指定します。

値

各トークンは、カンマで区切られたネイティブシャドウのリストを持ちます。値を展開すると各レイヤーを確認できます。ライトとダークではオフセット、ぼかし、広がりの長さは同じで、light-dark() の色だけが異なります。

クラス値
shadow-xs
0 0 0 1px light-dark(oklch(0% 0 none / .04), oklch(100% 0 none / .04)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26))0 0 0 1px light-dark(oklch(0% 0 none / .04), oklch(100% 0 none / .04)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26))
shadow-sm
0 0 0 1px light-dark(oklch(0% 0 none / .04), oklch(100% 0 none / .05)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24))0 0 0 1px light-dark(oklch(0% 0 none / .04), oklch(100% 0 none / .05)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24))
shadow-md
0 0 0 1px light-dark(oklch(0% 0 none / .05), oklch(100% 0 none / .06)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26))0 0 0 1px light-dark(oklch(0% 0 none / .05), oklch(100% 0 none / .06)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26))
shadow-lg
0 0 0 1px light-dark(oklch(0% 0 none / .05), oklch(100% 0 none / .06)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3))0 0 0 1px light-dark(oklch(0% 0 none / .05), oklch(100% 0 none / .06)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3))
shadow-xl
0 0 0 1px light-dark(oklch(0% 0 none / .06), oklch(100% 0 none / .07)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3)), 0 32px 32px -16px light-dark(oklch(0% 0 none / .065), oklch(0% 0 none / .34))0 0 0 1px light-dark(oklch(0% 0 none / .06), oklch(100% 0 none / .07)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3)), 0 32px 32px -16px light-dark(oklch(0% 0 none / .065), oklch(0% 0 none / .34))
shadow-2xl
0 0 0 1px light-dark(oklch(0% 0 none / .06), oklch(100% 0 none / .07)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3)), 0 32px 32px -16px light-dark(oklch(0% 0 none / .065), oklch(0% 0 none / .34)), 0 64px 64px -32px light-dark(oklch(0% 0 none / .075), oklch(0% 0 none / .38))0 0 0 1px light-dark(oklch(0% 0 none / .06), oklch(100% 0 none / .07)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3)), 0 32px 32px -16px light-dark(oklch(0% 0 none / .065), oklch(0% 0 none / .34)), 0 64px 64px -32px light-dark(oklch(0% 0 none / .075), oklch(0% 0 none / .38))
shadow-inset
inset 0 0 0 1px light-dark(oklch(0% 0 none / .06), oklch(100% 0 none / .06)), inset 0 1px 2px light-dark(oklch(0% 0 none / .06), oklch(0% 0 none / .4))inset 0 0 0 1px light-dark(oklch(0% 0 none / .06), oklch(100% 0 none / .06)), inset 0 1px 2px light-dark(oklch(0% 0 none / .06), oklch(0% 0 none / .4))
すべてのシャドウの値を比較
shadow-xs
shadow-sm
shadow-md
shadow-lg
shadow-xl
shadow-2xl
shadow-inset

シャドウが変えるのは描画でありレイアウトではない

shadow-xs と shadow-xl は、同じボックスの周りに異なる広がりの影を描きます。どちらもシャドウ用の空間は確保しないため、後続要素の位置と間隔は変わりません。

シャドウの描画はレイアウトの空間を確保しない

サーフェスの形状と寸法、次の要素までの 16px の間隔は同じで、シャドウトークンだけが変わります。目盛りが測るのはボックス間の間隔であり、シャドウの見える縁までの距離ではありません。

テキストによる説明
  1. 両方の列は同じサーフェスと後続要素を含みます。寸法、padding、レイアウト上の 16px の間隔はすべて同じです。
  2. 左のサーフェスはプリセットの shadow-xs トークンを使います。右は shadow-xl を使い、より広い範囲に、より多くの層を描きます。
  3. どちらの列でも、次の要素は同じ高さから始まります。ボックスシャドウは、レイアウトに使う寸法や間隔を変えません。
  4. 両方のシャドウは実際のプリセット値を使います。色は画像のスキームに適応しますが、オフセット、ぼかし、広がりの長さは変わりません。間隔の目盛りは確認用の注記です。

トークンのリストで最初のシャドウは、後のシャドウより手前に描かれます。shadow-inset は内側のシャドウを使い、6 段階のサイズは外側のシャドウを使います。これらのトークンは、サーフェスの色、角丸、重なり順、切り取りの方針を指定しません。

各 light-dark() の色は、要素で実際に使われるカラースキームが選びます。シャドウの長さを変えたり別のユーティリティクラスを使ったりせずに、描画だけを変えられます。場所ごとのスキームの選択は、カラーロールを参照してください。

シャドウを消すには、ネイティブ宣言の (box-shadow:none) を使います。内側と外側のシャドウを組み合わせるには、両方のリストを含む 1 つのトークンを定義します。別々のクラスでは結合されません。

使用例

通常のサーフェスは低く保ち、その上に浮くものだけを持ち上げます。

Card

On the page

  • Duplicate
  • Rename
  • Archive
<div>  <article class="… shadow-xs">    <p>Card</p>    <p>On the page</p>  </article>  <ul class="… shadow-lg">    <li>Duplicate</li>    <li>Rename</li>    <li>Archive</li>  </ul></div>
生成された CSS
@layer theme {  :root,  :host {    --shadow-xs: 0 0 0 1px light-dark(oklch(0% 0 none / .04), oklch(100% 0 none / .04)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26));    --shadow-lg: 0 0 0 1px light-dark(oklch(0% 0 none / .05), oklch(100% 0 none / .06)), 0 1px 1px -.5px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .3)), 0 2px 2px -1px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .26)), 0 4px 4px -2px light-dark(oklch(0% 0 none / .04), oklch(0% 0 none / .24)), 0 8px 8px -4px light-dark(oklch(0% 0 none / .045), oklch(0% 0 none / .26)), 0 16px 16px -8px light-dark(oklch(0% 0 none / .055), oklch(0% 0 none / .3))  }}@layer utilities {  .shadow-lg {    box-shadow: var(--shadow-lg)  }  .shadow-xs {    box-shadow: var(--shadow-xs)  }}

カスタマイズ

プリセット値を変更したり、トークンを追加したりできます。--shadow-card を定義すると shadow-card が使えるようになります。

@theme {  --shadow-card:    0 1px 2px light-dark(oklch(0% 0 none / .08), oklch(0% 0 none / .4)),    0 12px 24px -12px light-dark(oklch(0% 0 none / .2), oklch(0% 0 none / .5));}
生成された CSS
@layer theme {  :root,  :host {    --shadow-card: 0 1px 2px light-dark(oklch(0% 0 none / .08), oklch(0% 0 none / .4)),      0 12px 24px -12px light-dark(oklch(0% 0 none / .2), oklch(0% 0 none / .5))  }}@layer utilities {  .shadow-card {    box-shadow: var(--shadow-card)  }}