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

レイアウト Easy #sidebar #sticky #layout #2col #blog

このスティッキーサイドバーは、本文をスクロールしてもサイドバーが画面内に追従して止まる2カラムレイアウトです。 display:grid で本文とサイドバーを左右に分け、サイドバーに position:sticky と top を指定するだけで、JavaScript なしに固定追従を実現します。

▶ プレビュー

解説

このスティッキーサイドバーは、本文をスクロールしてもサイドバーが画面内に追従して止まる2カラムレイアウトです。display:grid で本文とサイドバーを左右に分け、サイドバーに position:stickytop を指定するだけで、JavaScript なしに固定追従を実現します。本文側には min-width:0 を入れて、長い文章や画像でレイアウトが崩れるのを防いでいます。広い画面では2カラム、狭い画面では1カラムに切り替えるのがセオリーです。

使う場面

  • ブログ記事の横に目次や関連リンクを常時表示
  • 商品ページで購入ボタンや価格を追従させる
  • ドキュメントサイトのナビゲーション固定

カラムの幅は grid-template-columns の数値(例:1fr 220px)で調整します。固定位置は top の値で決まり、固定ヘッダーがある場合はその高さ分だけ余白を取ります。注意点として、position:sticky は親要素に overflow:hidden があると効かなくなることがあります。また追従できる範囲は親要素の高さまでなので、サイドバーが本文より長いと途中で止まります。スマホでは縦積みにして固定を外すのが読みやすくなります。

使用例・適したシーン

  • 商品一覧表示
  • ブログ記事カード一覧
  • メンバー一覧

よくある質問

サイドバーが固定されず一緒にスクロールしてしまいます。
position:stickyは親要素にoverflow:hiddenやoverflow:autoが付いていると効かなくなります。また高さの基準となる親要素が必要です。トップからの固定位置はtopの値で指定するので、topが設定されているかも確認してください。
スマホでは縦に並べたいのですが可能ですか?
可能です。メディアクエリでgrid-template-columnsを1列に変え、サイドバーのposition:stickyを解除すれば縦積みになります。狭い画面では追従させないほうが本文を読みやすく、推奨される作り方です。
追加日:2026-05-23
← すべてのスニペットへ戻る