Trước hết lưu ý rằng vertical-align
chỉ á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 transform
và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 top
có liên quan đến height
khối chứa; Trong khi giá trị phần trăm trên transform
s 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 transform
khai 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-block
các yếu tố (giả)
Trong phương pháp này, chúng ta có hai inline-block
phần tử anh chị em được sắp xếp theo chiều dọc ở giữa bằng cách vertical-align: middle
khai báo.
Một trong số chúng có một height
trong 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?