スティッキーサイドバーレイアウト

レイアウト Easy #sidebar #sticky #grid #layout

スクロールしても左のナビゲーションがついてくる、2カラムのレイアウトです。土台は CSS Grid で、 grid-template-columns:200px 1fr によりサイドバーを固定幅、本文を可変幅にしています。

▶ プレビュー

解説

スクロールしても左のナビゲーションがついてくる、2カラムのレイアウトです。土台は CSS Grid で、grid-template-columns:200px 1fr によりサイドバーを固定幅、本文を可変幅にしています。追従の主役は position:stickytop:20px で、JavaScript を一切使わずに「親要素の範囲内でスクロールに合わせて貼り付く」挙動を実現しているのが特徴です。align-items:start を入れているのも重要で、これがないとサイドバーが本文の高さに引き伸ばされて sticky が効きにくくなります。

使う場面

  • ドキュメントやヘルプページの目次を常に見える位置に置きたいとき
  • 料金表やプラン選択で、長い説明を読みながら操作パネルを残したいとき
  • 記事の目次ナビをスクロールに追従させたいとき

幅は grid-template-columns の数値を変えるだけで調整できます。スマホでは横並びが窮屈になるため、grid-template-columns:1fr に切り替えて縦積みにする対応がおすすめです。top の値はヘッダーの高さに合わせると、固定ヘッダーと重ならず収まります。

使用例・適したシーン

  • 記事ページの目次
  • ドキュメントサイトのナビ
  • ダッシュボードのメニュー

よくある質問

サイドバーが追従しないのですが?
多くの場合、親要素にalign-items:stretchが効いてサイドバーが本文の高さまで伸び、貼り付く余地が無くなっています。このサンプルのようにalign-items:startを指定し、親やbodyにoverflow:hiddenが掛かっていないか確認してください。
スマホ表示はどうすればいい?
メディアクエリで画面が狭いときにgrid-template-columnsを1frにして縦並びにするのが定番です。サイドバーを上に置くか、ハンバーガーメニューに格納すると窮屈さを避けられます。
追加日:2026-05-20
← すべてのスニペットへ戻る