本文へスキップ

縮小ヘッダー

スクロールするとヘッダーが縮み、背景と影が付く。上部に戻ると元のサイズに戻る。

ENGLISH

Shrinking Sticky Header

  • JS
約101行基本のUI部品 / ナビ・リスト操作 の一覧 →

プレビュー

スクロール

操作枠内をスクロールすると動きます。

仕様書

向く場面
  • スクロールで本文を広く見せたいLP・記事
  • 上部で存在感、読み進めると控えめにしたいヘッダー
  • ロゴとナビが少ないサイト
避ける場面
  • ナビ項目が多く縮めると折り返す
  • 高さ変化で本文がガタつく固定レイアウト
  • ヘッダーが常に同じ見た目であるべき業務画面
構成要素
  • ヘッダー
  • ロゴ
  • ナビリンク
  • 本文セクション
持っている状態
  • 通常
  • 押下中
キーボード

Tab でナビリンクへ・Enter で選択(a 標準)。縮小はスクロール位置に追従するだけ

支援技術

header 内の nav リンクとして読み上げ順は不変。縮小は装飾で情報は変わらない。reduced-motion で transition を切り即時に縮む。リンクに focus-visible の輪郭

動き

背景・影・余白・文字サイズを 0.3s ease で縮め、スクロール開始を伝える。上端で元に戻る。reduced-motion では即時

デザインの要点

  • 縮めるのは余白・文字サイズ・背景の3つだけ。高さを大きく変えると本文が数十px ガタつき、縮小より揺れが目立つ
  • しきい値は 40px と浅くし、上端に戻ったら必ず元に戻す。往復で見た目が同じ地点で切り替わると「動いた理由」が分かる
  • 透明→塗りの背景に影を添える。本文に重なり始めた瞬間に、ヘッダーが手前にあることを立体で示す
  • scroll は passive で受ける。preventDefault の有無を毎回確認させると、スクロールそのものが引っかかる

コード(コピーして使えます)

<header class="sh-header">
  <div class="sh-inner">
    <span class="sh-logo">MyBrand</span>
    <nav class="sh-nav">
      <a href="#">ホーム</a>
      <a href="#">サービス</a>
    </nav>
  </div>
</header>
<div class="sh-body">
  <div class="sh-section sh-section--top">
    <p>↓ スクロールするとヘッダーが縮みます</p>
  </div>
  <div class="sh-section">
    <p>スクロール中…</p>
  </div>
  <div class="sh-section">
    <p>さらに下へ</p>
  </div>
  <div class="sh-section">
    <p>↑ 上に戻るとヘッダーが広がります</p>
  </div>
</div>

タグ

同じカテゴリ「ナビ・リスト操作」のほかのパーツ

関連パーツ