Trước hết lưu ý rằng vertical-alignchỉ áp dụng cho các ô của bảng và các phần tử mức nội tuyến.
Có một số cách để đạt được sự sắp xếp theo chiều dọc mà có thể hoặc không thể đáp ứng nhu cầu của bạn. Tuy nhiên tôi sẽ chỉ cho bạn hai phương pháp từ mục yêu thích của tôi:
1. Sử dụng transformvà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>
Điểm mấu chốt là giá trị phần trăm trên topcó liên quan đến heightkhối chứa; Trong khi giá trị phần trăm trên transforms tương đối với kích thước của chính hộp (hộp giới hạn).
Nếu bạn gặp vấn đề kết xuất phông chữ (phông chữ mờ), cách khắc phục là thêm perspective(1px)vào transformkhai báo để nó trở thành:
transform: perspective(1px) translateY(-50%);
Điều đáng chú ý là CSS transform được hỗ trợ trong IE9 + .
2. Sử dụng inline-blockcác yếu tố (giả)
Trong phương pháp này, chúng ta có hai inline-blockphần tử anh chị em được sắp xếp theo chiều dọc ở giữa bằng cách vertical-align: middlekhai báo.
Một trong số chúng có một heighttrong 100%những cha mẹ của nó và cái còn lại là yếu tố mong muốn của chúng tôi mà chúng tôi muốn sắp xếp nó ở giữa.
.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>
Cuối cùng, chúng ta nên sử dụng một trong các phương thức có sẵn để loại bỏ khoảng cách giữa các yếu tố cấp độ nội tuyến .
position: absoluteở khắp mọi nơi?