问题
I basically have a layout like this:
<body>
<div style="height: 150px; width: 200px; background: green">
<div style="overflow: auto; max-height: 100px; background: blue">
some content <br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
<div style="overflow: auto; background: red">
some more content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
</div>
</body>
Now, I want the second div to fill all remaining height of the parent div and show the scroll bar if more space is needed. How can I achieve this? Currently, the second div never shows a scroll bar and just uses the space it needs, even if that will exceed the parents total height...
UPDATE:
Please test the solution you provide :-)
回答1:
Using Jquery might help
<body>
<div style="height: 150px; width: 200px; background: green">
<div id="c1" style="overflow: auto; max-height: 100px; background: blue">
some content <br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
<div id="c2"style="overflow: auto; background: red">
some more content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
</div>
in document.ready add this
var h1=$('#c1').height();
var h2 = 150-h1;
$('#c2').height(h2);
回答2:
Set max-height to the second div as well
<body>
<div style="height: 150px; width: 200px; background: green">
<div style="overflow: auto; max-height: 100px; background: blue">
some content <br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
<div style="overflow: auto; background: red; max-height: 50px">
some more content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
</div>
回答3:
I only know how to do with this using the forthcoming flexbox layout model. This is how you would do it in current versions of Firefox:
<div style="height: 150px; width: 200px; display: -moz-box; -moz-box-orient: vertical; background-color: green;">
<div style="overflow: auto; min-height: 1px; max-height: 100px; background-color: blue;">
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
<div style="overflow: auto; min-height: 1px; -moz-box-flex: 1; background-color: red;">
some more content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
</div>
回答4:
If you set overflow-y: scroll; and height: auto; on the child element, you should be able to achieve the scrollbar effect without exceeding the parent element
回答5:
I don't think there is a way to do this flexibly, but it's possible if you can know/set the height of the original div and then the next two divs.
Here's what I came up with:
<body>
<div style="height:200px; width: 200px; background: green;">
<div style="overflow: auto; max-height: 100px; background: blue">
some content <br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content<br/>
some content
</div>
<div style="overflow: auto; background: red; min-height:100px; max-height:100px;">
some more content<br/>
some content<br/>
some more content<br/>
some content<br/>
</div>
</div>
</body>
If the original div is 200px and then the first daughter div is 100px, the remaining space of the second daughter div will be 100px. So, if you set the min-height and max-height each to 100px, then the div will fill the remaining space and display a scroll bar if the content is greater than the max-height.
I'm sure you wanted an answer that would be flexible, depending upon the size of the original parent div, but I don't think it's that easy in this case.
来源:https://stackoverflow.com/questions/8057894/divs-with-scrollbars-in-div-with-fixed-size