2012-01-09 81 views
6

Giả sử có 6 div ở mặt còn lại.Tự động điều chỉnh chiều cao div bằng CSS

div thứ nhất, thứ 2 và thứ 3 có chiều cao cố định, ví dụ: 25px, 100px và 25px. Div thứ tư là khu vực nội dung và phải là div điều chỉnh tự động. div thứ 5 có một số nội dung và chiều cao tối thiểu là 100px (chiều cao KHÔNG cố định). Div thứ 6 là chân trang có chiều cao cố định, ví dụ: 25px.

divs thứ 5 và thứ 6 nên luôn trên dưới cùng của trang (KHÔNG dính)

Không có vấn đề khi lần thứ 4 div (div_auto_height) có rất nhiều nội dung và trang web chỉ là miễn hoặc lâu hơn hơn màn hình.

Sự cố xảy ra khi trang ngắn hơn màn hình và không gian trống xuất hiện sau div thứ 6. Sau đó, div thứ 5 và thứ 6 không phải là nơi mà chúng được mong đợi.

This is the normal case

Vấn đề sẽ được giải quyết nếu người ta có thể có được chiều cao của div 4 (div_auto_height) tự động điều chỉnh để lấp đầy khoảng trống.

This is what we need to have

Tôi đã cố gắng để giải quyết vấn đề này bằng nhiều cách mà không có một giải pháp phù hợp.

giải pháp Không làm việc:

  • Có độ phân giải màn hình khác nhau, vì vậy min-height không hoạt động với màn hình lớn mà không làm trang rất lâu cho màn hình rộng nhỏ hoặc .
  • tôi đã không thể có được tài sản định vị trên và dưới hoạt động đúng vì nó làm cho các div 5 và 6 tới trên 4 div (div_auto_height)

Đây là một khuôn mẫu để sửa đổi của bạn:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head><title>No title</title> 
<style type="text/css"> 

html { 
    height: 100%; 
} 

body { 
    height: 100%; 
    margin: 0; 
} 

#div1 { 
    height: 25px; 
    background-color: #123456; 
} 

#div2 { 
    height: 100px; 
    background-color: #345678; 
} 

#div3 { 
    height: 25px; 
    background-color: #567890; 
} 

#div_auto_height { 
    height: auto ; 
    background-color: #789012; 
} 

#div5 { 
    min-height: 100px; 
    background-color: #9; 
} 

#div6 { 
    height: 25px; 
    background-color: #123456; 
} 

</style> 
</head> 
<body> 
    <div id="div1">Div 1</div> 
    <div id="div2">Div 2</div> 
    <div id="div3">Div 3</div> 
    <div id="div_auto_height">This div should adjust automatically</div> 
    <div id="div5">Div 5</div> 
    <div id="div6">Div 6</div> 
</body> 
</html> 
</body> 
</html> 
+0

** Trích **: _ "... sáu divs một mặt khác" _. Điều đó có nghĩa là gì? Có lẽ bạn có thể cung cấp một hình ảnh về những gì bạn đang muốn làm. – Sparky

+0

Tại sao bạn không thể đưa chiều cao mi cho 'div_auto_height'? Tôi thấy câu hỏi của bạn không đủ rõ ràng. – Sandeep

+0

Tôi đang hướng đến giải quyết vấn đề với các bảng, vì vậy nó sẽ phổ biến nhất có thể ... – Johnny

Trả lời

2

Không có cách CSS nào cho thuộc tính giá trị "tổng chiều cao màn hình - một số pixel cố định". Sử dụng Javascript.

+0

Đây là những gì tôi đã đánh giá cao rằng không có giải pháp CSS tinh khiết ... – Johnny

+0

Hoặc bạn có thể mô phỏng bảng bằng cách sử dụng 'hiển thị: bảng' vv và cho toàn bộ điều có chiều cao là 100%. Nhưng sau đó tất cả sáu hàng sẽ đạt được cùng một lượng đệm dọc thêm. –

3

Tôi tin rằng bạn nên sử dụng javascript để giải quyết vấn đề này. Có rất nhiều khung công tác javascript dễ sử dụng xuất hiện như jquery.

Bạn nên làm gì:

  • đưa ra một id để divs của bạn.
  • sử dụng những id tìm divs của bạn - trừ thứ tư - và tính toán chiều cao của họ
  • có được chiều cao của cửa sổ
  • thiết lập chiều cao lần thứ 4 div bằng cách trừ đi chiều cao cửa sổ từ tổng của bạn cao divs khác

Và đó là tất cả! Cho tôi biết nếu bạn cần một số mã.

chỉnh sửa: Tôi không tìm thấy mã nhưng tôi nhớ mình đã sử dụng jquery dimensions. Bạn có thể tìm thấy mã ví dụ ở đó!

+0

Điều này chắc chắn sẽ giải quyết được vấn đề. Nó cũng có thể được giải quyết dễ dàng bằng cách sử dụng bảng. Tôi đã chỉ tự hỏi nếu có một giải pháp CSS tinh khiết để làm điều này. Nếu bạn có mã javascript đã có trong tệp của mình, tôi rất biết ơn vì đã nhận được mã từ bạn. Cảm ơn bạn đã! – Johnny

0

Điều này có thể không phải là giải pháp khả thi nhất cho bạn, nhưng nếu bạn biết một max-height cho 5 và div 6, bạn có thể sử dụng position: absolutepadding (thiết lập với giá trị max-height) để đạt được kết quả của bạn:

<div id="wrapper"> 
    <div class="div-25"></div> 
    <div class="div-100"></div> 
    <div class="div-25"></div> 
    <div id="content"> 
     <div class="fluid"> 

     </div> 
    </div> 
</div> 
<div id="container"> 
    <div class="footer"> 
     <div class="div-25"></div> 
    </div> 
</div> 

CSS:

html, body { 
    margin: 0; 
    height: 100%; } 
div { width: 100%; } 
#wrapper { min-height: 100%; } 
.div-25 { 
    background: green; 
    height: 25px; } 
.div-100 { 
    background: grey; 
    height: 50px; } 
#content { padding: 0 0 150px; } /* Max Height */ 
.fluid { 
    background: red; 
    height: 100px; } 
#container { position: relative; } 
.footer { 
    background: blue; 
    position: absolute; 
    bottom: 100%; 
    min-height: 100px; } 

Preview: http://jsfiddle.net/Wexcode/jzdDU/

+0

Hey! Điều này có thể làm việc cho tôi ... Cảm ơn bạn đời! – Johnny

+0

Chắc chắn. Xin vui lòng chấp nhận câu trả lời này nếu bạn cảm thấy như nó giải quyết vấn đề của bạn :) – Wex

+0

Nó là gần nhưng vẫn không hoàn toàn có ... Giải pháp này là khá mong manh nếu nội dung của div thứ 5 được một số chiều cao. – Johnny

0

thay đổi

#div_auto_height { 
    height: auto ; 
    background-color: #789012; 
} 

để

#div_auto_height { 
    height: 100% ; 
    background-color: #789012; 
} 

hoặc có thể bạn cần điều này:

#div_auto_height { 
    height: calc(100% - 275px); ; 
    background-color: #789012; 
} 
Các vấn đề liên quan