【保存版】CSSでマルチカラムレイアウトをマスター!スパンニングや代替方法も解説


このような場合、column-span プロパティを使用して、要素を複数の列にスパンさせることができます。これは、バランスカラムを超えて要素を拡張し、レイアウトを崩さずにコンテンツを表示するのに役立ちます。

column-span の使用方法

column-span プロパティは、スパンさせたい要素に適用します。値として、要素がスパンする列数を指定します。例えば、要素を2つの列にスパンさせたい場合は、次のようにします。

.element {
  column-span: 2;
}

注意点

  • column-span を使用すると、列のバランスが崩れる可能性があります。多くの要素をスパンさせる場合は、レイアウトを慎重に検討する必要があります。
  • 要素がスパンする列に十分なスペースがない場合、要素は次の行に折り返されます。
  • column-span は、display: inline-block または display: table-cell に設定された要素にのみ適用できます。

代替手段

column-span の代わりに、以下の方法を使用することもできます。

  • グリッド レイアウトまたはフレックスボックスを使用して、より柔軟なレイアウトを作成します。
  • 絶対配置を使用して、要素を正確な位置に配置します。
  • float プロパティを使用して、要素を列から浮かせます。

以下の例では、column-span プロパティを使用して、画像を2つの列にスパンさせています。

<div class="container">
  <div class="image">
    <img src="image.jpg" alt="Image description">
  </div>
  <div class="content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et quam eget magna tincidunt ullamcorper sit amet non enim. Nullam ac quam eget orci semper ullamcorper sit amet non mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus sit amet ligula vitae metus hendrerit semper. Sed ac diam nec odio vehicula congue sed eget ligula. Donec nec justo eget diam laoreet consectetur sit amet eget quam.</p>
  </div>
</div>
.container {
  display: inline-block;
  width: 500px;
  column-count: 2;
}

.image {
  column-span: 2;
  text-align: center;
}

.image img {
  width: 100%;
  height: auto;
}

.content {
  padding: 10px;
}


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CSS Multi-column Layout with Spanning</title>
  <style>
    .container {
      display: inline-block;
      width: 500px;
      column-count: 2;
    }

    .image {
      column-span: 2;
      text-align: center;
      margin-bottom: 20px;
    }

    .image img {
      width: 100%;
      height: auto;
    }

    .heading {
      column-span: 1;
      text-align: center;
      font-size: 24px;
      margin-bottom: 10px;
    }

    .content {
      padding: 10px;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="image">
      <img src="image.jpg" alt="Image description">
    </div>
    <div class="heading">This is a heading</div>
    <div class="content">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et quam eget magna tincidunt ullamcorper sit amet non enim. Nullam ac quam eget orci semper ullamcorper sit amet non mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus sit amet ligula vitae metus hendrerit semper. Sed ac diam nec odio vehicula congue sed eget ligula. Donec nec justo eget diam laoreet consectetur sit amet eget quam.</p>
    </div>
  </div>
</body>
</html>

このコードを実行すると、以下のようになります。

説明

  • .content クラスは、本文コンテンツを定義します。padding プロパティは、要素内のコンテンツの周囲に余白を設定します。
  • .heading クラスは、見出し要素を定義します。column-span プロパティは、要素がスパンする列数を設定します。この例では、1なので、見出しが1つの列全体を占有します。
  • .image クラスは、画像要素を定義します。column-span プロパティは、要素がスパンする列数を設定します。この例では、2なので、画像が両方の列を占有します。
  • .container クラスは、マルチカラムコンテナを定義します。width プロパティは、コンテナの幅をピクセル単位で設定します。column-count プロパティは、コンテナ内の列数を設定します。この例では、2つの列があります。

この例はほんの一例です。column-span プロパティを使用して、さまざまなレイアウトを作成できます。

  • 列の幅を個別に設定するには、column-width プロパティを使用します。
  • 要素を列の先頭または末尾に揃えるには、align-self プロパティを使用します。
  • 列の1つに余白を追加するには、column-gap プロパティを使用します。


  • column-span を使用すると、列のバランスが崩れる可能性があります。多くの要素をスパンさせる場合は、レイアウトを慎重に検討する必要があります。
  • 要素がスパンする列に十分なスペースがない場合、要素は次の行に折り返されます。

これらの制限を回避するために、column-span の代替方法をいくつか紹介します。

float プロパティ

float プロパティを使用して、要素を列から浮かせ、他のコンテンツの横に配置することができます。

<div class="container">
  <div class="image">
    <img src="image.jpg" alt="Image description">
  </div>
  <div class="content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et quam eget magna tincidunt ullamcorper sit amet non enim. Nullam ac quam eget orci semper ullamcorper sit amet non mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus sit amet ligula vitae metus hendrerit semper. Sed ac diam nec odio vehicula congue sed eget ligula. Donec nec justo eget diam laoreet consectetur sit amet eget quam.</p>
  </div>
</div>
.container {
  width: 500px;
}

.image {
  float: left;
  width: 50%;
  margin-bottom: 20px;
}

.content {
  margin-left: 50%;
  padding: 10px;
}

この例では、画像が左側、テキストコンテンツが右側になります。

絶対配置

絶対配置を使用して、要素を正確な位置に配置することができます。

<div class="container">
  <div class="image">
    <img src="image.jpg" alt="Image description">
  </div>
  <div class="content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et quam eget magna tincidunt ullamcorper sit amet non enim. Nullam ac quam eget orci semper ullamcorper sit amet non mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus sit amet ligula vitae metus hendrerit semper. Sed ac diam nec odio vehicula congue sed eget ligula. Donec nec justo eget diam laoreet consectetur sit amet eget quam.</p>
  </div>
</div>
.container {
  position: relative;
  width: 500px;
}

.image {
  position: absolute;
  top: 0;
  left: 0;
  width: 50%;
  height: auto;
}

.content {
  position: absolute;
  top: 0;
  left: 50%;
  width: 50%;
  padding: 10px;
}

グリッド レイアウト

グリッド レイアウトは、より柔軟なレイアウトを作成するための強力なツールです。

<div class="container">
  <div class="image">
    <img src="image.jpg" alt="Image description">
  </div>
  <div class="content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et quam eget magna tincidunt ullamcorper sit amet non enim. Nullam ac quam eget orci semper ullamcorper sit amet non mauris. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus sit amet ligula vitae metus hendrerit semper. Sed ac diam nec odio vehicula congue sed eget ligula. Donec nec justo eget diam laoreet consectetur sit amet eget quam.</p>
  </div>
</div>
.container {
  display: grid;
  grid-template-columns: 1fr 2fr;
}

.image {
  grid-column: 1 / 3;
  grid-