Đây là một kỹ thuật để sắp xếp các thành phần nội tuyến bên trong cha mẹ , theo chiều ngang và chiều dọc cùng một lúc:
Căn dọc
1) Trong phương pháp này, chúng ta tạo ra một inline-block
phần tử (pseudo-) là đứa con đầu lòng (hoặc cuối cùng) của cha mẹ , và thiết lập của nó height
tài sản để 100%
thực hiện tất cả chiều cao của nó mẹ .
2) Ngoài ra, việc thêm vertical-align: middle
giữ các phần tử nội tuyến (-block) ở giữa không gian dòng. Vì vậy, chúng tôi thêm khai báo CSS đó vào phần tử con đầu tiên và phần tử của chúng tôi ( hình ảnh ).
3) Cuối cùng, để xóa ký tự khoảng trắng giữa các phần tử nội tuyến (-block) , chúng ta có thể đặt kích thước phông chữ của cha mẹ bằng 0 font-size: 0;
.
Lưu ý: Tôi đã sử dụng kỹ thuật thay thế hình ảnh của Nicolas Gallagher sau đây.
Những lợi ích là gì?
- Container ( cha mẹ ) có thể có kích thước động.
Không cần xác định rõ kích thước của thành phần hình ảnh.
Chúng ta có thể dễ dàng sử dụng phương pháp này để sắp xếp một <div>
yếu tố theo chiều dọc ; có thể có nội dung động (chiều cao và / hoặc chiều rộng). Nhưng lưu ý rằng bạn phải đặt lại thuộc font-size
tính của div
để hiển thị văn bản bên trong. Demo trực tuyến .
<div class="container">
<div id="element"> ... </div>
</div>
.container {
height: 300px;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.container:before { /* create a full-height inline block pseudo=element */
content: ' ';
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
#element {
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
font: 16px/1 Arial sans-serif; /* <-- reset the font property */
}
Đầu ra
Container đáp ứng
Phần này sẽ không trả lời câu hỏi vì OP đã biết cách tạo một thùng chứa đáp ứng. Tuy nhiên, tôi sẽ giải thích cách nó hoạt động.
Để làm cho chiều cao của phần tử container thay đổi theo chiều rộng của nó (tôn trọng tỷ lệ khung hình), chúng ta có thể sử dụng giá trị phần trăm cho thuộc tính trên / dưới padding
.
Một giá trị phần trăm trên đệm / dưới hoặc lợi nhuận là tương đối so với chiều rộng của khối chứa.
Ví dụ:
.responsive-container {
width: 60%;
padding-top: 60%; /* 1:1 Height is the same as the width */
padding-top: 100%; /* width:height = 60:100 or 3:5 */
padding-top: 45%; /* = 60% * 3/4 , width:height = 4:3 */
padding-top: 33.75%; /* = 60% * 9/16, width:height = 16:9 */
}
Đây là bản Demo trực tuyến . Nhận xét các dòng từ dưới cùng và thay đổi kích thước bảng để xem hiệu ứng.
Ngoài ra, chúng tôi có thể áp dụng padding
tài sản cho một đứa trẻ giả hoặc :before
/ :after
phần tử giả để đạt được kết quả tương tự. Nhưng lưu ý rằng trong trường hợp này, giá trị phần trăm trên padding
tương đối với chiều rộng của .responsive-container
chính nó.
<div class="responsive-container">
<div class="dummy"></div>
</div>
.responsive-container { width: 60%; }
.responsive-container .dummy {
padding-top: 100%; /* 1:1 square */
padding-top: 75%; /* w:h = 4:3 */
padding-top: 56.25%; /* w:h = 16:9 */
}
Bản thử nghiệm số 1 .
Bản trình diễn số 2 (Sử dụng :after
phần tử giả)
Thêm nội dung
Sử dụng padding-top
tài sản gây ra một không gian lớn ở trên cùng hoặc dưới cùng của nội dung, bên trong container .
Để khắc phục điều đó, chúng tôi có quấn nội dung bởi một yếu tố wrapper, loại bỏ yếu tố đó từ dòng chảy bình thường tài liệu bằng cách sử dụng định vị tuyệt đối , và cuối cùng là mở rộng wrapper (bu sử dụng top
, right
, bottom
và left
tài sản) để lấp đầy toàn bộ không gian của mẹ, các container .
Ở đây chúng tôi đi:
.responsive-container {
width: 60%;
position: relative;
}
.responsive-container .wrapper {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
}
Đây là bản Demo trực tuyến .
Kết hợp tất cả lại với nhau
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<img src="http://placehold.it/150x150" alt="">
</div>
</div>
.img-container {
text-align:center; /* Align center inline elements */
font: 0/0 a; /* Hide the characters like spaces */
}
.img-container:before {
content: ' ';
display: inline-block;
vertical-align: middle;
height: 100%;
}
.img-container img {
vertical-align: middle;
display: inline-block;
}
Đây là DEMO LÀM VIỆC .
Rõ ràng, bạn có thể tránh sử dụng ::before
phần tử giả để tương thích trình duyệt và tạo một phần tử là con đầu tiên của .img-container
:
<div class="img-container">
<div class="centerer"></div>
<img src="http://placehold.it/150x150" alt="">
</div>
.img-container .centerer {
display: inline-block;
vertical-align: middle;
height: 100%;
}
CẬP NHẬT DEMO .
Sử dụng max-*
tài sản
Để giữ hình ảnh bên trong hộp ở chiều rộng thấp hơn, bạn có thể đặt max-height
và thuộc max-width
tính trên hình ảnh:
.img-container img {
vertical-align: middle;
display: inline-block;
max-height: 100%; /* <-- Set maximum height to 100% of its parent */
max-width: 100%; /* <-- Set maximum width to 100% of its parent */
}
Dưới đây là DEMO CẬP NHẬT .