Pertama-tama catatan yang vertical-alignhanya 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 transformdantop
.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 toprelatif terhadap heightblok yang berisi; Sedangkan nilai persentase pada transforms relatif terhadap ukuran kotak itu sendiri (kotak pembatas).
Jika Anda mengalami masalah rendering font (font buram), perbaikannya adalah menambahkan perspective(1px)ke transformdeklarasi sehingga menjadi:
transform: perspective(1px) translateY(-50%);
Perlu dicatat bahwa CSS transform didukung di IE9 + .
2. Menggunakan inline-blockelemen (pseudo-)
Dalam metode ini, kami memiliki dua inline-blockelemen saudara yang disejajarkan secara vertikal di tengah oleh vertical-align: middledeklarasi.
Salah satu dari mereka memiliki salah heightsatu 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: absolutemana - mana?