Tôi biết câu hỏi này đã cũ, nhưng tôi đã tìm thấy giải pháp hoàn hảo cho tôi.
Tôi thêm css này vào div mà tôi muốn căn giữa:
div:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
}
Điều này hoạt động mọi lúc và nó sạch sẽ.
Chỉnh sửa: Chỉ vì mục đích hoàn thành, tôi sử dụng scss và tôi có một hỗn hợp tiện dụng mà tôi đưa vào cho mọi phụ huynh có con trực tiếp mà tôi muốn căn giữa theo chiều dọc:
@mixin vertical-align($align: middle) {
&:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: $align;
font-size: 0;
}
& > * {
vertical-align: $align;
font-size: 14px;
}
}
Giải thích đầy đủ:
div:before
sẽ thêm một phần tử bên trong div, nhưng trước bất kỳ phần tử nào trong số các phần tử con của nó. Khi sử dụng :before
hoặc :after
chúng ta phải sử dụng một content:
khai báo nếu không sẽ không có gì xảy ra, nhưng đối với mục đích của chúng ta, nội dung có thể để trống. Sau đó, chúng tôi yêu cầu phần tử cao bằng phần tử gốc của nó, miễn là chiều cao phần tử gốc của nó được xác định và phần tử này ít nhất là khối nội tuyến. vertical-align
xác định vị trí dọc của bản thân liên quan đến cha mẹ, trái ngược với vị trí text-align
đó hoạt động khác.
Các @mixin
tuyên bố dành cho người dùng sass và nó sẽ được sử dụng như thế này:
div {
@include vertical-align(middle)
}