CSS - tableのwidthはどう解釈されるか
tableにCSSでwidthを指定した場合,どう解釈されるかのテストです。DOCTYPEはXHTML 1.0 Strict,XML宣言は省略しています。
Tried at 2007-06-06
まず,tableのマークアップは次の通り
<table>
<col class="col1" />
<col class="col2" />
<col class="col3" />
<col class="col4" />
<col class="col5" />
<tr>
<th scope="col">項目1</th>
<th scope="col">項目2</th>
<th scope="col">項目3</th>
<th scope="col">項目4</th>
<th scope="col">項目5</th>
</tr>
<tr>
<td>data11</td>
<td>data21</td>
<td>data31</td>
<td>data41</td>
<td>data51</td>
</tr>
......
</table>
tableにwidthを絶対指定
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
table {
width: 500px;
}
tableにwidthを絶対指定し,各セルにpaddingを指定
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
table {
width: 500px;
}
table th,
table td {
padding: 3px 10px;
}
tableにwidthを相対指定し,各セルにpaddingを指定
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
div.section {
width: 500px;
padding: 10px;
}
table {
width: 100%;
}
table th,
table td {
padding: 3px 10px;
}
tableにwidthを相対指定し,特定の列にwidthを絶対指定
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
div.section {
width: 500px;
padding: 10px;
}
table {
width: 100%;
}
table col.col1 {
width: 70px;
}
table col.col5 {
width: 150px;
}
table th,
table td {
border: solid 4px #999;
padding: 3px 10px;
}

- Firefox2ではセルのborderの半分とpaddingが列のwidthに含まれている。Opera9,Safari2,Netscape7も同様。

- IE6,7ではセルのpaddingが列のwidthに含まれていない。項目1の幅は90px,項目5の幅は170pxある。
- 外側のborderはtableに指定しないとダメ。
tableにmarginをとり,widthを相対指定し,特定の列にwidthを絶対指定(1)
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
div.section {
width: 600px;
padding: 10px;
}
table {
margin-left: 100px;
width: 100%;
}
table col.col1 {
width: 70px;
}
table col.col5 {
width: 150px;
}
table th,
table td {
padding: 3px 10px;
}
tableにmarginをとり,widthを相対指定し,特定の列にwidthを絶対指定(2)
(1)を修正,tableの幅を83.33%としてみる。(500÷600=0.8333…)
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
div.section {
width: 600px;
padding: 10px;
}
table {
margin-left: 100px;
width: 83.33%;
}
table col.col1 {
width: 70px;
}
table col.col5 {
width: 150px;
}
table th,
table td {
padding: 3px 10px;
}
- table幅の相対指定は親要素の幅に対して行われている。
tableにwidthを指定せず,各列にwidth, 各セルにborder, paddingを指定
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
table col.col1 {
width: 70px;
}
table col.col2,
table col.col3,
table col.col4 {
width: 100px;
}
table col.col5 {
width: 150px;
}
table th,
table td {
border: solid 4px #999;
padding: 3px 10px;
}

- Firefox2ではセルのborderの半分とpaddingが列のwidthに含まれている。Opera9,Safari2,Netscape7も同様。

- IE6,7ではセルのpaddingが列のwidthに含まれていない。項目1の幅は90px,項目5の幅は170pxある。
tableにwidthを指定せず各セルにwidth, border, paddingを指定
| 項目1 |
項目2 |
項目3 |
項目4 |
項目5 |
| data11 |
data21 |
data31 |
data41 |
data51 |
| data12 |
data22 |
data32 |
data42 |
data52 |
| data13 |
data23 |
data33 |
data43 |
data53 |
table th,
table td {
width: 100px;
border: solid 4px #999;
padding: 3px 10px;
}
- width, padding, borderは重ならない。通常のBoxモデルと同じ。