2010-12-11 61 views
14

Tôi có một số div mà tôi muốn căn giữa theo chiều ngang và chiều dọc.Làm cách nào để căn giữa div theo chiều dọc?

Đối với vấn đề nằm ngang, mọi thứ đều tuyệt vời, nhưng tôi gặp sự cố với căn chỉnh theo chiều dọc.

Tôi cố gắng này:

#parent { 
    display: table; 
} 

#child { 
    display: table-row; 
    vertical-align: middle; 
} 

nhưng điều này không hoạt động.

+0

tôi đã thử google ...cảm ơn sự giúp đỡ của bạn – trrrrrrm

+0

kiểm tra câu trả lời của tôi để xem nó có phù hợp với bạn không .. @ra_htial .... yeah lứa tuổi câu hỏi cũ, nhưng vẫn là một trong những khó khăn cần được làm rõ – juanm55

+0

có thể trùng lặp của [Làm thế nào để theo chiều dọc trung tâm một div cho tất cả trình duyệt?] (http://stackoverflow.com/questions/396145/how-to-vertically-center-a-div-for-all-browsers) – Carpetsmoker

Trả lời

27

Nếu bạn chỉ phải hỗ trợ các trình duyệt hỗ trợ transform (hoặc nhà cung cấp phiên bản tiền tố), hãy sử dụng thủ thuật cũ kỳ lạ này để căn chỉnh các phần tử theo chiều dọc.

#child { 
    position: relative; 
    top: 50%; 
    transform: translateY(-50%); 
} 

Nếu bạn phải hỗ trợ các trình duyệt cũ, bạn có thể sử dụng kết hợp trong số này, nhưng họ có thể là một nỗi đau do sự khác biệt trong việc cung block vs table.

#parent { 
    display: table; 
} 

#child { 
    display: table-cell; 
    vertical-align: middle; 
} 

Nếu chiều cao của bạn là cố định và bạn cần phải hỗ trợ những, trình duyệt pesky thực sự cũ ...

#parent { 
    position: relative; 
} 

#child { 
    height: 100px; 
    position: absolute; 
    top: 50%; 
    margin-top: -50px; 
} 

Nếu chiều cao của bạn chưa được khắc phục, có một workaround.

See it on jsFiddle.

+0

cảm ơn rất nhiều bạn của tôi nhưng điều đó chỉ có tác dụng nếu tôi biết cái gì là #child chiều cao ... nhưng nó không phải luôn luôn giống nhau, ngón tay cái UP !! cảm ơn câu trả lời hữu ích của bạn !! – trrrrrrm

+0

http://jsfiddle.net/RQznA/ kiểm tra điều này ví dụ – trrrrrrm

+0

@ From.ME.to.YOU Xem [workaround] (http://www.jakpsatweb.cz/css/css-vertical-center-solution. html). Thật không may, IE6 + 7 làm cho các container bổ sung cần thiết. – alex

0

Trước hết, xử lý đánh dấu bảng không phải là bảng (có hiển thị: bảng và bạn bè) không phải là trình duyệt chéo. Tôi không biết bạn cần hỗ trợ những trình duyệt nào nhưng chắc chắn IE6 sẽ không làm điều này. Tuy nhiên, nếu trình duyệt được nhắm mục tiêu của bạn làm tất cả màn hình hỗ trợ: bảng Tôi có thể cung cấp cho bạn một số mẹo.

Phương pháp căn giữa theo chiều dọc mà bạn đang tìm kiếm (sử dụng bố cục bảng) phụ thuộc vào việc có TD với căn chỉnh dọc: giữa, sau đó bên trong đó một phần tử khối đơn sẽ nằm ở giữa. Vì vậy, tôi nghĩ rằng những gì bạn muốn là:

#parent { display:table-cell; vertical-align:middle; } 
#child { /* nothing necessary, assuming it's a DIV it's already display:block */ } 

Bạn có thể sử dụng bảng ô không có bảng và bàn xung quanh, trình duyệt cần các yếu tố gói bảng cần thiết cho bạn.

0

đây là một cách khác khi bạn không biết kích thước div bên trong hoặc bất cứ điều gì, bạn có thể sử dụng% ở đây và ở đó để sửa chữa các "trung" ....

ý tưởng là giá trị hàng đầu của bạn là một nửa chiều cao của phần tử con của bạn để tạo ra ảo giác định tâm

Dưới đây là các mã:

<div id="parent"> 
    <div id="child"> 
      hello 
    </div> 
</div> 

và cho phong cách:

#parent { 
    position: relative; 
    height: 300px; 
    width:200px; 
    background-color:green; 
} 

#child { 
    height: 50%; 
    width: 50%; 
    position:relative; 
    top:25%; 
    left:25%; 
    background-color:red; 
} 

đây bạn có thể nhìn thấy nó trong hành động http://jsfiddle.net/Wabxv/

+0

lưu ý rằng điều này sẽ căn giữa div trong khoảng trống có sẵn còn lại (nếu div cha có một số văn bản, cách này sẽ căn giữa trong không gian còn lại, không phải toàn bộ kích thước mục gốc ... cho vị trí tuyệt đối đó) – juanm55

+0

Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn nên đưa các phần quan trọng của câu trả lời vào đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – NathanOliver

+0

Đã sửa lỗi @NathanOliver cảm ơn những người đứng đầu! – juanm55

3

Có tài sản cha mẹ như, display:table và tài sản con như display: table-cellvertical-align: middle làm việc cho tôi.

Các vấn đề liên quan