CSS プロパティ columns

CSS columns プロパティ詳解:複数列レイアウトを簡単に実現

CSS columns プロパティ詳解:複数列レイアウトを簡単に実現

CSSの`columns`プロパティを使用すると、要素の内容を新聞や雑誌のように複数列にレイアウトすることができます。従来のfloatや複数のdiv要素を使った方法と比べて、よりシンプルかつ効率的に複数列レイアウトを実現できます。

1. CSS columns プロパティとは?

`columns`プロパティは、要素の内容を複数列に分割して表示するためのプロパティです。従来の複数列レイアウト手法と比較して、以下の利点があります。

  • コードの記述がシンプルになる
  • レスポンシブデザインに柔軟に対応できる
  • ブラウザ間の互換性が高い

2. columns プロパティの構文

`columns`プロパティは、以下の2つの値を指定することができます。

  • column-width: 列の幅を指定します。ブラウザは、利用可能なスペースに応じて実際の幅を調整します。
  • column-count: 列の数を指定します。ブラウザは、利用可能なスペースと列幅に応じて、各列の幅を自動的に調整します。

`columns`プロパティは、以下のいずれかの形式で指定することができます。

  • columns: ; (簡略記法)
  • columns: ; (列数のみ指定)
  • columns: ; (列幅のみ指定)

コード例


<style>
.container {
  columns: 200px 3; /* 列幅200px、列数3 */
}

.container2 {
  column-width: 150px; 
  column-count: 4; /* 列幅150px、列数4 */
}
</style>

<div class="container">
  <p>テキストコンテンツ...</p>
</div>

<div class="container2">
  <p>テキストコンテンツ...</p>
</div>

3. 列間隔と罫線の設定

`column-gap`プロパティと`column-rule`プロパティを使って、列の間隔と罫線を設定することができます。

  • column-gap: 列と列の間隔を設定します。固定値または相対値で指定することができます。
  • column-rule: 列と列の間に罫線を設定します。column-rule-style, column-rule-width, column-rule-colorを使って、罫線のスタイル、幅、色をそれぞれ指定することができます。

コード例


<style>
.container {
  columns: 200px 3;
  column-gap: 20px; /* 列間隔を20pxに設定 */
  column-rule: 1px solid red; /* 1pxの赤い実線を罫線に設定 */
}
</style>

<div class="container">
  <p>テキストコンテンツ...</p>
</div>

4. 列の横断と改行の制御

`column-span`プロパティ, `break-inside`, `break-before`, `break-after`プロパティを使って、列の横断と改行を制御することができます。

  • column-span: 要素が複数の列にまたがるかどうかを設定します。見出しや画像など、強調表示したいコンテンツに適しています。
  • break-inside, break-before, break-after: 複数列レイアウトにおける改ページや改段落の動作を制御し、コンテンツが不自然に途切れることを防ぎます。

コード例


<style>
.container {
  columns: 200px 3;
}

h2 {
  column-span: all; /* 見出しを全列に渡って表示 */
}

img {
  break-inside: avoid; /* 画像が列の途中で切れないようにする */
}
</style>

<div class="container">
  <h2>見出し</h2>
  <p>テキストコンテンツ...</p>
  <img src="image.jpg" alt="画像">
</div>

5. ブラウザの互換性とPolyfill

`columns`プロパティは、主要なブラウザで広くサポートされています。ただし、古いバージョンのブラウザでは、ベンダープレフィックス(例:-webkit-columns)が必要になる場合があります。また、古いブラウザでも確実に動作させるためには、Polyfillを使用することをおすすめします。

代表的なPolyfillライブラリは以下のとおりです。

6. columns プロパティの応用

`columns`プロパティは、以下のような場面で活用することができます。

  • レスポンシブな複数列レイアウトの作成
  • 記事のレイアウト
  • 画像ギャラリー
  • 商品リスト

コード例:レスポンシブな画像ギャラリー


<style>
.gallery {
  columns: 150px; /* デフォルトでは列幅150px */
  column-gap: 10px;
}

/* 画面サイズが768px以上の場合は、列数を増やす */
@media screen and (min-width: 768px) {
  .gallery {
    columns: 150px 2;
  }
}

/* 画面サイズが1024px以上の場合は、さらに列数を増やす */
@media screen and (min-width: 1024px) {
  .gallery {
    columns: 150px 3;
  }
}
</style>

<div class="gallery">
  <img src="image1.jpg" alt="画像1">
  <img src="image2.jpg" alt="画像2">
  <img src="image3.jpg" alt="画像3">
  <img src="image4.jpg" alt="画像4">
  <img src="image5.jpg" alt="画像5">
  <img src="image6.jpg" alt="画像6">
</div>

まとめ

CSSの`columns`プロパティは、複数列レイアウトをシンプルかつ柔軟に実現するための強力なツールです。本稿で紹介した内容を参考に、ぜひ`columns`プロパティを活用して、より見やすく、魅力的なWebページを作成してみてください。

CSS columns プロパティに関するQ&A

Q1: `columns`プロパティとfloatを使ったレイアウトの違いは何ですか?

A1: `columns`プロパティは、要素の内容を自動的に複数列に分割して表示します。一方、floatは、要素を左または右に流し込み、周囲のコンテンツを回り込ませます。 `columns`プロパティは、floatよりもシンプルに複数列レイアウトを実現できる上、レスポンシブデザインにも柔軟に対応できます。

Q2: `columns`プロパティは、すべてのブラウザでサポートされていますか?

A2: `columns`プロパティは、主要なブラウザで広くサポートされています。ただし、古いバージョンのブラウザでは、ベンダープレフィックスが必要になる場合があります。また、古いブラウザでも確実に動作させるためには、Polyfillを使用することをおすすめします。

Q3: `columns`プロパティを使って、新聞のような3段組みレイアウトを作成するにはどうすればよいですか?

A3: `columns`プロパティで列数を3に設定することで、簡単に3段組みレイアウトを作成できます。列幅は自動調整されるため、指定する必要はありません。


<style>
.container {
  columns: 3;
}
</style>

<div class="container">
  <p>記事コンテンツ...</p>
</div>