2011-12-23 26 views
12

Tôi đã thấy rằng trong khi phát triển trang web, việc định tâm theo chiều dọc một vùng chứa (chiều cao cố định) bên trong một vùng chứa chiều cao ngẫu nhiên luôn là một cơn ác mộng đối với nhà phát triển web (ít nhất là tôi). chiều rộng cố định) bên trong một thùng chứa có chiều rộng ngẫu nhiên, margin:0px auto; có xu hướng phục vụ một cách dễ dàng trong mô hình chuẩn.

Khi mọi thứ có thể đơn giản như vậy tại sao CSS không hoạt động với margin:auto 0px; khi nói đến việc định tâm một vùng chứa chiều cao cố định bên trong một vùng chứa chiều cao ngẫu nhiên? Có lý do cụ thể nào để làm như vậy không? Cảm ơn bạn đã thông tin chi tiết trước.Tại sao thuộc tính tự động cho lề không hoạt động theo chiều dọc trong khi nó hoạt động theo chiều ngang?

+3

http://phrogz.net/css/vertical-align/index.html cung cấp một số thông tin chi tiết: "Bố cục HTML theo truyền thống không được thiết kế để xác định hành vi theo chiều dọc. Theo bản chất của nó, nó mở rộng quy mô, và nội dung chảy đến một chiều cao thích hợp dựa trên chiều rộng có sẵn. Theo truyền thống, việc định cỡ và bố trí theo chiều ngang rất dễ dàng; kích thước theo chiều dọc và bố trí được bắt nguồn từ điều đó. " – justis

+0

true" nhưng vẫn còn, tôi có một cảm giác ruột nó có thể được cải thiện nhiều. Nó chỉ cảm thấy khó xử bạn không thể sử dụng dọc-align: trung, trừ khi container được hiển thị như bảng- – ptriek

+2

@jblasco: Tôi đã đọc trang bạn đã giới thiệu, nhưng có vẻ như tôi không tìm thấy câu trả lời thỏa đáng Lý do: HTML theo truyền thống chỉ có ý định hiển thị/chia sẻ dữ liệu văn bản đơn giản khi được phát minh tại CERN, nhưng sau đó đã có quá nhiều thay đổi khi bạn so sánh HTML truyền thống với HTML5. Sau đó, không phải là thời gian cao để thích ứng với những gì thúc đẩy sự dễ dàng truy cập? – ikartik90

Trả lời

13

Nó thực sự là một cơn ác mộng hơn bạn nghĩ, chỉ cần không sử dụng lề. vertical-align thực sự là những gì bạn nên dựa vào cho trung tâm chất lỏng dọc chiều cao. Tôi đã ném cùng một bản demo nhanh chóng để chứng minh quan điểm của tôi:

HTML:

<span></span><div id="any-height"></div> 

CSS:

* { margin: 0; padding: 0; } 
html, body { 
    height: 100%; 
    text-align: center; } 
span { 
    height: 100%; 
    vertical-align: middle; 
    display: inline-block; } 
#any-height { 
    background: #000; 
    text-align: left; 
    width: 200px; 
    height: 200px; 
    vertical-align: middle; 
    display: inline-block; } 

Xem: http://jsfiddle.net/Wexcode/jLXMS/

+1

ok, bạn có một điểm. align thẳng đứng không nhất thiết phải là cơn ác mộng, IE7 là, như là IE6. – ptriek

+0

Tôi đã sử dụng căn chỉnh dọc, nhưng không phục vụ giải pháp thỏa đáng ở hầu hết các địa điểm. Lý do: Vấn đề với 'dọc-align' là nó không tương thích tốt với tất cả các trình duyệt. Để tham khảo [kiểm tra liên kết này] (http://reference.sitepoint.com/css/vertical-align#compatibilitysection). Vì vậy, không có điểm nào. :( – ikartik90

+1

[Có các công cụ trên mạng có thể xác minh xem có gì đó hoạt động trên các trình duyệt khác không] (https://browserlab.adobe.com/en-us/index.html), vì vậy bạn không phải dựa vào các biểu đồ tự ý gắn nhãn những thứ như lỗi ... Tôi khá chắc chắn rằng điều này làm việc trong tất cả các trình duyệt chính, và nếu bạn đang tìm kiếm khả năng tương thích mở rộng, bạn nên kiểm tra [bài viết này] (http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block /) – Wex

6

Câu trả lời đúng cho câu hỏi của bạn là margin: auto 0 doesn 't làm việc theo cùng một cách mà margin: 0 auto hoạt động vì width: auto không hoạt động theo cách tương tự height: auto do es.

Lề tự động dọc hoạt động cho các phần tử được định vị hoàn toàn với chiều cao đã biết.

.parent { 
    position: relative; 
} 

.child { 
    position: absolute; 
    top: 0; right: 0; bottom: 0; left: 0; 
    width: 150px; 
    height: 150px; 
    margin: auto; 
} 
2

css ----------------

.aligncenter{ 
     display: -webkit-box; 
     display: -moz-box; 
     display: box; 
     -webkit-box-align: center; 
     -moz-box-align: center; 
     flex-align: center; 
     -webkit-box-pack: center; 
     -moz-box-pack: center; 
     flex-pack: center; 
} 

html ------------------ -------

<div class="aligncenter">

---your content appear at the middle of the parent div----

</div>

lưu ý ----------- lớp css này hoạt động với hầu hết tất cả các trình duyệt

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