colspan / rowspan
| 対応: | HTML 4(1997) |
|---|
『colspan』は複数の列をまたぐセル結合、『rowspan』は複数の行をまたぐセル結合を行う属性です。列のグループ化には『<colgroup>』と『<col>』を使います。
構文
<table>
<tr>
<!-- 2列分を結合 -->
<td colspan="2">横方向に結合したセル</td>
</tr>
<tr>
<td>セル1</td>
<td>セル2</td>
</tr>
</table>
属性・タグ一覧
| 属性 / タグ | 概要 |
|---|---|
| colspan | セルが横方向(列方向)に何列分を占めるかを数値で指定します。『<td>』・『<th>』に使います。 |
| rowspan | セルが縦方向(行方向)に何行分を占めるかを数値で指定します。『<td>』・『<th>』に使います。 |
| <colgroup> | テーブルの列グループを定義します。複数の列に一括でCSSを適用したいときに使います。 |
| <col> | 『<colgroup>』の中で個別の列を表します。『span』属性で複数列をまとめて指定できます。 |
サンプルコード
sample_colspan_rowspan.html
<table border="1">
<!-- 列グループ(1列目を灰色に) -->
<colgroup>
<col style="background-color: #eee;">
<col span="2">
</colgroup>
<caption>時間割</caption>
<thead>
<tr>
<th scope="col">時限</th>
<th scope="col">月曜</th>
<th scope="col">火曜</th>
<th scope="col">水曜</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1限</th>
<!-- colspan="2" で月・火をまとめる -->
<td colspan="2">HTML入門</td>
<td>CSS入門</td>
</tr>
<tr>
<th scope="row">2限</th>
<td>JavaScript</td>
<!-- rowspan="2" で2・3限の火曜をまとめる -->
<td rowspan="2">PHP入門</td>
<td>Swift入門</td>
</tr>
<tr>
<th scope="row">3限</th>
<td>Python</td>
<!-- rowspan で結合済みのため火曜のセルは省略 -->
<td>自習</td>
</tr>
</tbody>
</table>
実行結果
「時間割」という見出しのテーブルが表示されます。1限の月・火曜が「HTML入門」として横結合(colspan="2")され、2・3限の火曜が「PHP入門」として縦結合(rowspan="2")されます。また、1列目(時限列)が灰色の背景色になります。
概要
セル結合はテーブルの構造を複雑にするため、結合したセルの数だけ後続の行・列からセルを省略する必要があります。たとえば『colspan="2"』のセルを使った行では、その列に対して次の列のセルを1つ削除します。『rowspan="2"』のセルを使った行では、次の行でそのセルに対応する位置のセルを削除します。書き間違えるとレイアウトが大きく崩れるので、実際に表の設計図(表の形)を紙に書いてから実装すると分かりやすいです。
『<colgroup>』と『<col>』を使うと、列単位でCSSを適用できます。たとえば特定の列の背景色を変えたり、幅を指定したりするのに便利です。これらは必ず『<caption>』の直後・『<thead>』より前に配置します。
テーブルの基本構造については 『table / tr / td / th』 を、グループ化については 『thead / tbody / tfoot / caption』 をご覧ください。
対応ブラウザ
1 以降 ○
1 以降 ○
1 以降 ○
8 ○
7 ○
6 ○
12.1 以降 ○
11.1 以前 ×
1 以降 ○
Android Browser
4.4 以降 ○
4 以前 ×※ バージョン情報は MDN に基づいています。
セル結合の設計のコツ
colspanとrowspanを使ったテーブルは、設計を誤るとHTMLが壊れます。以下の点に注意してください。
| よくあるミス | 正しい対処法 |
|---|---|
| 結合したセルの隣に通常のセルを追加してしまう(列数が合わない) | 結合後の実際の列数を計算してから残りのtdを配置する |
| rowspanで下の行のtdを書き忘れる | rowspanで結合した行数分だけ、その列のtdを削除する |
| scope属性を省略してアクセシビリティが低下する | colspan/rowspanと組み合わせてscope="colgroup"等を使う |
<!-- 3列×3行のテーブルでcolspanとrowspanを使う例 -->
<table border="1">
<thead>
<tr>
<th scope="col">商品</th>
<!-- colspan="2" で「月別売上」が2列にまたがる -->
<th scope="colgroup" colspan="2">月別売上</th>
</tr>
<tr>
<!-- 上のtr内でcolspan="2"のthがあるため、ここには2列分のthを書く -->
<th scope="col">(空白)</th>
<th scope="col">1月</th>
<th scope="col">2月</th>
</tr>
</thead>
<tbody>
<tr>
<!-- rowspan="2" で「東京店」が2行にまたがる -->
<th scope="rowgroup" rowspan="2">東京店</th>
<td>¥120,000</td>
<td>¥135,000</td>
</tr>
<tr>
<!-- rowspan="2"のthがあるため、このtrにはtdが2つしかない -->
<td>¥98,000</td>
<td>¥110,000</td>
</tr>
</tbody>
</table>
複雑なセル結合では、事前にスプレッドシートなどでテーブルの形を視覚的に確認してから、HTMLを書くことをおすすめします。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。