tbody要素(table body)は表の本体を示し、複数の行を一つのまとまりとして扱いたい場合に tr要素を囲んで行をグループ化します。tbody要素内には、必ず1個以上の tr要素を含める必要がありますが、HTML4 の仕様では tbody要素の開始タグと終了タグを省略可能(UA は tbody要素の記述が省略された場合、そこに tbody要素があると見なす)で、XHTML では tbody要素の代わりに tr要素を記述できるため、table要素の内容には tbody要素を含めることなく、直接 tr要素を記述することができます。
本体部分以外にもヘッダ部は thead要素, フッタ部は tfoot要素でそれぞれグループ化することができます。グループ化することによって、UA は表が一画面に収まらない場合、ヘッダ部とフッタ部を一画面内に固定し、本体部分はその間にスクロールさせて表示することが期待されます。また、印刷時に表が複数毎にまたがるような場合にも、用紙の全ページにヘッダ、フッタ部分のみを繰り返し付けることが期待されます。しかしながら、まだそのような振る舞いを行う実装をした UA はありません。
tbody要素がまとめた行に含まれるセルに対して、内容の幅寄せやテキストの桁揃えを指定します。多くの視覚環境の UA で行揃えの初期値は td要素が "left" に、th要素が "center" に設定されています。値には次の5つのキーワードがあります。キーワードは半角アルファベットの大文字・小文字が区別されません(case-insensitive)。
char属性で指定した特定の文字を基準に揃えて表示するalign属性は非推奨ではありませんが、td要素, th要素の各セルをセレクタに CSS の text-alignプロパティで同様の表現に代替できます。
align属性の値に "char" を指定した場合にセル内の位置揃えの軸となる文字を指定します。たとえば、日本語や英語であればピリオド(.)、フランス語であればカンマ(,)のように lang属性(XHTML では xml:lnag属性)で指定した言語に対応する小数点を指定することが可能です。"<tbody align="char" char=".">..." のように指定すれば、セル内の文字がピリオド(.)に合わせて揃えられることが期待されます(現状、char属性に対応している UA はありません)。
char属性により位置揃えが指定された場合、charoff属性でその文字から水平方向にどの位置までずらして表示するかを指定します。たとえば、小数点以下2桁で揃えたい場合は、"<tbody align="char" char="." charoff="2">..." と指定します。
また、文字揃えの際にずらす方向は dir属性による書字方向に依存します。dir属性の値が "ltr" の場合、左の余白からずれます。dir属性の値が "rtl" の場合、右の余白からずれます(仕様では char属性、及び charoff属性は必ずしもサポートする必要は無いとされているため対応している UA はありません)。
tbody要素がまとめた行に含まれるセルに対して、内容の垂直(上下)方向の揃え方を指定します。値には次の4つのキーワードがあります。キーワードは半角アルファベットの大文字・小文字が区別されません(case-insensitive)。
valign属性は非推奨ではありませんが、td要素, th要素の各セルをセレクタに CSS の vertical-alignプロパティで同様の表現に代替できます。