HTML

HyperText Markup Language colgroup element.

colgroup 要素

 colgroup要素は、Column group (カラム・グループ) を意味し、テーブル(表)の縦列(カラム)をグループ化する際に使用します。colgroup要素を使用すると、テーブル(表)内にある1つ以上の縦列をグループ化して、その縦列グループに対して class属性名を与えることが可能で、これをセレクタにして CSSを適用してスタイルをまとめて指定することができます。

colgroup要素の配置位置

 colgroup要素は、<table>〜</table> の間の、<caption>より後、<thead>・<tbody>・<tfoot>・<tr> より前に配置します。基本的には、「tableの captionの次」という覚え方でも問題なさそうです。

colgroup要素の配置


<table>
	<caption></caption>
	<colgroup></colgroup>
	<thead></thead>
	<tbody>
		<tr>
			<th></th>
			<td></td>
		</tr>
	</tbody>
	<tfoot></tfoot>
</table>

列数の指定方法

 グループ化する列数は、colgroup要素の span属性で指定するか、colgroup要素の中に col要素を配置して指定します。

 colgroup要素は span属性を持つ場合には空要素となり、子孫要素を含むことはできません。反対に span属性を持たない場合には、子要素として col要素と template要素を入れることが可能になります。

colgroup要素の span属性で指定する場合

 次の例では3列をグループ化しています。


<colgroup span="3"></colgroup>

 span属性を省略した場合は、1列をグループ化したことになります。


<colgroup></colgroup>

col要素で指定する場合

 col要素にも span属性があり、その属性で列数を指定することができます。次の例では4列を2グループ(2列:2列)にグループ化しています。


<colgroup>
	<col span="2">
	<col span="2">
</colgroup>

 col要素の span属性を省略した場合は、その col要素は1列を指定したことになります。したがって、次の例では3列を2グループ(1列:2列)にグループ化したことになります。


<colgroup>
	<col>
	<col span="2">
</colgroup>

 span属性には、グループ化する縦列の数を指定します。span属性の値に指定できるのは 0 より大きい正の整数で、負の数値を指定することはできません。

 colgroup要素で定義された列グループは、テーブルの構造上、何かしらの意味を持たなければいけません。スタイルのためだけに、この要素を利用することは避けましょう。

 次の例では、5列の表を3つのグループ(1列:2列:2列)に分けています。

グループA グループB グループC
グループA グループB グループB グループC グループC
グループA グループB グループB グループC グループC
グループA グループB グループB グループC グループC

HTML source


<table>
	<colgroup span="1"></colgroup>
	<colgroup span="2"></colgroup>
	<colgroup span="2"></colgroup>
	<tbody>
		<tr>
			<th>グループA</th>
			<th colspan="2">グループB</th>
			<th colspan="2">グループC</th>
		</tr>
		<tr>
			<td>グループA</td>
			<td>グループB</td>
			<td>グループB</td>
			<td>グループC</td>
			<td>グループC</td>
		</tr>
		<tr>
			<td>グループA</td>
			<td>グループB</td>
			<td>グループB</td>
			<td>グループC</td>
			<td>グループC</td>
		</tr>
		<tr>
			<td>グループA</td>
			<td>グループB</td>
			<td>グループB</td>
			<td>グループC</td>
			<td>グループC</td>
		</tr>
	</tbody>
</table>

  1. 最初が span="1" なので、縦列の1列目の1列がグループ化されます。
  2. 2番目が span="2" なので、縦列の2列目〜3列目の2列がグループ化されます。
  3. 3番目が span="2" なので、縦列の4列目〜5列目の2列がグループ化されます。

 colgroup要素を設定しただけでは見た目に何も変わりませんが、グループ化の指定を行なうと、グループ単位でスタイルを設定できるようになります。

HTML


<colgroup span="1" class="groupA"></colgroup>
<colgroup span="2" class="groupB"></colgroup>
<colgroup span="2" class="groupC"></colgroup>

CSS


table, td, th {
	/* 表を見やすくするためにボーダーを表示させる */
	border: 1px solid gray;
}

.groupA {
	background-color: #bbbbff;
}

.groupB {
	background-color: #bbffbb;
}

.groupC {
	background-color: #ffffbb;
}

グループA グループB グループC
グループA グループB グループB グループC グループC
グループA グループB グループB グループC グループC
グループA グループB グループB グループC グループC

HTML5へのバージョンアップによる変更点

 colgroup要素は、HTML5では align属性・char属性・charoff属性・valign属性・width属性が廃止され、span属性だけが残されています。

属性

 この要素はグローバル属性を持ちます。

span
この属性は、colgroup要素が及ぶ連続した列の数を示す正の整数を持ちます。指定しない場合のデフォルト値は1です。
この属性は縦列グループの属性に適用されるものであり、colgroup要素や縦列グループのメンバー列内のセルに関連づけた CSSスタイル規則には影響しません。
  • colgroup要素内に1個以上の col要素がある場合は、span属性は許可されていません。
align 【 HTML5で廃止 】
この属性は最新の標準仕様で廃止された(サポートされていない)ため、使用しないでください。
  • 値 left、center、right、justify と同じ効果を得る方法:
    • colgroup要素を与えたセレクターに text-alignプロパティを設定しようとしてはいけません。td要素は colgroup要素の子孫ではないため、プロパティを継承しません。
    • 表で colspan属性を使用しない場合は、列ごとに1つずつ td:nth-child(an+b) CSSセレクターを使用してください。a は表内の列数、b は表内の列の位置を示す序数です。このセレクターの後でのみ text-alignプロパティを使用できます。
    • 表で colspan属性を使用している場合は [ colspan=n ] のような、十分な CSS属性セレクターの組み合わせで実現できますが、容易ではありません。
  • 値 char と同じ効果を得るには、CSS3では text-alignプロパティの値として char の値を使用します。
bgcolor 【 非推奨 】
使用上の注意:この属性は非標準であり Internet Explorerの一部バージョンしか実装していませんので、使用しないでください。
<colgroup>要素は CSSを使用してスタイルをつけましょう。bgcolor属性と同様の効果を与えるには、CSSの background-colorプロパティを適切な <td>要素で使用してください。
char 【 HTML5で廃止 】
この属性は最新の標準仕様で廃止された (サポートされていない) ため、使用しないでください。
char と同じ効果を得るには、CSSでは text-alignプロパティの値として char の値を使用します。
charoff 【 HTML5で廃止 】
この属性は最新の標準仕様で廃止された (サポートされていない) ため、使用しないでください。
valign 【 HTML5で廃止 】
この属性は最新の標準仕様で廃止された (サポートされていない) ため、使用しないでください。
  • <colgroup>要素を与えたセレクターに vertical-alignプロパティを設定しようとしてはいけません。<td>要素は <colgroup>要素の子孫ではないため、プロパティを継承しません。
  • 表で colspan属性を使用していない場合は、td:nth-child(an+b) CSSセレクターを使用してください。a は表の列数、b は表内の列の位置を示す序数です。このセレクターの後でのみ text-alignプロパティを使用できます。
  • 表で colspan属性を使用している場合は [colspan=n] のような、十分な CSS属性セレクターの組み合わせで実現できますが、容易ではありません。
width 【 HTML5で廃止 】
この属性は、カレントの列グループ内の各列の既定の幅を指定します。標準的なピクセル値やパーセント値に加えて、この属性は特別な書式 0* も使用できます。これはグループ内の各列の幅を、列の内容物を保持するのに必要最小限の幅にします。0.5* のような幅の相対値も使用できます。

colgroup要素の概要

カテゴリー
該当なし
コンテンツ・モデル
span属性が指定された場合
なし。空要素となります。
span属性が指定されていない場合
0個以上の col要素と template要素を持つことが可能。
利用可能な場所
table要素の子として。ただし、caption要素より後ろで、thead要素、tbody要素、tfoot要素、tr要素より前に置かなければなりません。
開始タグの省略
colgroup要素の中で最初に col要素が来るか、または、終了タグが省略された別の colgroup要素が直前に来ていない場合、省略することが可能です。
終了タグの省略
スペース文字(空白)やコメントが直後になければ、省略することが可能です。
要素固有の属性
span
列グループに入れる列の数を指定します
標準的なスタイル
colgroup {
	display: table-column-group;
}
許可されている ARIAロール
なし
DOMインターフェイス
HTMLTableColElement

colgroup要素の使用例

colgroup要素のみで使用した例

HTML


<table>
	<colgroup span="2" class="groupA"></colgroup>
	<colgroup span="3" class="groupB"></colgroup>
	<tbody>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
			<td>Data D</td>
			<td>Data E</td>
		</tr>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
			<td>Data D</td>
			<td>Data E</td>
		</tr>
	</tbody>
</table>

CSS


table, td, th {
	/* 表を見やすくするためにボーダーを表示させる */
	border: 1px solid gray;
}

.groupA {
	background-color: #bbbbff;
}

.groupB {
	background-color: #bbffbb;
}

Data A Data B Data C Data D Data E
Data A Data B Data C Data D Data E

colgroup要素と col要素を組み合わせて使用した例

HTML


<table>
	<colgroup class="groupA">
		<col>
		<col>
	</colgroup>
	<colgroup class="groupB">
		<col>
		<col class="groupC">
		<col>
	</colgroup>
	<tbody>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
			<td>Data D</td>
			<td>Data E</td>
		</tr>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
			<td>Data D</td>
			<td>Data E</td>
		</tr>
	</tbody>
</table>

CSS


table, td, th {
	/* 表を見やすくするためにボーダーを表示させる */
	border: 1px solid gray;
}

.groupA {
	background-color: #bbbbff;
}

.groupB {
	background-color: #bbffbb;
}

.groupC {
	background-color: #ffffbb;
}

Data A Data B Data C Data D Data E
Data A Data B Data C Data D Data E

colgroup要素 + CSS

 文字を中央寄せや右寄せにしてみる。

Data A Data B Data C
Data A Data B Data C

HTML


<table>
	<colgroup class="groupD"></colgroup>
	<colgroup span="2" class="groupE"></colgroup>
	<tbody>
		<tr>
			<td style="text-align:center;">Data A</td>
			<td style="text-align:right;">Data B</td>
			<td>Data C</td>
		</tr>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
		</tr>
	</tbody>
</table>

CSS source


.groupD {
	background-color: #bbbbff;
	width: 80px;
	text-align: center;
}

.groupE {
	background-color: #bbffbb;
	width: 80px;
	text-align: right;
}

 colgroup要素に対して CSSの text-alignを使用してもできませんでした。

 td要素に対して個別に text-alignを使用することは可能ですが、大きなテーブル(表)になると手間がかかってしまいます。

 そこで、CSSの構造疑似クラスである :nth-child(n)を使ってみました。

Data A Data B Data C
Data A Data B Data C

HTML


<table class="mytable">
	<colgroup class="groupD"></colgroup>
	<colgroup span="2" class="groupE"></colgroup>
	<tbody>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
		</tr>
		<tr>
			<td>Data A</td>
			<td>Data B</td>
			<td>Data C</td>
		</tr>
	</tbody>
</table>

CSS


.groupD {
	background-color: #bbbbff;
	width: 80px;
}

.groupE {
	background-color: #bbffbb;
	width: 80px;
}

.mytable td:nth-child(1) {
	text-align: center;
}

.mytable td:nth-child(2) {
	text-align: right;
}

.mytable td:nth-child(3) {
	text-align: right;
}

 こちらの方が、大きなテーブル(表)だった場合などのメンテナンス性を考えると有効なようです。

DOMでの参照方法


[window.]document.getElementById("【ID属性値名】")

追加が可能なイベントハンドラ属性

onClick イベント
クリック時の処理
onDblClick
オブジェクトがダブルクリックされたら処理を実行する
onKeyDown
キーが押されたら処理を実行する
onKeyPress
キーが押されている間処理を実行する
onKeyUp
キーが押されて離されたら処理を実行する
onmousedown
マウスボタンが押されたら処理を実行する
onMouseMove
マウスポインタがオブジェクト上を移動したら処理を実行する
onMouseOut
マウスポインタがオブジェクトから離れたら処理を実行する
onMouseOver
マウスポインタがオブジェクトに重なったら処理を実行する
onMouseUp
マウスボタンが離されたら処理を実行する