Đây là điều tôi cần phải làm nhiều lần và một giải pháp nhất quán vẫn yêu cầu bạn thêm một chút đánh dấu phi ngữ nghĩa và một số hack cụ thể của trình duyệt. Khi chúng tôi nhận được hỗ trợ trình duyệt cho css 3, bạn sẽ có được định tâm thẳng đứng mà không phạm tội.
Để giải thích rõ hơn về kỹ thuật, bạn có thể xem bài viết mà tôi đã điều chỉnh từ đó , nhưng về cơ bản, nó liên quan đến việc thêm một yếu tố phụ và áp dụng các kiểu khác nhau trong IE và các trình duyệt hỗ trợ position:table\table-cell
các yếu tố không phải bảng.
<div class="valign-outer">
<div class="valign-middle">
<div class="valign-inner">
Excuse me. What did you sleep in your clothes again last night. Really. You're gonna be in the car with her. Hey, not too early I sleep in on Saturday. Oh, McFly, your shoe's untied. Don't be so gullible, McFly. You got the place fixed up nice, McFly. I have you're car towed all the way to your house and all you've got for me is light beer. What are you looking at, butthead. Say hi to your mom for me.
</div>
</div>
</div>
<style>
/* Non-structural styling */
.valign-outer { height: 400px; border: 1px solid red; }
.valign-inner { border: 1px solid blue; }
</style>
<!--[if lte IE 7]>
<style>
/* For IE7 and earlier */
.valign-outer { position: relative; overflow: hidden; }
.valign-middle { position: absolute; top: 50%; }
.valign-inner { position: relative; top: -50% }
</style>
<![endif]-->
<!--[if gt IE 7]> -->
<style>
/* For other browsers */
.valign-outer { position: static; display: table; overflow: hidden; }
.valign-middle { position: static; display: table-cell; vertical-align: middle; width: 100%; }
</style>
Có nhiều cách (hack) để áp dụng các kiểu trong các bộ trình duyệt cụ thể. Tôi đã sử dụng các bình luận có điều kiện nhưng nhìn vào bài viết được liên kết ở trên để thấy hai kỹ thuật khác.
Lưu ý: Có những cách đơn giản để lấy định tâm dọc nếu bạn biết trước một số độ cao, nếu bạn đang cố gắng căn giữa một dòng văn bản hoặc trong một số trường hợp khác. Nếu bạn có nhiều chi tiết hơn thì hãy ném chúng vào vì có thể có một phương pháp không yêu cầu hack trình duyệt hoặc đánh dấu phi ngữ nghĩa.
Cập nhật: Chúng tôi đang bắt đầu nhận hỗ trợ trình duyệt tốt hơn cho CSS3, mang cả hộp flex và biến đổi thành phương pháp thay thế để lấy định tâm dọc (trong số các hiệu ứng khác). Xem câu hỏi khác này để biết thêm thông tin về các phương pháp hiện đại, nhưng hãy nhớ rằng hỗ trợ trình duyệt vẫn còn sơ sài cho CSS3.