[初心者シリーズ]CSSだけで作る左右分割スクロール固定レイアウト

CSS、JavaScript
2,856 文字 約 8 分で読めます

ウェブページでよく見かける「左側は固定され、右側の文章や写真がスクロールする」レイアウトは、CSSだけで簡単に実現可能です。

この記事では、初心者向けに左右分割レイアウトの作り方を解説し、スマホ対応カスタムも紹介します。コードを見ながら手軽に試せるサンプルです。

サンプル

See the Pen 111102 by kasasagi_kmnmc (@kasasagi_kmnmc) on CodePen.

HTML構造

以下のHTMLでは、左側のコンテンツは left-pin クラス、右側のスクロールする文章や写真は right-content クラスで管理しています。スクロール確認用に高さを確保する spacer セクションも挿入しています。

左側はPC表示ではスクロールに追従して固定され、右側は自由にスクロールします。スマホでは上下並びになり、左側の固定は解除されます。

<section class="spacer">スクロールしてください</section>

<section class="split-section">
  <div class="left-pin">
    <h2>左側に固定される見出し</h2>
    <p>スクロール中もここは固定されます</p>
  </div>

  <div class="right-content">
    <p>これは右側のダミー文章です。スクロールに合わせて文章が流れます。</p>
    <p>さらに文章が続きます。ここに写真も配置可能です。</p>
    <img src="https://images.unsplash.com/photo-1501785888041-af3ef285b470?q=80&w=800&auto=format&fit=crop" alt="風景写真1">
    <p>もっと文章を追加してスクロールを確認します。</p>
    <img src="https://images.unsplash.com/photo-1493558103817-58b2924bce98?q=80&w=800&auto=format&fit=crop" alt="風景写真2">
  </div>
</section>

<section class="spacer">さらにスクロール</section>

CSS

PC表示では、左側のコンテンツを position: sticky を使って固定します。右側の文章や写真は自由にスクロールでき、左右の高さを揃える必要はありません。

body {
  margin: 0;
  font-family: sans-serif;
}

.spacer {
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #f0f0f0;
  font-size: 1.5rem;
}

.split-section {
  display: flex;
  gap: 2rem;
  padding: 2rem;
  background: #eaeaea;
  align-items: flex-start;
}

.left-pin {
  position: sticky; /* 左側をスクロール中に固定する */
  top: 50px;
  flex: 1;
  background: #4a90e2;
  color: #fff;
  padding: 1.5rem;
  border-radius: 8px;
}

.right-content {
  flex: 2;
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

.right-content img {
  width: 100%;
  max-width: 400px;
  border-radius: 8px;
}

スマホ用CSS

スマホ表示では、左右レイアウトを縦並びに変更し、左側の固定を解除します。右側の写真は幅100%、高さ自動でアスペクト比を保ちつつ中央に配置します。また大きくなりすぎないよう最大幅を設定しています。

@media (max-width: 768px) {
  .split-section {
    flex-direction: column; /* 左右→上下に変更 */
    align-items: stretch;
  }

  .left-pin {
    position: static; /* スマホでは固定を解除 */
    width: 100%;
    top: auto;
    box-sizing: border-box;
    padding: 1.5rem;
  }

  .right-content {
    width: 100%;
  }

  .right-content img {
    display: block;
    margin: 0 auto; /* 画像を中央に配置 */
    width: 100%;
    height: auto;
    max-width: 500px; /* 大きくなりすぎないように制限 */
    border-radius: 8px;
  }
}

まとめ

このレイアウトでは、PC表示では左側の見出しがスクロールに追従して固定され、右側の文章や写真が自由にスクロールします。スマホ表示では、左右のレイアウトを縦並びに変更し、左側の固定は解除、右側の写真は中央に配置されます。

この方法により、文章や写真を追加しても左固定は正しく追従し、レイアウトが崩れることはありません。CSSだけで実現できるので、ポートフォリオページや商品説明ページなど、スクロールに合わせた情報表示に簡単に応用できます。

タイトルとURLをコピーしました