ก่อนอื่นของบันทึกย่อทั้งหมดที่vertical-align
ใช้กับเซลล์ตารางและองค์ประกอบระดับแบบอินไลน์เท่านั้น
มีสองวิธีในการบรรลุการจัดตำแหน่งแนวตั้งซึ่งอาจหรืออาจไม่ตรงกับความต้องการของคุณ อย่างไรก็ตามฉันจะแสดงสอง วิธีจากรายการโปรดของฉัน:
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%);
มันเป็นมูลค่า noting CSS ที่transform
ได้รับการสนับสนุนใน IE9 +
2. การใช้inline-block
องค์ประกอบ (หลอก)
ในวิธีนี้เรามี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>
สุดท้ายเราควรใช้หนึ่งในวิธีการที่ใช้ได้เพื่อลบช่องว่างระหว่างองค์ประกอบแบบอินไลน์ระดับ
position: absolute
ทุกที่?