<colgroup>要素
Technical Summary
colgroupは、親tableの1列以上を列グループとして表します。グループが子のcolを持たない場合はcolgroup spanで列数を表し、子にcolがある場合は各col spanで列数を表します。
列グループと列はtable modelとCSS presentationに参加しますが、見出しテキストやデータセルを作りません。列の意味を伝えるのはthとheader-assignment rulesです。CSS column boxesの効果も通常の要素ボックスと同じではありません。
定義・配置・content model
| 項目 | colgroup | col |
|---|---|---|
| 意味 | 親tableの列グループ | 親colgroupの中の1列以上 |
| 配置先 | tableの子。captionの後、thead・tbody・tfoot・trより前 | span属性を持たないcolgroupの子 |
| 個数 | tableに0個以上 | colgroup内に0個以上 |
| content model | spanあり: Nothing。spanなし: colまたはtemplateを0個以上 | Nothing |
| 終了tag | 条件付きで省略可能 | 終了tagなし。void element |
| 固有属性 | span: 子colがない場合にグループの列数を指定 | span: このcolが表す列数を指定 |
| DOM interface | HTMLTableColElement。spanの反映値は1〜1000 | |
適合するHTMLでは、spanは正の整数1〜1000です。colgroupに子のcolがある場合、列数は子のcolが決めるため、親のspanは指定できません。DOM propertyのset時に無効値がどう丸められるかは、markupの適合条件とは別のAPI規則です。
spanと列グループの作り方
列グループの数え方は2通りあります。親のcolgroup spanを使う方法では子のcolを置かず、列ごとに定義する方法ではcolgroupの中にcolを置きます。
<!-- 方式A: 子colを持たず、グループの列数を指定 -->
<colgroup span="2"></colgroup>
<!-- 方式B: 子colごとに表す列数を指定 -->
<colgroup>
<col span="2">
<col>
</colgroup>
上の2例は別のtableで使う形です。方式Bでは、1つ目のcolが2列、2つ目が1列を表します。table modelでは列とcolumn groupを別に形成し、行のcellが占めるslotと照合します。列が存在することだけでは、その各slotにcellがあるとは限りません。
td colspanとcol spanは用途が異なります。前者は1つのcellが複数列を覆う値で、後者は列要素が表す列数です。table modelの列幅やcell overlapの検査では両方が関係します。
table model・parser・DOM interface
colgroupはtable直下の構造で、適合するcontent modelでは任意のcaptionの後、theadと表本体より前に置きます。HTML parserはtable insertion modesに従ってDOMを構築します。parser recoveryで要素が補われても、入力markupが適合するとは限りません。
colgroupとcolはともにHTMLTableColElementを使います。spanはIDL上、初期値1、反映範囲1〜1000のunsigned longです。table全体の列collectionを返す専用APIはこのinterfaceに定義されていません。
const group = document.querySelector("colgroup");
const column = group.querySelector("col");
group instanceof HTMLTableColElement; // true
column instanceof HTMLTableColElement; // true
group.span; // 1 by default
column.span; // 1 by default
// The table's data cells are still descendants of rows,
// not descendants of colgroup or col.
CSS column boxes
HTMLの列要素はtableのcellをDOM上で包みません。CSS table modelでは列・列グループのboxが別のlayerとして扱われ、column boxに適用できるpropertyは限られます。CSS 2.1はbackground、width、visibility、borderを挙げています。
| Property | 条件と効果 |
|---|---|
background | セルと行の背景がtransparentの場合に、列またはグループの背景が見える |
width | 列のminimum widthとして働く。常に固定幅になる指定ではない |
border | tableのborder-collapse: collapse時にborder conflict resolutionへ参加する |
visibility | collapse時の列の非表示とtable sizingに関与する。spanning cellとの相互作用を含めて検証する |
CSS selectorでcolgroupの子としてcellを選ぶことはできません。列ごとの背景などを指定できますが、文字色、padding、cell borderなどをすべて列要素から制御できるわけではありません。各ブラウザーの実装範囲はこのページの一部のfixtureとWPTに限定されています。
.highlighted-columns {
background-color: #eaf3ff;
}
<colgroup span="2" class="highlighted-columns"></colgroup>
見出し関係とAccessibility mapping
colgroupは列グループを表す構造であり、列見出しの文字やcell-to-header associationを代わりに作るものではありません。読者に列名を伝える場合は、tableのcellとしてthを置き、構造に応じてscopeやheadersで関係を表します。scope="colgroup"は、実際に対応するcolumn groupがある場合に限って使います。
HTML-AAM Editor's Draftでは、colはARIA roleにも各掲載platform APIにもmappingされません。colgroupもcomputed roleはなく、MSAA + IAccessible2ではROLE_SYSTEM_GROUPING、UIAではGroup(localized control type colgroup)へのmappingが記載されています。ATKとApple AXはNot mappedです。
仕様上のmappingと、特定browserがAccessibility treeに何を公開するか、OS APIの出力、screen readerの読み上げは別々のEvidenceです。下のAAM observationはChromeのbrowser accessibility tree queryであり、platform APIや支援技術を直接測った結果ではありません。
Fact / Evidence(主張 / 根拠)
規範的な仕様上の主張、CSSの適用条件、AAM mappingをEvidenceと対応付けています。観測結果と未完了範囲はImplementation EvidenceとCoverageに分けています。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | colgroupは親tableの列groupを表し、table child order内でcaptionの後、header/body rowsより前に置く。 | table content model、colgroup context、各tagのcontent model | 仕様確認済み | HTML Standard: the colgroup element / the table element |
| SPEC | colgroupにcol childrenがない場合は親span、childrenがある場合は各col spanが列数を表す。適合するspanは1〜1000。 | markup conformanceと、IDL property setterの反映範囲は別の規則 | 仕様確認済み | HTML Standard: colgroup / col |
| SPEC | colgroupとcolはtable modelに参加するが、cellはDOM上でrowの子であり、column elementの子ではない。 | 列slot、column group、cell gridを形成するtable processing model | 仕様確認済み | HTML Standard: forming a table |
| SPEC | CSS 2.1ではcolumn/column-groupにbackground、width、visibility、borderが適用される。backgroundとborderには追加条件がある。 | CSS 2.1 table columns、table layers and transparency | 仕様確認済み | CSS 2.1: columns |
| SPEC | HTML-AAMはcolをmappingせず、colgroupはcomputed roleを持たない。platform APIごとのgroup mappingは異なる。 | HTML-AAM Editor's Draftの個別element mapping | 仕様確認済み | HTML-AAM: col / colgroup |
Evidence
- HTML Standard: The
colgroupelement — meaning, context, content model, tag omission, span, and DOM interface - HTML Standard: The
colelement — context, empty content model, span, and table model - HTML Standard: The
tableelement — permitted child order - HTML Standard: Forming a table — column groups, columns, slots, and cell spans
- HTML Standard: The “in table” insertion mode — parser handling of table children
- CSS 2.1: Columns — properties applicable to column and column-group boxes
- HTML-AAM:
colgroupandcol— platform-specific role mappings - Web Platform Tests:
col-span-limits.html— selected span reflection and table layout checks - Web Platform Tests:
colgroup-col.html— tentative CSS table column and group width checks
Implementation Evidence
ブラウザー実装、選定WPT、Accessibility tree queryは別々に記録します。各結果は記載した環境・fixture・test範囲に限られます。
| 種別 | 再現確認の範囲 | 記録条件 | 状態 |
|---|---|---|---|
| IMPL | colgroup / colのHTMLTableColElement interface、spanの既定値・反映範囲、table child orderとparser補完、列グループ背景、Accessibility treeでの公開 |
2026-10-18 JST / Chrome UA 155.0.0.0(Windows NT 10.0 UA)/ viewport 1536×695 / DPR 1.25 / navigator.language=en-US。build-config/yugien/research-results/colgroup-v1/をloopback 127.0.0.1:4200で表示し、fixture checks 21/21 pass。interface、span既定値とscript setter範囲、table child order、parserがtable直下のcol用にcolgroupを補う挙動、row cellがcolumn elementの子でないこと、計算済み背景色rgb(234, 243, 255)と画面表示を確認。詳細はdocs/atlas/colgroup-evidence-2026-10-18.md。Chrome 1環境のみ。 |
部分観測(Chrome 155 / fixture 21/21) |
| WPT | 選定WPTによるcol / colgroup span範囲と列グループ・列幅の確認 |
2026-10-18 JST / Chrome UA 155.0.0.0 / wpt.live。col-span-limits.html: 3/5 pass、2 fail。script・markupによるspan clampは成功。列幅assertionはexpected 53 / actual 51、expected 51 / actual 50。colgroup-col.html(tentative): 4/6 pass、2 fail。0%列のtable widthはexpected 106 / actual 105、expected 107 / actual 106。合計7/11 pass、4 fail。Harness statusは両testでOK。wpt.liveが配信した正確な上流revisionは固定できていない。結果と範囲はdocs/atlas/colgroup-evidence-2026-10-18.mdを参照。実測時のテスト版は未記録です。リンク先の内容は変わることがあり、当時と同じテストで再確認できるとは限りません。 |
部分観測(選定WPT 7/11成功・4失敗、版未固定) |
| AAM | Chrome browser accessibility treeにおけるnamed table、row、cell、column group、columnの公開 | 2026-10-18 JST / Chrome UA 155.0.0.0(Windows NT 10.0 UA)/ viewport 1536×695 / DPR 1.25 / navigator.language=en-US。fixtureのnamed table Quarterly plan pricesについて、Accessibility treeにtable 1、row 3、cell 9を確認。colgroupとcolは個別nodeとして現れず、返されたtreeではheaderを含むcellもcellとして表示。Chromeのbrowser accessibility tree queryのみで、Windows UI Automation / IAccessible2などのplatform APIやスクリーンリーダー発話は未測定。 |
部分観測(Chrome 155 browser accessibility tree / 1環境) |
Coverage / Open Issues
- SPEC意味、配置、content model、span、DOM interface、table model、CSS 2.1のcolumn properties、HTML-AAM mapping
- IMPLfixtureとChrome 1環境での一部観測。他browser、OS build、印刷、複雑なrowspan/colspan gridは未測定
- WPT選定testのみ。wpt.liveの配信revision、全test directory、他browserは未確認
- AAMChrome browser accessibility tree queryのみ。Windows UI Automation、IAccessible2、ATK、Apple AX、支援技術の発話は未測定
- ReviewExpert-gap Reviewは未完了
このTopicは初期Coverageです。選定fixtureやWPTが通っても、すべてのHTML構造、browser、OS、CSS実装、支援技術で同じ結果になるとは主張しません。
関連Surface
初心者向けの例はYugienのcolgroup要素ページとcol要素ページを参照してください。列要素の詳細はcol Topic、表全体の構造はtable Topic、見出し行はthead Topic、見出しcellの関係はth Topic、表のsummary row groupはtfoot Topicで扱います。