tbody

tbody

tbody 要素型 (HTML, XHTML 1)

[1] tbody 要素型は、 行群の要素型の一つで、表の本体を表します。 すなわち、表の本体にあたる (見出しなどでない) 行の集合です。

[11] 仕様書:

[3] 表の本体が複数の主要構成部分から成るときには、 tbody を複数個使うことができます。 しかし、よく用いられる表では tbody は一つだけであることが多いです。

HTML 4 など一部の HTML では、そのように tbody の範囲が自明なときにはタグを省略できます。

[2]

局所名
tbody
名前空間名
http://www.w3.org/1999/xhtml
開始タグ
省略可能 (HTML 4), 必須 (XHTML 1)
終了タグ
省略可能 (HTML 4), 必須 (XHTML 1)
内容模型
(tr+)
出現できる文脈
table 直下、 tfoot (あれば) の後
属性
属性名属性値既定値説明状態出典
align揃え[HTML4] %cellhalign
bgcolor%Color背景色非標準
char揃える文字[HTML4] %cellhalign
charoff揃える文字[HTML4] %cellhalign
class[HTML4] %coreattr
dir書字方向[HTML4] %i18n
id一意識別子[HTML4] %coreattr
lang自然言語[HTML4] %i18n
xml:lang自然言語[XHTML1]
onclick[HTML4] %events
ondblclick[HTML4] %events
onkeydown[HTML4] %events
onkeypress[HTML4] %events
onkeyup[HTML4] %events
onmousedown[HTML4] %events
onmousemove[HTML4] %events
onmouseout[HTML4] %events
onmouseover[HTML4] %events
onmouseup[HTML4] %events
styleスタイル情報[HTML4] %coreattr
title注釈的題[HTML4] %coreattr
valign垂直配置[HTML4] %cellvalign
xmlnshttp://www.w3.org/1999/xhtml 固定名前空間名W3C 勧告XHTML m12n

[9] tbody, thead, tfoot は同じ数のを含まなければなりません。

タグの最小化

[4] tbody をはじめとする行群要素型を使うと、 複雑な表であっても正確に記述できますが、そのタグが必須であるとすると、 簡単な表であってもマークが複雑になってしまい不便です。

そこで、 HTML の表の多くの仕様・実装では、 tbody の開始タグおよび終了タグを (自明であれば) 省略できるとしています (>>7)。

たとえば、

#12大きな窓2004年2月
#25小さな鼠2002年8月
#56野原の左2000年3月

という表は、

<table><tbody>
<tr><td>#12</td> <td>大きな窓</td> <td>2004年2月</td></tr>
<tr><td>#25</td> <td>小さな鼠</td> <td>2002年8月</td></tr>
<tr><td>#56</td> <td>野原の左</td> <td>2000年3月</td></tr>
</tbody></table>

とマークしますが、タグが省略できるなら、

<table>
<tr><td>#12</td> <td>大きな窓</td> <td>2004年2月</td></tr>
<tr><td>#25</td> <td>小さな鼠</td> <td>2002年8月</td></tr>
<tr><td>#56</td> <td>野原の左</td> <td>2000年3月</td></tr>
</table>

になります。

[7] 開始タグが省略できる条件は、より正確には、 HTML 4 仕様書によれば

ときだけです。終了タグはいつでも省略できます。

[8] てことは、

<table>
<thead>
<tr/>
</thead>
<tr/>
</table>

は駄目になります。 SGML 的には無問題な気がするけどどうですか?

HTML 4 仕様書には更に適合 UA は後方互換性のためにこの規則に従わなければなりませんと書かれていますが、関係あるのでしょうか。

[5] ところで、 XML はタグの省略を認ていないので、 XHTML ではこの機能が実現できません。そこで、 XHTML 1 では table 要素の直下に tr 要素を入れることを認めています。

ですから、 XHTML 1 でも >>4 の2例は共に妥当になり得ますが、 前例と後例では異なる構造を持つデータであると見なされてしまいます。

(これによって簡単な表と複雑な表をまとめて処理できなくなってしまうため、 XHTML 1 では tbody を省略するべきではないという意見があります。)

レンダリング

[6] HTML 4 仕様書は、レンダリングの例として、表が一画面に収まりきらないときに tbody 部分だけを scroll 可能にすることに触れています。

[10] table の使用例も参照されたし。

メモ

[12] HTML 4 の DTD注釈には Use multiple TBODY sections when rules are needed between groups of table rows. とアドバイス(?)があります。 (名無しさん [sage])

[13] Bug 30378 &#8211; Parser should not add <tbody> to HTML 3.2 tables (2007-02-10 13:37:47 +09:00 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=30378> (名無しさん)

[14] hxxk.jp - CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips (真琴 著, 2007-03-18 23:26:06 +09:00 版) <http://hxxk.jp/2007/03/18/2000> (名無しさん 2007-03-18 23:20:37 +00:00)

[15] Bug 455043 &#8211; remove HTML 3 quirks mode ( 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=455043> (名無しさん)

メモ

[16] Let HTMLTableElement create*() and insertRow() return specific types · whatwg/html@93cb3d6 ( 版) <https://github.com/whatwg/html/commit/93cb3d61526cf956a739c57398760dc8a3a633bd>

[17] hxxk.jp - CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips (望月真琴 著, 版) <http://web.archive.org/web/20120517000214/http://hxxk.jp/2007/03/18/2000>