Tôi có một hình vuông có kích thước cố định và muốn đặt một hình ảnh có kích thước tùy ý bên trong sao cho nó được căn giữa theo chiều ngang và chiều dọc, sử dụng CSS. Theo chiều ngang là dễ dàng:* Liên kết hình ảnh dọc * hoàn hảo
.container { text-align: center }
Đối với phương thẳng đứng, giải pháp phổ biến là:
.container {
height: 50px;
line-height: 50px;
}
img {
vertical-align: middle;
}
Nhưng điều này là không hoàn hảo , tùy thuộc vào kích thước font chữ, hình ảnh sẽ đạt khoảng 2-4px quá xuống thấp. Để hiểu biết của tôi, điều này là bởi vì "trung" được sử dụng cho căn chỉnh dọc không thực sự là giữa, nhưng một vị trí cụ thể trên phông chữ gần với giữa. Giải pháp (hơi hacky) sẽ là:
container {
font-size: 0;
}
và tính năng này hoạt động trong Chrome và IE7, chứ không phải IE8. Chúng tôi hy vọng sẽ làm cho tất cả các dòng phông chữ cùng một điểm, ở giữa, nhưng nó có vẻ là hit-and-miss tùy thuộc vào trình duyệt và, có lẽ, phông chữ được sử dụng.
Giải pháp duy nhất tôi có thể nghĩ là để hack chiều cao dòng, làm cho nó ngắn hơn một chút, để làm cho hình ảnh xuất hiện ở đúng vị trí, nhưng nó có vẻ cực kỳ mong manh. Có giải pháp nào tốt hơn không?
Xem một bản demo của cả ba giải pháp ở đây: http://jsfiddle.net/usvrj/3/
Những người không có IE8 có thể tìm thấy ảnh chụp màn hình này hữu ích:
+1 chỉ để hỏi một câu hỏi tốt bằng văn bản với một bản demo rất gọn gàng! – bPratik
Tôi đã đạt được một cái gì đó tương tự bằng cách sử dụng jQuery và tính toán các lề trên tải trang. Không đẹp, nhưng nó hoạt động trong IE6 + & Co. – alxbrd
Bạn đã thử thêm 'display: table-cell;' vào vùng chứa chưa? Đó là sự hiểu biết của tôi rằng thuộc tính dọc thẳng đứng có thể có hai ý nghĩa khác nhau, một cho nội dung ô nội dung và một cho các phần tử nội tuyến. – Quantastical