

* tbody 要素型 (HTML, XHTML 1)

[1] [DFN[[CODE(HTMLe)[tbody]] 要素型]]は、
[[行群]]の要素型の一つで、表の本体を表します。
すなわち、表の本体にあたる (見出しなどでない) 行の集合です。

[11]
仕様書:
- [[HTML 4]]
-- <IW:HTML4:"struct/tables.html#edef-TBODY">

[3] 表の本体が複数の主要構成部分から成るときには、
[CODE(HTMLe)[tbody]] を複数個使うことができます。
しかし、よく用いられる表では [CODE(HTMLe)[tbody]]
は一つだけであることが多いです。

HTML 4 など一部の HTML では、そのように [CODE(HTMLe)[tbody]]
の範囲が自明なときにはタグを省略できます。

[2]
:[[局所名]]:[CODE(HTMLe)[tbody]]
:[[名前空間名]]:[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]]
:[[開始タグ]]:省略可能 (HTML 4), 必須 (XHTML 1)
:[[終了タグ]]:省略可能 (HTML 4), 必須 (XHTML 1)
:[[内容模型]]:[CODE(SGML)[([CODE(HTMLe)[[[tr]]]]+)]]
:出現できる文脈:[CODE(HTMLe)[[[table]]]] 直下、
[CODE(HTMLe)[[[tfoot]]]] (あれば) の後
:[[属性]]:
,属性名	,属性値	,既定値	,説明	,状態	,出典
,[CODE(HTMLa)[[[align]]]]	,	,	,揃え	,[HTML4] [CODE(SGML)[%[[cellhalign]]]]
,[CODE(HTMLa)[[[bgcolor]]]]	,[CODE(SGML)[%[[Color]]]]	,	,背景色	,非標準
,[CODE(HTMLa)[[[char]]]]	,	,	,揃える文字	,[HTML4] [CODE(SGML)[%cellhalign]]
,[CODE(HTMLa)[[[charoff]]]]	,	,	,揃える文字	,[HTML4] [CODE(SGML)[%cellhalign]]
,[CODE(HTMLa)[[[class]]]]	,	,	,[[級]]	,[HTML4] %[[coreattr]]
,[CODE(HTMLa)[[[dir]]]]	,	,	,[[書字方向]]	,[HTML4] %[[i18n]]
,[CODE(HTMLa)[[[id]]]]	,	,	,一意識別子	,[HTML4] %coreattr
,[CODE(HTMLa)[[[lang]]]]	,	,	,[[自然言語]]	,[HTML4] %i18n
,[CODE(HTMLa)[[[xml]]:lang]]	,	,	,自然言語	,[XHTML1]
,[CODE(HTMLa)[[[onclick]]]]	,	,	,	,[HTML4] %[[events]]
,[CODE(HTMLa)[[[ondblclick]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onkeydown]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onkeypress]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onkeyup]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmousedown]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmousemove]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmouseout]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmouseover]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[onmouseup]]]]	,	,	,	,[HTML4] %events
,[CODE(HTMLa)[[[style]]]]	,	,	,スタイル情報	,[HTML4] %coreattr
,[CODE(HTMLa)[[[title]]]]	,	,	,注釈的題	,[HTML4] %coreattr
,[CODE(HTMLa)[[[valign]]]]	,	,	,垂直配置	,[HTML4] [CODE(SGML)[%[[cellvalign]]]]
,[CODE(XMLa)[[[xmlns]]]]	,[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] 固定	,==	,[[名前空間名]]	,W3C 勧告	,[[XHTML m12n]]


[9] [CODE(HTMLe)[tbody]], [CODE(HTMLe)[[[thead]]]],
[CODE(HTMLe)[[[tfoot]]]] は同じ数の[[列]]を含まなければなりません。

[[#comment]]


** タグの最小化

[4] [CODE(HTMLe)[tbody]] をはじめとする[[行群]]要素型を使うと、
複雑な表であっても正確に記述できますが、そのタグが必須であるとすると、
簡単な表であってもマークが複雑になってしまい不便です。

そこで、 HTML の表の多くの仕様・実装では、 [CODE(HTMLe)[tbody]]
の開始タグおよび終了タグを (自明であれば) 省略できるとしています 
(>>7)。

たとえば、
,#12	,大きな窓	,2004年2月
,#25	,小さな鼠	,2002年8月
,#56	,野原の左	,2000年3月

という表は、
[PRE(HTML)[
<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>
]PRE]

とマークしますが、タグが省略できるなら、
[PRE(HTML)[
<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>
]PRE]

になります。

[7] 開始タグが省略できる条件は、より正確には、 HTML 4 仕様書によれば
- [CODE(HTMLe)[tbody]] が一つだけであり、かつ
- [CODE(HTMLe)[[[thead]]]] も [CODE(HTMLe)[[[tfoot]]]] もない

ときだけです。終了タグはいつでも省略できます。

[8] てことは、
[PRE(HTML)[
<table>
<thead>
<tr/>
</thead>
<tr/>
</table>
]PRE]

は駄目になります。 SGML 的には無問題な気がするけどどうですか? 

HTML 4 仕様書には更に[Q[適合 UA は後方互換性のためにこの規則に従わなければなりません]]と書かれていますが、関係あるのでしょうか。

[[#comment]]

[5] ところで、 [[XML]] はタグの省略を認ていないので、
[[XHTML]] ではこの機能が実現できません。そこで、
[[XHTML 1]] では [CODE(HTMLe)[table]] 要素の直下に
[CODE(HTMLe)[tr]] 要素を入れることを認めています。

ですから、 XHTML 1 でも >>4 の2例は共に妥当になり得ますが、
前例と後例では異なる構造を持つデータであると見なされてしまいます。

(これによって簡単な表と複雑な表をまとめて処理できなくなってしまうため、 
XHTML 1 では [CODE(HTMLe)[tbody]] 
を省略するべきではないという意見があります。)

[[#comment]]


** レンダリング

[6] HTML 4 仕様書は、レンダリングの例として、表が一画面に収まりきらないときに
[CODE(HTMLe)[tbody]] 部分だけを scroll 
可能にすることに触れています。

[[#comment]]


** 例

[10] [CODE(HTMLe)[[[table]]]] の使用例も参照されたし。

[[#comment]]


** メモ

[12]
HTML 4 の [[DTD]] の[[注釈]]には
[Q[Use multiple TBODY sections when rules are needed between groups of table rows.]]
とアドバイス(?)があります。
([[名無しさん]] [sage])

[13]
[CITE[Bug 30378 &#8211; Parser should not add <tbody> to HTML 3.2 tables]] ([CODE[2007-02-10 13:37:47 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=30378>
([[名無しさん]])

[14]
[CITE@ja[hxxk.jp - CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips]] ([[真琴]] 著, [CODE[2007-03-18 23:26:06 +09:00]] 版) <http://hxxk.jp/2007/03/18/2000>
([[名無しさん]] [WEAK[2007-03-18 23:20:37 +00:00]])


[15]
[CITE[Bug 455043 &#8211; remove HTML 3 quirks mode]] ([TIME[2008-09-15 22:19:34 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=455043>
([[名無しさん]])


[[#comment]]


* メモ

[16] [CITE@en[Let HTMLTableElement create*() and insertRow() return specific types · whatwg/html@93cb3d6]]
([TIME[2015-12-01 11:39:17 +09:00]] 版)
<https://github.com/whatwg/html/commit/93cb3d61526cf956a739c57398760dc8a3a633bd>

[17] [CITE@ja[hxxk.jp - CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips]] ([[望月真琴]] 著, [TIME[2015-12-24 22:51:48 +09:00]] 版) <http://web.archive.org/web/20120517000214/http://hxxk.jp/2007/03/18/2000>