2012-06-28 15 views
10

Tôi đang cố gắng để có được #sidebar để điền #main theo chiều dọc (và phù hợp với chiều cao của #content). Làm thế nào để tôi làm điều này?Làm cách nào để tôi thực hiện một div lấp đầy phần tử cha của nó theo chiều dọc?

Here's my jsFiddle.

CSS:

#main { 
    border: solid green 2px; 
} 

#sidebar { 
    background-color: red; 
    width: 20%; 
    overflow: auto; 
    float: left; 
    height: 100%; 
} 

#content { 
    background-color: orange; 
    width: 80%; 
    overflow: auto; 
    float: left; 
    height: 100%; 
} 

#main-footer { 
    clear: both; 
}​ 

Và html:

<div id="main"> 

<div id="sidebar"> 
    <ul> 
     <li>abc</li> 
     <li>def</li> 
    </ul> 
</div> 

<div id="content"> 
defsdfasdfasd fjasd;lf jasdl;fkjasd; lfjas; lfkjadsfl;sdajfs dlfjsdlfksjflaskfjsdaljfasdl asdfsad sfljsf sadfjsldfj sakfj;alsdfj dfsjsadfl;j asdlfjl;asdfj 
defsdfasdfasd fjasd;lf jasdl;fkjasd; lfjas; lfkjadsfl;sdajfs dlfjsdlfksjflaskfjsdaljfasdl asdfsad sfljsf sadfjsldfj sakfj;alsdfj dfsjsadfl;j asdlfjl;asdfj 
</div> 

<div id="main-footer"> 
</div> 

</div>​ 
+0

này có thể quan tâm là tốt, ngay cả khi không Bootstrap trong hình: http://stackoverflow.com/questions/9143971/using-twitter-bootstrap- 2-0-how-to-make-equal-column-heights – cdonner

Trả lời

9

Nếu không thiết lập chiều cao div rõ ràng nó là một chút khéo léo. Here is one solution.

+1

Cảm ơn bạn đã liên kết. Bất kỳ ý tưởng tại sao 'chiều cao: 100%' không hoạt động? –

+3

Bạn đang nói nó là 100% của container của nó là #main. Vì #main không có chiều cao, nó là 100% của chính nó. Đặt chiều cao thành #main và #sidebar và #content sẽ được đặt thành 100% của nó. – septemberbrain

+3

Ok, tôi hiểu - nó hoạt động nếu chiều cao của '# main' bằng pixel, nhưng không phải nếu chiều cao bằng%. –

3

div là một vùng chứa. Nó sẽ mất chiều cao nội dung của nó mất. Cách duy nhất để đạt được những gì bạn muốn là sử dụng chiều cao trong px. Nếu bạn không quan tâm về đánh dấu ngữ nghĩa (tôi khuyên bạn nên) thì liên kết của septemberbrain là một thủ thuật tốt.

+0

'div là một vùng chứa. Nó sẽ mất chiều cao nội dung của nó mất .' - bạn có thể cụ thể hơn? Có rất nhiều 'div' trong mã của tôi. –

+0

Tôi đã nói về div như một yếu tố. Về cơ bản, div có nghĩa là chứa đựng mọi thứ. Vì vậy, nếu bạn không có gì bên trong, chiều cao của nó sẽ bằng không trừ khi bạn đặt nó theo pixel. –

+0

Được rồi, điều đó không ảnh hưởng đến ví dụ của tôi vì tất cả 'div' ngoại trừ '# main-footer' đều có thứ gì đó bên trong. Bất kỳ ý tưởng tại sao 'chiều cao: 100%' trên '# sidebar' không hoạt động? –

2

2017 giải pháp: Đối với tôi, nó hoạt động tốt với flexbox. Tôi cần nội dung trang được kéo dài trên chiều cao cửa sổ đầy đủ nếu nội dung phải nhỏ hơn chiều cao cửa sổ.

 html, 
     body{ 
     min-height: 100%; 
     display: box; 
     display: flexbox; 
     display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6, BB7 */ 
     display: -ms-flexbox; /* TWEENER - IE 10 */ 
     display: -webkit-flex; /* NEW - Safari 6.1+. iOS 7.1+, BB10*/ 
     display: -moz-box; 
     display: flex; 
     -webkit-box-orient:vertical; 
     -moz-box-orient: vertical; 
     box-orient: vertical; 
     -webkit-box-direction:normal; 
     -webkit-flex-direction:column; 
     -ms-flexbox-direction:column; 
     -ms-flex-direction: column; 
     flex-direction:column; 
     } 
     body{ 
     -webkit-box-flex: 1; 
     -webkit-flex: 1 1; 
     -ms-flex: 1 1; 
     flex: 1 1; 
     } 
     #page{ 
     -webkit-box-flex: 100; 
     -webkit-flex: 100 100; 
     -ms-flex: 100 100; 
     flex: 100 100; 
     } 
     footer{ 
     -webkit-box-flex: 1; 
     -webkit-flex: 1 1; 
     -ms-flex: 1 1; 
     flex: 1 1; 

     -ms-flex-preferred-size: 300px; 
     -webkit-flex-basis: 300px; 
     flex-basis: 300px; 
     } 
     @media only screen and (max-width:500px) { 
     footer{ 
      -ms-flex-preferred-size: 400px; 
      -webkit-flex-basis: 400px; 
      flex-basis: 400px; 
     } 
     } 
0

cao Loại bỏ từ #sidebar#content và thêm display:flex để #main nên làm các trick.

tức

#main { 
    border: solid green 2px; 
    display: flex; 
} 

#sidebar { 
    background-color: red; 
    width: 20%; 
    float: left; 
} 

#content { 
    background-color: orange; 
    width: 80%; 
    float: left; 
} 

See JSFiddle.

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