結論

プロは装飾を「足す」のではなく「引く」。要素を分けたくなったら反射的に 1px solid を引くのをやめ、余白 → 背景色差 → box-shadow → 線 の順で手段を選び、線は最後の手段にする。線を引くときも「布の静かな縫い目」レベル(1px・不透明度12%)に抑え、影は真っ黒禁止・単一光源・背景の色相で着色する。逆に、足してよい数少ない装飾が「アクセント帯」だ。

01 — 分離は「余白→背景色差→影→線」の順、線は最後

要素を分けたくなった瞬間に border へ手を伸ばすのが学生っぽさの最大要因。border は句読点のように脳へ強制的な区切りを作るため、多用すると busy and cluttered(雑然)に見え、2009年のフォームやスプレッドシートの古さが出る。まず近接(余白)でグルーピングし、それでも足りなければ背景色差、影、最後に線、という優先順位を体に入れる。

プロフィール
通知設定
プライバシー
✗ 全項目を枠線で囲う → 雑然・スプレッドシート風
アカウント

プロフィール

通知設定

プライバシー

✓ 余白+小見出しでグルーピング → 線ゼロでも分かる

primary7 Practical Tips for Cheating at Design — Refactoring UI

02 — 線を引くなら「静かな縫い目」に抑える

密度が高く余白でスケールできない反復コンテンツ(テーブル・設定リスト・スペック表)では、線が現実解になる。そのときの正準値が Material Design 由来の 1px厚・不透明度12%(明地は rgba(0,0,0,0.12)、暗地は白12%)。テストは簡単で、「ページを開いて最初に目に入るのが線なら、それは過剰」。線は最初に気づかれてはいけない。

重量318g
容量20000mAh
出力65W
✗ 真っ黒1px → 線が主役になって騒がしい
重量318g
容量20000mAh
出力65W
✓ 黒12%の縫い目 → 区切るが主張しない

primaryDividers — Material Design

blogVisual Dividers in User Interfaces — Tubik Studio

03 — 影は「真っ黒禁止・背景の色相で着色・多層」

box-shadow: 0 2px 4px rgba(0,0,0,0.5) のような pure black の影は背景を脱色し、washed-out grey(洗いざらしのグレー)に見せる。デフォルト値のまま使うこと自体が安っぽさの記号だ。プロは影色を 背景の色相に寄せて彩度・明度を下げた色(青背景なら hsl(220deg 40% 30%))にし、現実の光の減衰を真似て低不透明度を多層に重ねる。単層のベタ影は奥行きが死ぬ。

cheap
✗ 単層・真っ黒0.5 → 縁が濁り背景が脱色
pro
✓ 青220degで着色・6層 → 自然な距離感

primaryDesigning Beautiful Shadows in CSS — Josh W. Comeau

04 — 影は単一光源を共有する

カードごとに影の向き・比率がバラバラだと、一貫した光源が成立せず全体が「雑な貼り合わせ」に見える。ページ上のすべての影は同じ光源(上方やや手前)を共有し、垂直オフセット=水平の約2倍を守る。浮くほどオフセットと blur を増やし opacity を下げる、という比率を全要素で揃えるだけで画面が締まる。

A
B
C
✗ 影の向きが要素ごとにバラバラ → 光源が崩壊
A
B
C
✓ 全要素が同じ光源(真上やや手前)を共有

primaryDesigning Beautiful Shadows in CSS — Josh W. Comeau

05 — 冗長な手がかりは重ねない

分離のキューを重ねるのは冗長だ。背景色が違えば border はいらない(remove it)し、border と drop shadow の併用は過剰で濁る。「分けたい」一念で線・色差・影を全部盛りにすると、かえって安っぽくなる。手がかりは1つに絞り、余白は多すぎる状態から始めてOKになるまで減らす。

card
✗ 黒枠+濃い影の二重がけ → 冗長で濁る
card
✓ box-shadowの極薄枠+着色影だけ → 一発で締まる

primary7 Practical Tips for Cheating at Design — Refactoring UI

blogDesign Matters #11 — Borders & Shadows (datarocks)

06 — アクセント帯だけは「足し算してよい」

引き算の原則の例外。カード上端・アラート左側・ナビ項目に色付きの矩形(アクセント線)を1辺だけ足すと、グラフィックの才能なしに知覚品質を底上げできる。状態(info / warning / error)の即時伝達にも効く。色は制約されたパレットから選び、1要素につき1辺だけに留めるのがコツ。

新機能のお知らせ

のっぺりして印象に残らない

✗ アクセントなし → フラットで没個性
新機能のお知らせ

上端3pxの色帯で品質感が出る

✓ カード上端に3pxの色帯 → 才能不要で底上げ
注意黒枠で囲っただけ。何の警告か伝わらない
✗ ただの黒枠 → 状態が読めない
注意左4pxの黄色帯+淡い背景で警告が即伝わる
✓ アラート左に色帯 → warning状態が一目で伝わる

primary7 Practical Tips for Cheating at Design — Refactoring UI

実装スニペット

/* 静かな縫い目(divider)— Material Design準拠 1px / 12% */
.divider {
  height: 1px;
  background: rgba(0, 0, 0, 0.12); /* 明地: 黒12% */
  border: 0;
}
.divider--dark {
  background: rgba(255, 255, 255, 0.12); /* 暗地: 白12% */
}
.divider--inset {
  margin-inline: 16px; /* 関連項目をまとめる inset divider */
}
/* レイアウトを揺らさない1px枠 = box-shadow */
/* offset 0 0 / blur 0(クリスプ) / spread=線の太さ / color */
.card {
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.08); /* 外側 */
}
.input:focus {
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12); /* 内側 */
}
/* box-shadowはボックスモデル外に描かれるため、
   border幅変更で起きるレイアウトシフトを回避できる */
/* 品のある影 — 単一光源・多層・背景色相で着色 */
:root {
  /* 真っ黒を使わず背景の色相(例: 青系220deg)で着色 */
  --shadow-color: 220deg 40% 30%;
}
.elevated {
  box-shadow:
    0 0.5px 0.5px hsl(var(--shadow-color) / 0.10),
    0 1px 1px   hsl(var(--shadow-color) / 0.10),
    0 2px 2px   hsl(var(--shadow-color) / 0.10),
    0 4px 4px   hsl(var(--shadow-color) / 0.10),
    0 8px 8px   hsl(var(--shadow-color) / 0.10),
    0 16px 16px hsl(var(--shadow-color) / 0.10);
}
/* 足し算してよいアクセント帯 — カード上端 / アラート左 */
.card--accent {
  border-top: 3px solid hsl(221deg 83% 53%); /* カード上端の色帯 */
}
.alert--warning {
  border-left: 4px solid hsl(38deg 92% 50%); /* アラート左の色帯 */
  background: hsl(38deg 92% 95%);
}
/* 1要素につき1辺だけ。色は制約パレットから */

チェックリスト

  • 要素を分ける前に、まず余白(近接)→ 背景色差 → box-shadow → 線 の順を試したか
  • ページを開いて最初に目に入るのが「線」になっていないか(なっていたら過剰)
  • 線を使うなら 1px・不透明度12%(黒12% / 白12%)に抑え、グリッドに整列させたか
  • 影に `rgba(0,0,0,…)` の真っ黒を使っていないか(背景の色相で着色したか)
  • ページ上のすべての影が同じ光源(上方やや手前・垂直=水平の約2倍)を共有しているか
  • border + 背景色差、border + drop shadow のような分離キューの二重がけはないか
  • アクセント帯は1要素につき1辺だけ・制約パレットから選んだ色か
  • 色付き影・半透明線・box-shadow枠を、実機・実背景・印刷/スクショ環境で確認したか

限界 / 出典

注意:数値の信頼度には差がある。Material Design の「1px・12%」は M1(旧版)の仕様で、最新の Material 3 では outline 系トークンに名称・値が変わっている(ただし「薄く・低コントラスト」という原則は不変)。Josh Comeau の多層パターンや「垂直=水平の2倍」は実用ヒューリスティックでありハードな規格ではなく、要素サイズ・標高に応じた調整が前提だ。「余白で理解度+20%」(GeeksforGeeks)は一次研究の出典が不明確で、方向性の裏付け程度に扱うべき(confidence low)。バナーなど面積が極端に狭い媒体では余白優先の原則が成立しにくく、アクセント帯や背景色差での分離が現実解になる。色付き影・半透明線は背景や実機 DPI で見え方が変わるため最終判断は実機スクショで、box-shadow枠は印刷・一部キャプチャ環境で再現されない点にも注意。可読性が要る区切りのコントラスト比は影・薄線では満たせないため、別途コントラストを確保すること。

primary7 Practical Tips for Cheating at Design — Refactoring UI

primaryDesigning Beautiful Shadows in CSS — Josh W. Comeau

primaryDividers — Material Design

blogVisual Dividers in User Interfaces — Tubik Studio

blogDesign Matters #11 — Borders & Shadows (datarocks)

blogWrap your elements with box-shadow instead of border — Bekk Christmas

blogNotes on Refactoring UI — Joel Sleppy

blogVisual Dividers in UI Design — GeeksforGeeks