結論

ナビの散らかりは「項目を7個に削る」では直らない。プロは関連リンクを使用頻度順の意味あるカテゴリにチャンク化し、2層を超えたら素のドロップダウンを捨ててメガメニュー(左上に最重要・各選択肢は1回だけ)かルーティングページへ逃がす。仕上げにstickyヘッダーを約50pxへ縮め、剥がれた時だけ薄い影を出し、ホバーは0.5秒静止判定で誤発火を止める——これが「整っている」の正体だ。

01 — 項目数の上限ではなくチャンク化で整理する

「ナビは7項目まで」はMillerの7±2の誤用だ。メニューは選択肢が画面に見え続ける「認識(recognition)」タスクであって、暗記する「記憶(recall)」タスクではない。だから作業記憶の上限(Cowan 2001で約4)は当てはまらない。正解は項目を削ることではなく、12リンクを4カテゴリに束ねるようなチャンク化だ。トップは5〜7リンクが現実的な観測値だが、整理さえできていれば横7+縦17カテゴリの複雑サイトも成立する。

✗ 12項目を一列に並べただけ → どれを見ればいいか分からない
✓ 12リンクを4カテゴリへチャンク化 → 探す前に当たりがつく

blogYour menu doesn't need Miller's 7±2 rule — Stéphanie WalterblogHow can Miller's law make UX better? — LogRocket

02 — カテゴリ数は固定せず、使用頻度で並べる

カテゴリをいくつ作るかは「7」のような固定数ではなく、discoverability(見つけやすさ)で決める。グループ化も並び順も基準は使用頻度——最も多くの人が探すものを最短で出せる順に置く。五十音順/アルファベット順が効くのは20項目を超えるリストだけで、10未満では効果が薄いので頻度順のまま。メガメニューでは最重要グループを左上に置き、ラベルは情報量の多い語を先頭にする。

✗ 10未満を五十音順 → よく押す「料金」が最後に埋もれる
✓ 使用頻度順 → 「料金」が左上の最短位置に来る

primaryTop 3 IA Questions about Navigation Menus — NN/g

03 — 2層を超えたらドロップダウンを捨てる

素のドロップダウンが有効なのは1層まで。2層で使いにくくなり、2層を超えると NN/g いわく highly inadvisable(強く非推奨)だ。深い入れ子はカーソルが端で外れて消え、操作が当てづらく、安っぽく壊れて見える。多階層は2〜3層を適切に扱えるメガメニューかルーティングページへ逃がす。ポイントは volume(量)そのものではなく、未整理の volume が致命的だということ。

✗ 素のドロップダウンを4層ネスト → 端で消える・当てられない
✓ メガメニューで2次元に並べる → 全部見えて1クリックで届く

primaryMenu-Design Checklist: 17 UX Guidelines — NN/gprimaryMega Menus Work Well for Site Navigation — NN/g

04 — メガメニューは「グループ化+左上に最重要」で整える

volume は問題ない。未整理の volume が致命的だ。見出しもカラムもないリンクの羅列は、二次元パネルの「見て選ぶ」利点を殺し、ただ散らかって見える。プロは関連セットにグループ化し、中粒度・各選択肢は1回だけ表示する。最重要グループは order:-1 で左上へ。max-width で画面全体を覆わないようにし、日本語LPなら font-feature-settings:"palt" をルートに付けて約物を詰める。

✗ 見出しなしで大量リンクを流し込む → 二次元の利点が死ぬ
✓ 見出しでグループ化+最重要を左上 → 視線が迷わない

primaryMega Menus Work Well for Site Navigation — NN/gsecondaryEfficiently Simplifying Navigation, Part 1: IA — Smashing

05 — ホバーメニューは0.5秒ディレイで誤発火を防ぐ

ディレイ0で即展開すると、マウスが横切っただけでメニューが暴発し、画面がチカチカして雑な印象になる。NN/g の処方は明確だ——ポインタが0.5秒静止してから表示(表示自体はその後0.1秒以内)、ナビ項目とドロップダウンの両方からポインタが離れて0.5秒後に非表示。CSS だけなら transition-delayvisibility の遅延解除で hover-intent を再現できる。下のデモは実際にホバーで挙動が変わる。

✗ ディレイ0 → カーソルが触れた瞬間に暴発する
✓ 0.5秒静止で表示・離脱0.5秒後に隠す → 通過では開かない

primaryMega Menus Work Well for Site Navigation — NN/g

06 — stickyヘッダーは約50pxに縮め、剥がれた時だけ影を出す

スクロール最上部から濃い影が出て分厚いヘッダーが居座ると、剥がれ感が出ず本文を圧迫する。プロの基準は約50px。影は常時ではなく、IntersectionObserver の番兵(sentinel)がヘッダーの剥がれ(stuck)を検知した時だけ薄く出す。下スクロールで隠し上スクロールで再表示する場合は 300〜400ms のスライドインで、項目は最大5。Chrome 133+ なら container-type:scroll-state で JS なしも可能だが、本番は IntersectionObserver フォールバック必須だ。

✗ 72px+常時の濃い影 → 重く本文を圧迫する
✓ 約50px+剥がれた時だけ薄い影 → 軽く本文が広い

secondaryDesigning Sticky Menus — Smashing MagazineblogSticky Header Shadow on Scroll — Ryan Mulligan

07 — モバイルは重要3〜5項目を見せ、残りを隠す

ハンバーガーは発見性が低い。主要導線(CVボタンや「料金」)まで全部隠すと、見えない=押されない機会損失になる。高パフォーマンスなのは重要な3〜5項目を可視のまま見せ、副次リンクだけハンバーガーに隠すハイブリッド方式だ。ブレークポイントは 1080px 単点で切り替える。

✗ 主要導線まで全部ハンバーガーへ → CV導線が見えない
✓ 重要3項目は可視+残りは≡ → CV導線が常に見える

primaryMobile Subnavigation — NN/g

実装スニペット

stuck 状態を JS なしで検知して縮小・影付けする(Chrome 133+、要フォールバック)。

/* stuck状態をJSなしで検知 (Chrome 133+) */
.site-header {
  position: sticky;
  top: 0;
  height: 120px;
  container-type: scroll-state;
  transition: height .3s ease, box-shadow .3s ease;
}
@container scroll-state(stuck: top) {
  .site-header {
    height: 70px; /* 縮小 */
    box-shadow: 0 2px 8px rgba(0,0,0,.12); /* 剥がれた時だけ影 */
  }
}
.site-header__inner {
  display: flex;
  align-items: center;
  height: 100%;
}

全ブラウザ対応の堅実版。番兵が画面外に出た=剥がれた、で影をトグルする(高さ50px=NN/g推奨)。

.header-sentinel { position: absolute; top: 0; height: 1px; width: 1px; }
.site-header {
  position: sticky; top: 0; height: 50px;
  transition: box-shadow .3s ease;
}
.site-header.is-stuck {
  box-shadow: 0 2px 8px rgba(0,0,0,.12);
}
/* JS: 番兵を監視して is-stuck をトグル
   new IntersectionObserver(([e]) =>
     header.classList.toggle('is-stuck', !e.isIntersecting),
   { threshold: [0] }).observe(sentinel); */

ホバーメニューの0.5sディレイ。transition-delay で表示を遅らせ、visibility の遅延解除で離脱後0.5秒で隠す。focus-within でキーボードも担保。

.has-dropdown { position: relative; }
.dropdown {
  position: absolute; top: 100%; left: 0;
  opacity: 0; visibility: hidden;
  transition: opacity .1s ease, visibility 0s linear .5s; /* 離脱後0.5sで隠す */
}
.has-dropdown:hover .dropdown,
.has-dropdown:focus-within .dropdown {
  opacity: 1; visibility: visible;
  transition-delay: .5s, .5s; /* 0.5s静止してから表示 */
}

メガメニューのグループ化グリッド。order:-1 で最重要を左上へ、max-width で画面占有を防ぎ、palt で日本語の約物を詰める。

.mega-menu {
  display: grid;
  grid-template-columns: repeat(4, minmax(140px, 1fr));
  gap: 24px 32px;
  padding: 24px;
  max-width: 960px; /* 画面全体を覆わない */
  font-feature-settings: "palt"; /* 日本語の約物詰め */
}
.mega-menu__group:first-child { order: -1; } /* 最重要を左上へ */
.mega-menu__heading {
  font-size: 13px; font-weight: 700;
  color: #888; margin-bottom: 8px;
}
.mega-menu__link { display: block; padding: 6px 0; font-size: 14px; line-height: 1.5; }
@media (max-width: 1080px) { .mega-menu { display: none; } } /* モバイルはハンバーガーへ */

チェックリスト

  • トップが8項目を超えそうなら、削る前に関連リンクをグループ化できないか先に検討した
  • カテゴリの並び順を使用頻度で決め、最重要を左上/先頭に置いた(五十音順は20+項目のみ)
  • 2層を超える階層を素のドロップダウンで出していない(メガメニューかルーティングページへ逃がした)
  • メガメニューは見出しでグループ化し、各選択肢を1回だけ表示・max-widthで画面を覆わない
  • ホバー展開は0.5秒静止で表示・離脱0.5秒後に非表示し、focus-withinでキーボード対応した
  • stickyヘッダーは約50pxで、影は剥がれた(stuck)時だけ出している(常時の濃い影をやめた)
  • scroll-stateを使う場合、IntersectionObserverのフォールバックを併用した
  • モバイルは重要3〜5項目を可視に残し、副次リンクだけハンバーガーへ隠した(1080px単点)
  • サブメニューを出す/出さないを全トップ項目で統一した(一部だけの不整合をなくした)

限界 / 出典

項目数ルールの矛盾:「5〜8項目/Miller 7±2」を権威ルールとして語る流派と、これをメニューへの誤用として明確に棄却する流派(Stéphanie Walter・UX Myths・NN/g本体)がある。結論として「7項目キャップ」はハードルールではなくソフトな目安で、本質はチャンク化と頻度順整理。5〜7はあくまで観測される現実値であって規範ではない。Cowan 2001の約4も記憶チャンクの話で、可視メニューには直接適用しない。
Hick's Lawの注意:決定時間は RT = a + b·log2(N+1) と対数で増えるため、選択肢が増えるほど追加コストは逓減する。「削れば削るほど速くなる」という単純化は誤り。選択肢を絞る根拠として引く時は対数である点に注意する。
数値とブラウザの留保:stickyの約50px・300〜400ms・最大5などSmashing由来の値、NN/gのホバー0.5sは推奨ガイドラインで、デバイス/文脈により調整余地があり、A/Bテストでの検証が望ましい。`container-type:scroll-state` は2024〜2025の新機能でChromium系(133+)中心、SafariやFirefoxの対応を確認のうえIntersectionObserverフォールバック必須。card sortingでの実ユーザー検証は理想だが工数がかかるため、小規模LPでは頻度順の仮説で代替し後検証する前提で進める。

primaryTop 3 IA Questions about Navigation Menus — NN/g

primaryMega Menus Work Well for Site Navigation — NN/g

primaryMenu-Design Checklist: 17 UX Guidelines — NN/g

primaryMobile Subnavigation — NN/g

primaryDropdowns: Design Guidelines — NN/g

blogYour menu doesn't need Miller's 7±2 rule — Stéphanie Walter

secondaryMyth #23: Choices should always be limited to 7±2 — UX Myths

blogHow can Miller's law make UX better? — LogRocket

secondaryDesigning Sticky Menus — Smashing Magazine

secondaryShrinking Header Without JavaScript — CSS-Tricks

blogSticky Header Shadow on Scroll — Ryan Mulligan

secondaryEfficiently Simplifying Navigation, Part 1: IA — Smashing Magazine

blogThe menu structure of your website: best practices — Bright Digital

secondaryHick's Law — Laws of UX