まず、これvertical-align
はテーブルセルとインラインレベルの要素にのみ適用されます。
垂直方向の配置を実現するには、いくつかの方法がありますが、ニーズに合わない場合もあります。ただし、私のお気に入りから2つの 方法を紹介します。
1. transform
およびの使用top
.valign {
position: relative;
top: 50%;
transform: translateY(-50%);
/* vendor prefixes omitted due to brevity */
}
<div style="position: absolute; left: 50px; top: 50px;">
<div style="text-align: left; position: absolute;height: 56px;background-color: pink;">
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
重要な点は、パーセンテージ値がオンであることtop
を基準とheight
を含むブロックの。transform
sのパーセンテージ値は、ボックス自体(境界ボックス)のサイズに関連しています。
あなたが発生した場合、フォントレンダリングの問題(ぼやけフォント)を、修正が追加することですperspective(1px)
しtransform
、それはなるように宣言:
transform: perspective(1px) translateY(-50%);
CSS transform
がIE9 +でサポートされていることは注目に値します。
2. inline-block
(疑似)要素の使用
このメソッドには、2つの兄弟があります。 inline-block
、vertical-align: middle
宣言によって中央で垂直に配置された要素があります。
その一つは持っているheight
の100%
は親のおよび他のは、私たちの目的の要素を持つ私たちは途中でそれを揃えたかったです。
.parent {
text-align: left;
position: absolute;
height: 56px;
background-color: pink;
white-space: nowrap;
font-size: 0; /* remove the gap between inline level elements */
}
.dummy-child { height: 100%; }
.valign {
font-size: 16px; /* re-set the font-size */
}
.dummy-child, .valign {
display: inline-block;
vertical-align: middle;
}
<div style="position: absolute; left: 50px; top: 50px;">
<div class="parent">
<div class="dummy-child"></div>
<div class="valign" style="background-color: lightblue;">test</div>
</div>
</div>
最後に、使用可能な方法の 1つを使用して、インラインレベルの要素間のギャップを削除する必要があります。
position: absolute
どこでも使用している理由はありますか?