Pertama-tama catatan yang vertical-align
hanya berlaku untuk sel tabel dan elemen tingkat inline.
Ada beberapa cara untuk mencapai keberpihakan vertikal yang mungkin memenuhi atau tidak memenuhi kebutuhan Anda. Namun saya akan menunjukkan kepada Anda dua metode dari favorit saya:
1. Menggunakan transform
dantop
.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>
Poin kuncinya adalah bahwa nilai persentase pada top
relatif terhadap height
blok yang berisi; Sedangkan nilai persentase pada transform
s relatif terhadap ukuran kotak itu sendiri (kotak pembatas).
Jika Anda mengalami masalah rendering font (font buram), perbaikannya adalah menambahkan perspective(1px)
ke transform
deklarasi sehingga menjadi:
transform: perspective(1px) translateY(-50%);
Perlu dicatat bahwa CSS transform
didukung di IE9 + .
2. Menggunakan inline-block
elemen (pseudo-)
Dalam metode ini, kami memiliki dua inline-block
elemen saudara yang disejajarkan secara vertikal di tengah oleh vertical-align: middle
deklarasi.
Salah satu dari mereka memiliki salah height
satu 100%
dari induknya dan yang lainnya adalah elemen yang kami inginkan yang ingin kami selaraskan di tengah.
.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>
Akhirnya, kita harus menggunakan salah satu metode yang tersedia untuk menghilangkan celah antara elemen-elemen inline-level .
position: absolute
mana - mana?