【html・CSS】table・tdの幅(width)の仕様と指定方法
tableやtdの幅って縮んだり伸びたり、指定した通りの幅にならなかったりとよくわからないですよね?
table・tdの幅の仕様と指定方法についてまとめました。
下記関連記事も参考にしてください。
目次
tableにwidthを指定しないとき
内容量に合わせて自動で幅が調整される
内容量が少ないときは幅の小さい表になります。
あああ | いいい |
内容量が多いときは親の幅いっぱいの表になります。親の幅を超えません。
あああああああああああああああああああああああああああ | いいいいいいいいいいいいいいいいいいいいいいいいいいい |
margin:autoで中央寄せができる
margin:autoで中央寄せするには本来widthの指定が必須ですが、tableに限ってはwidthがなくても中央寄せ可能です。
マス1 | マス2 |
<style>
.example2{
margin: auto;
}
</style>
<table border="1" class="example2">
<tr>
<td>マス1</td><td>マス2</td>
</tr>
</table>
CSSやhtmlの基本をしっかり理解すると、この記事の内容もより理解できるようになりますよ。
↓CSSやhtmlを楽しく学べるようにマンガを描きましたのでゼヒご覧ください↓
↑「副業してもう少し稼ぎたい!」というかたのために副業の方法も解説しています。
table幅指定方法
下記の方法でtableの幅を指定できます。親の幅を超えることがあります。
html5からはCSSでの指定が推奨されています。
【html】width属性
htmlだけで幅を指定するにはwidth属性を指定します。
width属性は基本的に単位をつけません。px指定です。
マス1 | マス2 |
<table width="250" border="1">
<tr>
<td>マス1</td><td>マス2</td>
</tr>
</table>
一応%をつけることで%指定も可能です。emやvwなどの単位は指定不可能です。
マス1 | マス2 |
<table width="50%" border="1">
<tr>
<td>マス1</td><td>マス2</td>
</tr>
</table>
【CSS】width
CSSで幅を指定するにはwidthを指定します。
単位は必須です。
マス1 | マス2 |
<style>
.example{
width: 250px;
}
</style>
<table border="1" class="example">
<tr>
<td>マス1</td><td>マス2</td>
</tr>
</table>
CSSのwidthについて詳しくはこちら↓
widthにborderが含まれる
divなどではwidthにborderは含まれませんが、tableの場合はwidthにborderが含まれます。
マス1 | マス2 |
<style>
.example3{
width: 200px;
border: 10px solid #333;
}
</style>
<table class="example3">
<tr>
<td>マス1</td><td>マス2</td>
</tr>
</table>
上記は線の幅10pxで全体の幅200pxを指定しています。この場合線の内側のサイズは両端の線の幅を引いた180pxになります。
td(列)に幅widthを指定しないとき
以下tdについて解説しますが、thも同じです。
列の中で一番長いテキストに合わせて自動で幅が調整される
table同様、内容量で幅が大きくなります。その基準は列の中で一番長い箇所が基準となります。
なお、br等で改行した場合、その一行の長さが基準となります。
ああああああああああ | いいいい | うううううううう |
あ | い | う |
あああ | いいいいいいい | ううう |
<table border="1">
<tr>
<td>ああああああああああ</td><td>いいいい</td><td>うううううううう</td>
</tr>
<tr>
<td>あ</td><td>い</td><td>う
</td>
</tr>
<tr>
<td>あああ</td><td>いいいいいいい</td><td>ううう</td>
</tr>
</table>
tdの幅指定方法
【html】width属性
htmlだけで幅を指定するにはwidth属性を指定します。
width属性は基本的に単位をつけません。px指定です。
マス1 | マス2 |
<table border="1">
<tr>
<td width="250">マス1</td><td>マス2</td>
</tr>
</table>
一応%をつけることで%指定も可能です。emやvwなどの単位は指定不可能です。
%はtable幅を基準とした割合のサイズとなります。
マス1 | マス2 |
<table width="250px" border="1">
<tr>
<td width="70%">マス1</td><td>マス2</td>
</tr>
</table>
【CSS】width
CSSで幅を指定するにはwidthを指定します。
単位は必須です。
マス1 | マス2 |
<style>
.example4{
width: 200px;
}
</style>
<table border="1">
<tr>
<td class="example4">マス1</td><td>マス2</td>
</tr>
</table>
widthにpadding・borderを含まない
tableではwidthにborderが含まれますが、tdはwidthにborder・paddingを含みません。
マス1 | マス2 |
<style>
.example5{
width: 200px;
border: 10px solid #333;
padding: 10px;
}
</style>
<table>
<tr>
<td class="example5">マス1</td><td>マス2</td>
</tr>
</table>
上記はwidth: 200px、線の幅10px、padding10px指定しており、線を含んだ全体のサイズは240pxになっています。
「box-sizing: border-box」を指定すればwidthにpadding・borderを含めることができます。
td幅の調整
td幅の一部を指定したとき
指定した列だけ指定サイズになり、残りはテキスト幅に合わせて幅が変わります。
下記は左の列にwidth="100"を指定した例です。
widthを指定していない真ん中と右は内容量に合わせて変化します。
width100 | いいいい | うううううううううううううううう |
あ | い | う |
あああ | いいいいいいいいいいいいいい | ううう |
<table border="1">
<tr>
<td width="100">width100</td><td>いいいい</td><td>うううううううううううううううう</td>
</tr>
<tr>
<td>あ</td><td>い</td><td>う
</td>
</tr>
<tr>
<td>あああ</td><td>いいいいいいいいいいいいいい</td><td>ううう</td>
</tr>
</table>
td幅の合計値とtable幅があっていないとき
table幅が優先され、そのうえで指定された数値の割合に合わせて変化します。
ああああああああああ | いいいい | うううううううううううううううう |
<table border="1" width="250">
<tr>
<td width="100">ああああああああああ</td>
<td width="50">いいいい</td>
<td width="200">うううううううううううううううう</td>
</tr>
</table>
上記の場合tableのwidthに250pxが指定されその通りになっています。
tdのwidthは100,50,200と合計が350でありtable幅を超えています。
このとき指定された幅の割合2:1:4に合わせて幅が再調整されます。
そのうえ内容量によってtdに多少変化します。
かなりややこしいのでtable幅とtdの合計値は合わせましょう。
td幅の固定方法
tableに「width」と「table-layout: fixed」を指定します。
「table-layout: fixed」はテキスト量による自動調整をなくします。
日本語の場合、基本的にはwidthの指定でちゃんと固定されます。
英語の場合、まとまりができるためwidthが無視される場合があります。
そんなときは「table-layout: fixed」が役に立ちます。
table-layout: fixed指定なし
width="100" | いいいいい | うううううううううううううううううううううううう |
table-layout: fixed指定あり
width="100" | いいいいい | うううううううううううううううううううううううう |
<style>
.example6{
width: 100%;
table-layout: fixed;
}
.example6 td:first-child{
width: 100px;
}
</style>
<table class="example6" border="1">
<tr>
<td>width="100"</td>
<td>いいいいい</td>
<td>うううううううううううううううううううううううう</td>
</tr>
</table>
英字を途中で折り返すには「word-wrap: break-word」の指定も必要です。
tdを均等幅にする方法
tableに「width」と「table-layout: fixed」を指定します。
「table-layout: fixed」はテキスト量による自動調整をなくします。
そのうえでwidthを指定しないtdを均等幅に調整します。
table-layout: fixed指定なし
ああああああああああああああああああ | いいいいい | うううううううううううううううううううううううう |
table-layout: fixed指定あり
ああああああああああああああああああ | いいいいい | うううううううううううううううううううううううう |
<style>
.example7{
width: 100%;
table-layout: fixed;
}
</style>
<table class="example7" border="1">
<tr>
<td>ああああああああああああああああああ</td>
<td>いいいいい</td>
<td>うううううううううううううううううううううううう</td>
</tr>
</table>
td内テキストを折り返させない方法
「white-space: nowrap」を指定します。
下記は一列目のtdにwhite-space: nowrapを指定した例です。
ああああああああああああああああああ | いいいいい | うううううううううううううううううううううううう |
<style>
.example8 td:first-child{
white-space: nowrap;
}
</style>
<table class="example8" border="1">
<tr>
<td>ああああああああああああああああああ</td>
<td>いいいいい</td>
<td>うううううううううううううううううううううううう</td>
</tr>
</table>
まとめ
table、tdはwidth属性かCSSのwidthで幅を調節する。
widthについてtableはborderを含み、tdは含まない。
tableに「width」と「table-layout: fixed」を指定するとテキスト幅による自動調整がなくなる。これにより幅の固定化や、均等化が可能。
以上、table・tdの幅の仕様と指定方法でした。
「この記事の内容がよくわからなかった…」「なんかうまくいかなかった…」というかたは下記記事↓でhtmlとCSSの基本を学びましょう。
わからないまま突き進むより基本を学ぶのが結局近道です。