すべての場合において、vertical-align: middle;
はtd
期待どおりの動作をします。つまり、td
をその行の中央に揃え、 の内容全体をtd
垂直方向の中央 (デフォルト) に揃えて、上部と下部に等間隔を残します。
W3 仕様の内容は次のとおりです vertical-align: middle
。
セルの中心は、それがまたがる行の中心に揃えられます。
行の高さの計算:
「table-row」要素のボックスの高さは、ユーザー エージェントが行内のすべてのセルを利用できるようになると計算されます。これは、行の計算された「高さ」、行内の各セルの計算された「高さ」の最大値です。およびセルに必要な最小の高さ (MIN)。
CSS 2.1 では、セル ボックスの高さは、コンテンツに必要な最小の高さです。テーブル セルの 'height' プロパティは、行の高さに影響を与える可能性がありますが (上記参照)、セル ボックスの高さは増加しません。
行の高さよりも小さいセル ボックスには、余分な上部または下部のパディングが適用されます。
上記の結果、 と の高さはtr
100px にtd
なりますが、セルボックスはコンテンツに必要な高さ (img
高さ = 43px) しか占有しません。セル ボックスは行の高さよりも小さいため、上の画像のボックス 5 に示すように余分なパディングが追加され、コンテンツも中央に配置されます。
TDには画像のみがあります:
のみのimg
場合、コンテンツの高さは の高さと同じimg
です。それで真ん中に配置されます。
上の画像からわかるように、はコンテンツを中央に配置するため、明示的vertical-align: middle
に on を必要としません。img
td
TD にはインライン データのみがあります。
にまたはと inlinetd
しかない場合、コンテンツの高さはテキストのデフォルト (または指定された任意の )と等しくなります。この場合も、正しく位置合わせされます。span
span
div
line-height
line-height
td
テキスト コンテンツが最初の行を超えると (デモを参照)、 が(シアンの背景でマークされた) をtd
自動的に上に押し上げfirst-line
て、コンテンツ全体が (1 行だけでなく) 中央に配置されるようにします。 )。
TD にはイメージとスパンがあります。
内に animg
と a span
(インラインテキスト)を入れるとtd
、コンテンツの高さは 2 行目以降の the の高さと同じになりimg
ますline-height
。
この状況では、次の 2 つのケースが考えられます。
ケース 1 - img
タグが指定されていませ vertical-align
ん
この場合、は(デフォルト)img
に揃えられます。baseline
次に、td
コンテンツ全体を中央に揃えます。これは、コンテンツの上部と下部でtd
約28.5px (= (100-43)/2) のギャップを意味します。繰り返しますが、vertical-align
ontd
はジョブを実行し、内容を中央に配置します (つまり、上下に均等なギャップを残します)。img
ただし、高さが大きいため、テキストが押し下げられます。
img
高さを行の高さ (たとえば 10px) より小さくすると、 img
+を指定してもspan
中央に配置されることがわかります。
ケース 2 - img
タグがある vertical-align: middle
この場合もvertical-align
、td
はケース 1 で行ったことと同じことを行います。ただし、この場合のテキストは、行の にも配置されているため、中央近くにあります。img
middle
table {
border: solid 1px red;
}
td {
height: 100px;
width: 200px;
vertical-align: middle;
border: solid 1px green;
}
img {
height: 43px;
width: 43px;
border: solid 1px green;
}
.one td + td img {
vertical-align: middle;
}
.three td + td img {
height: 10px;
width: 10px;
}
.four img {
vertical-align: middle;
}
.five img + img{
height: 50px;
width: 50px;
}
td:first-line {
background-color: cyan;
}
div {
display: inline;
}
<table>
<tr class='one'>
<td>
<img src='http://static.jsbin.com/images/favicon.png' />
</td>
<td>
<img src='http://static.jsbin.com/images/favicon.png' />
</td>
</tr>
<tr class='two'>
<td>
<div>aaa</div>
<span>aaa</span>
</td>
<td>
<div>aaa</div>
<span>aaa aaaaaaa aaaaaaaa aaaaaaaa</span>
</td>
</tr>
<tr class='three'>
<td>
Case 1
<img src='http://static.jsbin.com/images/favicon.png' />
<span>Image + Span</span>
</td>
<td>
Case 1
<img src='http://static.jsbin.com/images/favicon.png' />
<span>Image + Span</span>
</td>
</tr>
<tr class='four'>
<td>
Case 2
<img src='http://static.jsbin.com/images/favicon.png' />
<span>Image + Span</span>
</td>
<td>
<img src='http://static.jsbin.com/images/favicon.png' />
<span>Image + Span + more text.......</span>
</td>
</tr>
<tr class='five'>
<td>
Case 3
<img src='http://static.jsbin.com/images/favicon.png' />
<img src='http://static.jsbin.com/images/favicon.png' />
<span>Image + Span text...</span>
</td>
<td>
<img src='http://static.jsbin.com/images/favicon.png' />
<span>Image + Span + more text.......</span>
</td>
</tr>
</table>