1. はじめに
(この節は規範的ではありません。)
このモジュールはCSSにおける多段組みレイアウトについて説明します。 本書で記載されている機能を使うことで、 スタイルシートは要素の内容を複数の段にレイアウトするよう宣言できます。
CSSの他のレイアウト手法では、 親要素に適用すると、直接の子要素の表示プロパティが変更されます。 例えば、3カラムのグリッドレイアウトを作成した場合、 グリッドコンテナの直接の子要素はグリッドアイテムとなり、カラムのトラックに配置されます。 1セルにつき1要素が入り、必要に応じて追加の行も生成されます。
多段組みコンテナの子要素は、通常のフローのままですが、 そのフローが複数カラムに分割されて配置されます。 これらのカラムはインラインサイズが柔軟で、 利用可能なスペースによってカラムのサイズや表示カラム数が変化します。
多段組みレイアウトはCSSで簡単に記述できます。 以下はシンプルな例です:
カラム数もスタイルシートで明示的に指定できます:
ショートハンドのcolumnsプロパティを使えば、どちらか一方または両方を1つの宣言で指定できます。
body{ columns : 2 } body{ columns : 12 em } body{ columns : 2 12 em }
このモジュールで導入された別のプロパティ群は、 カラム間の間隔や罫線について記述します。
body{ column-gap : 1 em ; column-rule : thin solid black; }
上記の例の最初の宣言は、 隣接する2つのカラムの間の間隔を1emに設定します。 カラムの間隔はパディング領域に似ています。 間隔の中央には column-ruleプロパティで指定される罫線が描かれます。
column-ruleプロパティの値は、CSSのborderプロパティと同様です。 borderと同じく、column-ruleもショートハンドプロパティです。
body{ column-gap : 1 em ; column-rule-width : thin; column-rule-style : solid; column-rule-color : black; }
column-fillやcolumn-spanプロパティにより、 多段組みレイアウトでより多様なビジュアル表現が可能になります。
h2要素はすべてのカラムをまたぐように設定されています。
div{ column-fill : balance} h2{ column-span : all}
この仕様では、上記の例ですべて使用されている10個の新しいプロパティを導入しています。
すべてのカラムプロパティが初期値の場合、 要素のレイアウトは実質的に1カラムの多段組みレイアウトと同じになります。
1.1. 値の定義
本仕様では、CSSプロパティ定義規約([CSS21])に従い、値定義構文([CSS-VALUES-3])を用いています。 本仕様で定義されていない値型は CSS Values & Units [CSS-VALUES-3] で定義されています。 他のCSSモジュールとの組み合わせで値型の定義が拡張される場合もあります。
プロパティ定義に記載されている個別値に加え、 本仕様で定義されるすべてのプロパティは CSS全域キーワードも値として受け付けます。 可読性のため、ここでは繰り返し記載していません。
2. モジュール間の相互作用
この文書は従来の仕様にはなかった新機能を定義します。 また、最終的には以下を置き換え、廃止します:
3. 多段組みモデル
column-widthまたはcolumn-countプロパティがauto以外である要素は、多段組みコンテナ(略してmulticol container)となり、 多段組みレイアウトのコンテナとなります。
従来のCSSボックスモデルでは、 要素の内容は対応する要素の内容ボックス内にフローします。 多段組みレイアウトでは、 分断コンテキストが作られ、 そこに匿名の分断コンテナであるカラムボックス(略してカラム)が並びます。 これらのカラムボックスは 独立したブロック整形コンテキストを確立し、multi-columnコンテナの内容が流れ込みます。 また、カラムボックスは非positionedな子の包含ブロックとなります。
img{ display : block; width : 100 % ; }
カラムボックスが新しいブロック整形コンテキストを作るため、 widthはカラムボックスに対して計算されます。 よって画像がカラムボックスからはみ出すことはありません:
多段組みレイアウト内のfloat要素は、 floatが現れるカラムボックスを基準に配置されます。
img{ display : block; float : right; }
HTMLでは、この画像は "the leg of a chicken" で終わる文の後に登場します。
カラムボックスからブロック軸方向にはみ出した内容は分割され、次のカラムボックスへ続きます。
注: 匿名ボックスであるカラムボックスは、 包含ブロックにはなりません(絶対位置ボックスの)。 そのようなボックスの包含ブロックを確立するpositionプロパティは、 multicolコンテナに適用され、それがプリンシパルボックスとなります。
.container{ position : relative; column-count : 3 ; } img{ position : absolute; top : 20 px ; left : 40 px ; }
multi-column containerのアウトオブフローの子孫もカラムバランスや multi-column containerのブロックサイズに影響します。
カラムボックスの並び順はmulticol containerのインライン基準方向で決まり、multicol行に配置されます。 カラム幅はインライン方向の長さ、 カラム高さはブロック方向の長さです。 同一行の全カラムボックスは同じカラム幅・高さを持ちます。
注: 縦書きで組まれたテキストではブロック方向は水平方向となります。 縦書きの場合、カラムは水平方向に並び、ブロックの流れ方向は右から左や左から右にもなります。 column-widthプロパティはカラムのインラインサイズ(物理的な横幅ではない)を指します。
multicol行ごとに、 隣接するカラムボックスはカラムギャップで分離され、 そこにはカラム罫線が入る場合もあります。 同じmulti-column container内のカラムギャップ・罫線は全て等しくなります。 カラム罫線は両側に内容があるカラム間だけに現れます。
単純な場合、multicol containerは1行のカラムだけを持ち、 各カラムの高さはmulti-column containerの内容ボックスの使用高さと等しくなります。 ただし、分割やスパナーによって、 multi-column containerの内容が複数のmulticol行に分割されることもあります。
multi-column containerがページ分割される場合、各カラムの高さはページで制約され、次のページの新しいカラム行に内容が続きます。カラムボックスがページをまたいで分割されることはありません。
同じ効果はスパニング要素がmulti-column containerを分割する場合にも発生します。スパナーの前のカラムは内容に合わせてバランスよく短縮され、スパナーの後の内容は新しいカラム行に流れ込みます。
multi-column containerは、 したがって通常のブロックコンテナであり、 その内容は一連のmulticol行とmulticolスパナーから構成される新たな独立整形コンテキストを確立します。 各multi-column行はブロックレベルボックスとして そのカラムボックスのための多段組み整形コンテキストを確立します。 スパナーは ブロックレベルボックスとして、通常通りdisplay値に応じた独立整形コンテキストを確立します。
多段組みコンテナの入れ子も可能ですが、実装依存の制限がある場合があります。
注: カラムボックスにプロパティや値を直接設定することはできません。 例えば、特定のカラムボックスの背景を設定したり、カラムボックスにパディング・マージン・ボーダーの概念はありません。 将来的な仕様で追加機能が検討される可能性があります(例:カラムごとに幅や背景を変えるなど)。
注: ビューポートより高いカラム高さを持つmulticol containerはアクセシビリティ上の問題を招くことがあります。 詳細はアクセシビリティに関する考慮事項を参照ください。
4. カラムの数と幅
多段組みコンテンツをレイアウトする際、カラム数とカラム幅の決定は基本となります。 これらのプロパティを使ってカラム数とカラム幅を設定します:
3つ目のプロパティcolumnsは、 column-widthとcolumn-countの両方を設定できるショートハンドプロパティです。
明示的なカラム区切りや内容、高さの制約など、他の要因も実際のカラム数や幅に影響を与えることがあります。
4.1. カラムのインラインサイズ: column-width プロパティ
| 名前: | column-width |
|---|---|
| 値: | auto | <length [0,∞]> |
| 初期値: | auto |
| 適用対象: | ブロックコンテナ(テーブルラッパーボックスを除く) |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | キーワードautoまたは絶対長さ |
| 正規順序: | 文法に従う |
| アニメーション型: | 算出値型による |
このプロパティは多段組みコンテナのカラム幅を指定します。
- auto
- 他のプロパティ(例:column-countがautoでない場合など)によってカラム幅が決まることを意味します。
- <length [0,∞]>
- 最適なカラム幅を指定します。 実際のカラム幅は(利用可能なスペースを満たすために)より広くなることもあり、 または(利用可能なスペースが指定幅より小さい場合は)より狭くなることもあります。 負の値は指定できません。 使用値は最低でも1pxに丸められます。
div{ width : 100 px ; column-width : 45 px ; column-gap : 0 ; column-rule : none; }
100px幅の要素の中に45pxのカラムを2つ入れる余地があります。 利用可能スペースを満たすため、実際のカラム幅は50pxに拡大されます。
div{ width : 40 px ; column-width : 45 px ; column-gap : 0 ; column-rule : none; }
利用可能スペースが指定されたカラム幅より小さいため、実際のカラム幅は縮小されます。
column-widthを縦書きテキストにも使えるようにするため、 カラム幅とはカラム内の行ボックスの長さ(インライン方向)を指します。
注: column-widthがある程度柔軟なのは、 さまざまな画面サイズに対応したスケーラブルなデザインを実現するためです。 正確なカラム幅を指定するには、 カラム間ギャップと多段組みコンテナの幅(横書きの場合)も指定する必要があります。
4.2. カラム数: column-count プロパティ
| 名前: | column-count |
|---|---|
| 値: | auto | <integer [1,∞]> |
| 初期値: | auto |
| 適用対象: | ブロックコンテナ(テーブルラッパーボックスを除く) |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | 指定値 |
| 正規順序: | 文法に従う |
| アニメーション型: | 算出値による |
このプロパティは多段組みコンテナのカラム数を指定します。
- auto
- 他のプロパティ(例:column-widthがautoでない場合など)によってカラム数が決まることを意味します。
- <integer [1,∞]>
- 要素の内容が流し込まれる最適なカラム数を指定します。 値は0より大きくなければなりません。 column-widthとcolumn-countがどちらもautoでない場合、 この整数値は最大カラム数を示します。
4.3. column-widthとcolumn-countのショートハンド: columns プロパティ
| 名前: | columns |
|---|---|
| 値: | <'column-width'> || <'column-count'> |
| 初期値: | 個別プロパティ参照 |
| 適用対象: | 個別プロパティ参照 |
| 継承: | 個別プロパティ参照 |
| パーセンテージ: | 個別プロパティ参照 |
| 算出値: | 個別プロパティ参照 |
| アニメーション型: | 個別プロパティ参照 |
| 正規順序: | 文法に従う |
これはcolumn-widthとcolumn-countをまとめて設定できるショートハンドプロパティです。 省略された値は初期値となります。
columns : 12 em ; /* column-width: 12em; column-count: auto */ columns: auto12 em ; /* column-width: 12em; column-count: auto */ columns:2 ; /* column-width: auto; column-count: 2 */ columns:2 auto; /* column-width: auto; column-count: 2 */ columns: auto; /* column-width: auto; column-count: auto */ columns: auto auto; /* column-width: auto; column-count: auto */
4.4. 疑似アルゴリズム
下記の疑似アルゴリズムはcolumn-count(N)とcolumn-width(W)の使用値を決定します。他の変数としてU(多段組みコンテナの使用幅)があります。
注: 多段組みコンテナの使用幅Uは要素の内容によって決まる場合があり、 その場合column-countやcolumn-widthの算出値にも依存します。 本仕様はUの計算方法を定義しません。 別のモジュール(おそらくBasic Box Model [CSS3BOX]やBox Sizing Module [CSS3-SIZING])で定義される予定です。
floor(X)関数はX以下の最大の整数Yを返します。
(01) if ((column-width = auto) and (column-count = auto)) then (02) exit; /* not a multicol container */ (03) if column-width = auto then (04) N := column-count (05) else if column-count = auto then (06) N := max(1, (07) floor((U + column-gap)/(column-width + column-gap))) (08) else (09) N := min(column-count, max(1, (10) floor((U + column-gap)/(column-width + column-gap))))
そして:
(11) W := max(0, ((U + column-gap)/N - column-gap))
自動反復カラム数を決定する目的で、 UAはカラムサイズをゼロ除算を避けるためUA指定値までfloorしなければなりません。 この下限値は1px以下が推奨されます。
ページ分割メディアなどの分断文脈では、 UAはこの計算をフラグメントごとに行っても構いません。
column-countの使用値は明示的なカラム区切りやカラム高さ制約を考慮せずに計算されますが、 実際の値はこれらを考慮します。
div{ width : 40 em ; columns : 20 em ; column-gap : 0 ; } p{ break-after : column; }
< div > < p > one< p > two< p > three</ div >
div{ width : 80 em ; height : 10 em ; columns : 20 em ; column-gap : 0 ; column-fill : auto; }
< div > foo</ div >
算出column-countはauto、使用column-countは4、実際のcolumn-countは1です。
4.5. スタッキングコンテキスト
多段組みコンテナ内のすべてのカラムボックスは同じスタッキングコンテキストに属し、内容の描画順序はCSS 2.1で規定されたとおりです。 カラムボックスは新たなスタッキングコンテキストを確立しません。
4.6. カラムのスタイリング: ::column 疑似要素
::column 疑似要素は、 多段組みコンテナ内の個々のカラムを表します。 これは多段組みコンテナにのみ存在します。
多段組みコンテナには、カラム数と同じ数の::column疑似要素があります。 これらは個別に指定することはできません。 multicolの::column疑似要素に指定したスタイルは その要素のすべてのカラムに適用されます。 各::columnは対応するカラムと同じサイズ・位置を持ちます。 カラムの利用可能スペース(インライン軸)や、コンテナの内容ボックス(ブロック軸)に一致します。 (カラム間のギャップや罫線部分は含みません。)
::column疑似要素は、自身の多段組みコンテナの子として扱われますが、内容は持ちません。 これらはカラムの内容をラップしません。同じスペースを塗りつぶすだけです。
::column疑似要素は、非常に限られたプロパティのみ受け付けます:
-
scroll-margin、scroll-snap-align、scroll-snap-stop(スクロールコンテナ内要素に適用されるスクロールスナッププロパティ)
さらに、::column疑似要素には自身の::scroll-marker疑似要素を持つことができます(::column::scroll-marker)。 (その他の疑似要素は::columnには存在しません。) この::scroll-marker疑似要素は、::column疑似要素自身ではなく、 その起点要素から継承します。
注: ::columnで利用できるプロパティや疑似要素は、今後さらに拡張される可能性があります。 カラムの内容ではなく位置を気にする機能が増えれば、今後の追加が予想されます。
5. カラム間の間隔と罫線
カラムギャップとカラム罫線は、同じ多段組みコンテナのカラム間に配置されます。 カラムギャップとカラム罫線の長さはカラムの高さと等しくなります。 カラムギャップはスペースを占有します。 つまり、カラムギャップは隣接するカラム(同じ多段組みコンテナ内)の内容を離して配置します。
カラム罫線は、カラムギャップの中央に描画され、 その端点は多段組みコンテナの内容エッジの反対側に位置します。 カラム罫線はスペースを占有しません。 つまり、カラム罫線の有無や太さによって、他のものの配置は変わりません。 カラム罫線がギャップより太い場合は、隣接カラムボックスが罫線と重なり、 罫線が多段組みコンテナの外まで伸びる場合もあります。 カラム罫線は多段組みコンテナのボーダーのすぐ上に描画されます。 スクロール可能な多段組みコンテナでは、 ボーダーや背景は当然スクロールしませんが、 罫線はカラムと一緒にスクロールする必要があります。 カラム罫線は両側に内容があるカラムの間だけ描画されます。
5.1. カラム間のガター: column-gap プロパティ
column-gapプロパティは[CSS3-ALIGN]で定義されています。
多段組み整形コンテキストでは、normal値のcolumn-gap使用値は1emです。 これにより初期値のままでも可読性が確保されます。 カラム間に罫線がある場合は、そのギャップの中央に表示されます。
5.2. カラム罫線の色: column-rule-color プロパティ
| 名前: | column-rule-color |
|---|---|
| 値: | <color> |
| 初期値: | currentcolor |
| 適用対象: | 多段組みコンテナ |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | 算出色 |
| 正規順序: | 文法に従う |
| アニメーション型: | 算出値型による |
- <color>
- カラム罫線の色を指定します。
5.3. カラム罫線のスタイル: column-rule-style プロパティ
| 名前: | column-rule-style |
|---|---|
| 値: | <line-style> |
| 初期値: | none |
| 適用対象: | 多段組みコンテナ |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | 指定キーワード |
| 正規順序: | 文法に従う |
| アニメーション型: | discrete |
column-rule-styleプロパティは、要素のカラム間の罫線スタイルを設定します。 <line-style>値はcollapsing border modelと同様に解釈されます。
noneやは、column-rule-widthの算出値を0にします。
5.4. カラム罫線の幅: column-rule-width プロパティ
| 名前: | column-rule-width |
|---|---|
| 値: | <line-width> |
| 初期値: | medium |
| 適用対象: | 多段組みコンテナ |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | 絶対長さ、ボーダー幅としてスナップされた値;カラム罫線スタイルがnoneまたはの場合は0 |
| 正規順序: | 文法に従う |
| アニメーション型: | 算出値型による |
このプロパティはカラム間の罫線の幅を設定します。 負の値は指定できません。
5.5. カラム罫線ショートハンド: column-rule プロパティ
| 名前: | column-rule |
|---|---|
| 値: | <'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'> |
| 初期値: | 個別プロパティ参照 |
| 適用対象: | 個別プロパティ参照 |
| 継承: | 個別プロパティ参照 |
| パーセンテージ: | 個別プロパティ参照 |
| 算出値: | 個別プロパティ参照 |
| アニメーション型: | 個別プロパティ参照 |
| 正規順序: | 文法に従う |
このプロパティは、スタイルシート上でcolumn-rule-width、column-rule-style、column-rule-colorをまとめて設定できるショートハンドです。 省略された値は初期値となります。
body{ column-gap : 35 px ; column-rule-width : 35 px ; column-rule-style : solid; column-rule-color : black; }
6. カラム区切り
内容が複数カラムにレイアウトされる場合、 ユーザーエージェントはカラム区切り位置を決定しなければなりません。 内容をカラムに分割する問題は、ページへ分割する問題(CSS 2.1 セクション13.3.3 [CSS21])とよく似ています。
カラム区切りをページ区切りと同じプロパティで記述できるよう、3つの新しいプロパティが導入されました:break-before、break-after、break-insideです。
6.1. 分断制御: break-before、break-after、break-insideプロパティ
break-before、break-after、break-insideは[CSS3-BREAK]で定義されています。
7. カラムのまたぎ(スパニング)
column-spanプロパティにより、要素が複数のカラムにまたがって表示されることが可能になります。 本仕様では、前レベルで利用できた値に<integer>を追加しています。
7.1. column-span
| 名前: | column-span |
|---|---|
| 値: | none | <integer [1,∞]> | all | auto |
| 初期値: | none |
| 適用対象: | フロー内のブロックレベル要素 |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | 指定値 |
| 正規順序: | 文法に従う |
| アニメーション型: | discrete |
このプロパティは要素がまたがるカラム数を指定します。値は以下の通りです:
- none
- この要素は複数カラムにまたがりません。
- all
-
要素はカラム区切りを強制し、フロー外となって、同じブロック整形コンテキストで最も近いmulticol祖先の全カラムにまたがります。
要素より前に現れる通常フローの内容は、直前のmulti-column行のすべてのカラムに自動的にバランスよく配置され、
要素の後の内容は新規のmulti-column行に流れ込みます。
要素は独立整形コンテキストを確立します。
注: 要素が新たな整形コンテキストを確立するかどうかは、その要素がmulticolの子孫かどうかに依存しません。 column-spanがallのときは常に確立します。 これは後でmulticolが削除されたり、メディアクエリ等でmulticolが無効になった場合にもデザインの堅牢性を保つためです。
- <integer [1,∞]>
-
指定したカラム数だけ要素がまたがります。
値は0より大きくなければなりません。
指定された整数値がmulticol要素のカラム数以上なら、
column-span: allと同じになります。
この定義は不十分です。
- column-span: 1はcolumn-span: noneとみなすのか、それともスパナー(BFC)を作るのか?
- どのカラムをまたぐのか?
- 高さ計算やcolumn-fillとの相互作用は?
- auto
-
要素がまたがるカラム数は、そのmin-content 外部サイズ(multi-column
containerのインライン方向)によって決まります。
それがcolumn-widthの使用値より小さい場合は
column-span: noneと同じです。
そうでなければ、またがりに必要な最小の正の整数nは
n × column-width + (n - 1) × column-gapがmin-content外部サイズを超える最小のn。 これがカラム数を超える場合は、column-span: allと同様に扱います。column-span: 1がcolumn-span: noneと同じでない場合、要素が小さい時はcolumn-span: 1とcolumn-span: noneどちらの動きにすべきか?
複数のカラムにまたがる要素を多段組みスパニング要素、その際に生成されるボックスを多段組みスパナーと呼びます。
スパナーの包含ブロックはmulti-column container自身です。 そのため、スパナー自身がスパナー内の絶対配置ボックスの包含ブロックチェーンを確立しない場合には、 multi-column containerまでスキップされます(スパナーとmulti-column container間の祖先はスキップされます)。
スパナーはフロー外扱いですが、 これによってスパニング要素の描画順 [CSS21]には影響しません。
h2要素がサンプル文書の6文目("the leg of
a"の後)に追加されています。
このスタイルが適用されます:
h2{ column-span : all; background : silver}
column-spanをallに設定することで、
h2要素より前に現れるすべての内容はh2の上に表示されます。
スパナーはmulti-column行を分割するため、カラム罫線(これは同じカラム間でのみ描画される)も中断されることに注意してください。
スパニング要素は、同じ整形コンテキストに属し、かつスパニング要素とmulti-column containerの間にfixed位置子孫のための包含ブロックを確立するものがなければ、 第一レベル以外の子孫でも問題ありません。
< article > < section > < div class = "spanner" > Attempted spanner</ div > </ section > </ article >
article{ columns : 2 ; } section{ transform : rotate ( 90 deg ); } .spanner{ column-span : all; background : silver; }
スパナーの前のフラグメントが空なら特別なことは起こりません。 上マージン・ボーダー・パディングはスパニング要素上に現れ、空のフラグメントとなります。
article要素です。
その中に段落とsection要素があり、sectionの中にh2見出し(column-span: all)があり、section自体はカラムボックス内に収まっています。
h2はsectionの最初の子なので、
このsectionのmargin・border(図中赤)・paddingはスパニング
h2より前の空フラグメントになります。
< article > < p > ...</ p > < section > < h2 > An h2 element</ h2 > < p > ...</ p > </ section > </ article >
section{ border : 2 px solid red; margin-top : 65 px ; padding-top : 20 px ; } h2{ column-span : all; background : silver}
h2要素にcolumn-span: all、sectionには赤枠と上部padding・margin
スパニング要素は、通常の場合よりも多くのスペースを必要とします。 スペースが足りない場合、スパニング要素を配置できないことがあります。 その場合、ユーザーエージェントはこのプロパティにnoneが指定されたものとして扱うことがあります。
h2要素が後ろに現れ、multi-column
containerの高さが制限されています。
そのためh2はオーバーフロー内に現れ、スパニングできる余地がありません。
結果として、column-span: noneのように表示されます。
H2要素が4段落目の後に現れます。
スパナーはブロックレベルボックスなので、隣接するスパナー同士のマージンは相殺(マージンの折りたたみ)されます。 絶対配置要素だけで区切られた2つのスパナーのマージンも相殺されます(絶対配置要素はカラムボックスを生成しないため)。 カラムボックスは新たなブロック整形コンテキストを確立するため、カラムボックス内要素のマージンはスパナーのマージンと相殺されません。
h2{ margin : 16 px 0 ; column-span : all; background : silver} p{ margin-top : 16 px }
8. カラムの充填
カラムの内容の詰め方には2つの戦略があります。 バランスさせるか、しないかです。 バランスする場合、ユーザーエージェントはカラム高さの差異を最小限にしようとしますが、強制区切りやwidowsやorphans等のカラム高さに影響するプロパティも考慮されます。 バランスしない場合は、カラムを順番に埋めていき、途中や最後のカラムが空になることもあります。
8.1. カラムのバランス調整: column-fillプロパティ
| 名前: | column-fill |
|---|---|
| 値: | auto | balance | balance-all |
| 初期値: | balance |
| 適用対象: | multi-column container |
| 継承: | no |
| パーセンテージ: | N/A |
| 算出値: | 指定キーワード |
| 正規順序: | 文法に従う |
| アニメーション型: | discrete |
このプロパティは、multi-column行内で スパナーの直前でない内容がカラム間でバランスされるかどうかを指定します。
値は以下の通りです:
- balance
- 可能な限り均等にカラム間で内容を分割します。 分断文脈では、最後のフラグメントだけバランスされます。
- balance-all
- 可能な限り均等にカラム間で内容を分割します。 分断文脈ではすべてのフラグメントでバランスされます。
- auto
- カラムを順番に埋めていきます
連続文脈では、オーバーフローカラムがある場合このプロパティは効果を持ちません。
article{ width : 60 em ; height : auto; columns : 4 ; column-fill : balance; }
article{ width : 60 em ; height : 4 em ; columns : 4 ; column-fill : auto; }
結果として、すべての内容が最初のカラムに詰められます:
article{ width : 60 em ; height : auto; columns : 4 ; column-fill : balance; } p{ break-after : column; }
最短カラム高さは5行です。 カラム高さが決まった後は、カラムを順に埋めていきます。 そのため3カラム目は前2つと同じ高さですが、最後のカラムはかなり短くなります。
article{ width : 60 em ; height : auto; columns : 4 ; column-fill : balance; }
この例では最初に分割できないfigure要素があり、これがカラム高さを決めます。 以降の内容は残ったカラムに順次埋められます:
9. オーバーフロー
9.1. 多段組みコンテナ内のオーバーフロー
カラム区切りを発生させる場合を除き、カラムボックスの外側にはみ出た内容は 目に見える形でオーバーフローし、カラムボックスでクリップされません。
注: カラム区切りについては§6 カラム区切り、 多段組みコンテナの内容ボックスでクリップされるかどうかは§9.2 多段組みコンテナ外部のページ分割とオーバーフローを参照してください。
9.2. 多段組みコンテナ外部のページ分割とオーバーフロー
多段組みコンテナの端でカラムボックスの外側にはみ出した内容やカラム罫線は、overflowプロパティに従ってクリップされます。
多段組みコンテナは、以下の理由で収まりきらないほど多くのカラムを持つことがあります:
- カラム高さを制約する宣言(例:heightや max-heightの使用)。 この場合、追加のカラムボックスがインライン方向に生成されます。
- ページサイズ。 この場合、追加のカラムボックスが次のページに移動されます。
- 明示的なカラム区切り。 この場合、連続文脈では追加のカラムボックスがインライン方向に生成され、分断メディアでは追加のカラムボックスが次のフラグメントに移動されます。
連続文脈で多段組みコンテナの外側に現れるカラムは、オーバーフローカラムと呼ばれます。 オーバーフローカラムは多段組みコンテナの高さに影響を与えることがあります。
div{ max-height : 5 em ; overflow : visible; }
その結果、カラム数が増えます。
連続文脈では、オーバーフローカラムが多段組みコンテナの高さに影響を与える場合があります。 この例では、オーバーフロー内に4行のテキストを含むカラムが現れ、 多段組みコンテナはこのカラムを収容できる高さになります。
カラムバランスを仮定すると、2ページ目はこうなります:
p{ break-after : column; }
その結果、カラム数が増え、追加のカラムがインライン方向に追加されます:
2ページ目はこうなります:
カラムバランスのため、最後の段落は3カラムに分割されます。
付録B. 変更点
この付録は参考情報です。
2024年5月16日付 CSS-MULTICOL-1 Candidate Recommendation (CR)からの変更点
- ::column疑似要素を追加。2024年9月27日決定。
- <integer>およびauto値のドラフト案をcolumn-spanに追加。
プライバシーに関する考慮事項
多段組みは新たなプライバシー漏洩をもたらしません。
セキュリティに関する考慮事項
多段組みは新たなセキュリティ上の考慮事項をもたらしません。
アクセシビリティに関する考慮事項
コンテナの高さや行長の設定は、視覚・認知障害のある人にとって課題となる場合があります。 ユーザーのニーズを理解するには WCAG 達成基準 1.4.10 リフローや WCAG 1.4.8 ビジュアルプレゼンテーションを参照してください。
謝辞
本書はHåkon Wium Lieによる[CSS3-MULTICOL]の成果に基づいており、 複数の過去提案やそのコメントを参考にしています。 貢献者は次の通りです:
Alex Mogilevsky、 Andy Clarke、 Anton Prowse、 Bert Bos、 Björn Höhrmann、 Cédric Savarese、 Chris Lilley、 Chris Wilson、 Daniel Glazman、 Dave Raggett、 David Hyatt、 David Singer、 David Woolley、 Elika Etemad、 Giovanni Campagna、 Ian Hickson、 Joost de Valk、 Kevin Lawver、 L. David Baron、 Markus Mielke、 Melinda Grant、 Michael Day、 Morten Stenshorne、 Øyvind Stenhaug、 Peter Linss、 Peter-Paul Koch、 Robert O’Callahan、 Robert Stevahn、 Sergey Genkin、 Shelby Moore、 Steve Zilles、 Sylvain Galineau、 Tantek Çelik、 Till Halbach