::column

Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。

::columnCSS擬似要素で、 CSS 段組みレイアウトによってコンテナーのコンテンツを複数の段で表示するように設定した場合に生成される、個々の段を表します。 ::column 擬似要素を使用すると、レイアウトに影響を与えないスタイルを、これらの生成された断片に適用することができます。

構文

css
::column {
  /* ... */
}

解説

CSS の段組みレイアウトを使用してコンテナーのコンテンツを複数の段にレイアウトした場合(例えば、 column-count プロパティを使用した場合)、それぞれの段を含む ::column 擬似要素が生成されます。

::column 擬似要素は、スクロールコンテナー内の要素に適用されるスクロールスナッププロパティ(scroll-margin, scroll-snap-align, and scroll-snap-stop など)のみを受け付けます。

::column 擬似要素は、 ::scroll-marker 擬似要素を持つことができます。 ::before::after などのその他の擬似要素は、 ::column では生成されません。 ::column::scroll-marker を適用すると、元のスクロールコンテナーのすべての段にマーカーが作成され、 ::scroll-marker 擬似要素は、 ::column 擬似要素そのものではなく、 ::column 擬似要素の元の要素から継承されます。

これは CSS カルーセルで役立ちます。 ::column を使用して、それぞれの段の ::scroll-marker 擬似要素を生成し、CSS スクロールスナップを使用してそれらをスナップターゲットとして設定することができます。

::column に適用できるスタイル設定はとても制限されていますが、将来は拡大される可能性があります。将来対応されるプロパティおよび値は、レイアウトに影響を与えないものに限定されます。

段組みレイアウトのスクロール

このデモでは、コンテンツのそれぞれの「ページ」を所定の位置にスナップする、レスポンシブなコンテナーを作成します。 columns プロパティと ::columns 擬似要素を使用して、親スクロールコンテナーの全幅にまたがるコンテンツの段を作成します。この列は水平方向にスクロールできます。それぞれの段には 1 つ以上のリスト項目が含まれ、その数はビューポートの幅によって異なります。

HTML

HTML は、順序なしリストで構成されており、それぞれのリストアイテムにはサンプルコンテンツが含まれています。

html
<ul>
...
  <li>
    <h2>アイテム 1</h2>
  </li>
...
</ul>

CSS

リストは、 height が固定されており、ビューポートの全幅に広がるように width100vw に指定されています。次に、コンテンツが水平方向にスクロールするように overflow-x 値に scroll を設定し、 CSS スクロールスナップを使用してそれぞれのアイテム、すなわち「ページ」へスナップするようにします。 scroll-snap-typex mandatory を使用して、リストをスクロールスナップコンテナーにします。最後に、 columns の値を 1 に設定して、リストのコンテンツを単一の列として表示するように強制します。また、 text-align の値に center を適用して、コンテンツをリストの中央に配置します。

css

次に、リストアイテムのスタイルを設定します。

  • display の値を inline-block に設定して、リストアイテムが横に並んだ状態で、リストが水平方向にスクロールするようにします。
  • widthheight に固定値を設定します。
  • text-align の値を left を設定して、親コンテナーに設定されている text-align: center を上書きし、アイテムのコンテンツを左揃えにします。
  • 偶数のリストアイテムには、 :nth-child() によって異なる背景色を指定し、スクロール効果がわかりやすくします。
css

scroll-snap-align プロパティを、 columns プロパティによって生成されるコンテンツの段を表す ::column 擬似要素に設定します。これにより、スクロールすると、段はスクロールコンテナーの中央にスナップされます。

css

結果

スクロールマーカー付き段ベースのカルーセル

前の例を拡張して、様々な段へ直接移動できるようにスクロールマーカーを作成します。 scroll-marker-group をコンテナーに、 ::scroll-marker をそれぞれの ::column 擬似要素に適用します。 HTML は変更しません。

CSS

scroll-marker-group プロパティを使用してスクロールマーカーグループを作成し、そのグループをすべてのコンテンツの後に配置します。

css

次に、 ::scroll-marker-group 擬似要素にスタイルを適用して、各スクロールマーカーを 0.4em の間隔を入れて行の中央にレイアウトします。

css

最後に、 ::scroll-marker 擬似要素を使用して、黒い境界線のある丸い透明なマーカーを各リストアイテムに作成し、 :target-current 擬似クラスを使用して、現在スクロールされている要素のマーカーを他の要素とは異なるスタイルに設定します。

css

結果

スクロールマーカーを押して、各ページに直接移動してみてください。現在のマーカーが強調表示されていることに注意してください。これにより、ページ内の現在の位置を確認することができます。また、スクロールマーカーグループまでタブキーを押してから、カーソルキーを使用して各ページを順番に表示してみてください。

他のカルーセルの例は、 CSS カルーセルの作成を参照してください。

仕様書

Specification
CSS Multi-column Layout Module Level 2
# column-pseudo

ブラウザーの互換性

関連情報