<colgroup要素> - 列のグループ化
公開日:
colgroup要素は、列のグループを表す要素です。この要素を使えば、テーブルで、縦方向に串刺しにしてスタイルを適用できます。
概要
- 名前
- colgroup (Column group)
- カテゴリー
- なし。
- 配置できる場所
- table要素の子要素として、caption要素よりも後で、かつ、thead要素、tbody要素、tfoot要素、またはtr要素よりも前に配置すること。
- コンテンツモデル
- span属性を持つ場合、子要素を持ってはいけない。
- span属性を持たない場合、0個以上のcol要素、および、template要素。
- タグの省略
- 最初の子要素がcol要素で、かつ、終了タグを省略した別のcolgroup要素が直前に存在しない場合、開始タグを省略できる。
- 空白文字、またはコメントが後にない場合、終了タグを省略できる。
- DOM Interface
- HTMLTableColElement
- デフォルトのスタイル
colgroup { display: table-column-group; }
- 仕様書
- https://html.spec.whatwg.org/multipage/tables.html#the-colgroup-element
属性
span
何列分の列か、数値を指定する。
グローバル属性
全てのタグで利用できるグローバル属性を指定できます。
説明
基本的な使い方
colgroup要素を利用すると、列をグループ化できます。主な用途は、縦方向に串刺ししてスタイルを適用することです。使い方は簡単で、そのテーブルの列の合計数に一致するように、span属性に数値を振り分けていって下さい。colgroup要素の数だけグループができます。そして、このcolgroup要素に適用したスタイルが、列全体に適用されます。
HTML
<!-- 4列あるテーブルの場合の一例 (3つのグループ) -->
<colgroup span="2"></colgroup><!-- 先頭から2列分 (1列目と2列目) -->
<colgroup span="1"></colgroup><!-- 1列分 (3列目) -->
<colgroup span="1"></colgroup><!-- 1列分 (4列目) -->
<!-- 5列あるテーブルの場合の一例 (2つのグループ) -->
<colgroup span="1"></colgroup><!-- 先頭から1列分 (1列目) -->
<colgroup span="4"></colgroup><!-- 4列分 (2〜5列目) -->
table要素の、caption要素の直後、ない場合は先頭に配置して下さい。
HTML
<table>
<!-- 列をグループ化 -->
<colgroup span="2" class="aaa"></colgroup><!-- 先頭から2列分 (1〜2列目) -->
<colgroup span="3" class="bbb"></colgroup><!-- 3列分 (3〜5列目) -->
<!-- 1つ目の行 -->
<tr>
<!-- 5列 -->
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
<td>DDD</td>
<td>EEE</td>
</tr>
<!-- 2つ目の行 -->
<tr>
<!-- 5列 -->
<td>FFF</td>
<td>GGG</td>
<td>HHH</td>
<td>III</td>
<td>JJJ</td>
</tr>
</table>
CSS
.aaa {
background-color: red ;
}
.bbb {
background-color: blue ;
}
グループ化した列に適用できるプロパティの種類には制限があります。これら以外のプロパティを指定しても適用されません。こういうものだと覚えておきましょう。
- background
- border (
border-collapse: collapse;
の場合のみ) - width
- visibility
小さいグループ
colgroup要素でグループを作成して、そのグループの中で小グループを作ることができます。それにはcol要素を子要素に配置しましょう。col要素の仕組みはcolgroup要素と同じです。小グループを作る場合、colgroup要素はspan属性を持ってはいけない点にご注意下さい。子要素であるcol要素のspan属性値の合計が、colgroup要素がまたがる列数になります。
HTML
<!-- 10列あるテーブルの場合の一例 (2つの大グループ) -->
<!-- 先頭から6列 (1〜6列目) -->
<colgroup>
<col span="2"><!-- 1〜2列目 -->
<col span="4"><!-- 3〜6列目 -->
</colgroup>
<!-- 4列 (7〜10列目) -->
<colgroup>
<col span="1"><!-- 7列目 -->
<col span="2"><!-- 8〜9列目 -->
<col span="1"><!-- 10列目 -->
</colgroup>
下記は大グループを太い枠で囲って、小グループを背景色で分けた例です。
HTML
<table>
<!-- 列をグループ化 -->
<colgroup class="aaa">
<col span="2" class="bbb"><!-- 1〜2列目 -->
<col span="4" class="ccc"><!-- 3〜6列目 -->
</colgroup>
<!-- 4列 (7〜10列目) -->
<colgroup class="aaa">
<col span="1" class="ddd"><!-- 7列目 -->
<col span="2" class="eee"><!-- 8〜9列目 -->
<col span="1" class="fff"><!-- 10列目 -->
</colgroup>
<!-- 1つ目の行 -->
<tr>
<!-- 10列 -->
<td>AAA</td><td>BBB</td><td>CCC</td><td>DDD</td><td>EEE</td><td>FFF</td><td>GGG</td><td>HHH</td><td>III</td><td>JJJ</td>
</tr>
<!-- 2つ目の行 -->
<tr>
<!-- 10列 -->
<td>KKK</td><td>LLL</td><td>MMM</td><td>NNN</td><td>OOO</td><td>PPP</td><td>QQQ</td><td>RRR</td><td>SSS</td><td>TTT</td>
</tr>
</table>
CSS
table {
border-collapse: collapse ; /* borderを適用するのに必要 */
}
.aaa {
border: 12px solid #000 ;
}
.bbb {
background-color: red ;
}
.ccc {
background-color: blue ;
}
.ddd {
background-color: green ;
}
.eee {
background-color: orange ;
}
.fff {
background-color: purple ;
}
サンプルコード
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>【デモ】<colgroup要素> - 列のグループ化</title>
<link rel="canonical" href="https://syncer.jp/Web/HTML/Reference/Element/colgroup/">
<style>
body {
background-color: #fff ;
}
table, th, td {
border: 1px solid #000 ;
color: #fff ;
}
.aaa {
background-color: red ;
}
.bbb {
background-color: blue ;
}
.ccc {
background-color: green ;
}
</style>
</head>
<body>
<p>colgroup要素は、列をグループ化するための要素です。縦方向に串刺ししてスタイルシートを適用できます。</p>
<p>先頭から2列分を赤、1列分を青、1列分を緑、の背景色にしました。</p>
<table>
<colgroup span="2" class="aaa"></colgroup><!-- 2列分 (1列目と2列目) -->
<colgroup span="1" class="bbb"></colgroup><!-- 1列分 (3列目) -->
<colgroup span="1" class="ccc"></colgroup><!-- 1列分 (4列目) -->
<tr>
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
<td>DDD</td>
</tr>
<tr>
<td>EEE</td>
<td>FFF</td>
<td>GGG</td>
<td>HHH</td>
</tr>
<tr>
<td>III</td>
<td>JJJ</td>
<td>KKK</td>
<td>LLL</td>
</tr>
</table>
</body>
</html>