我在一个父div中有3个子div。 第一和第三div具有固定高度。 如何让第二个div占用所有剩余空间。只寻找CSS解决方案。
HTML:
<div id="parent">
<div id="first">1</div>
<div id="second">2</div>
<div id="third">3</div>
</div>
CSS:
div{border:1px solid #000}
#parent{width:200px;height:300px}
#first{width:100%;height:50px;background-color:red}
#second{width:100%;height:auto;background-color:yellow}
#third{width:100%;height:50px;background-color:blue}
JSFIDDLE:https://jsfiddle.net/n4ncb57w/
答案 0 :(得分:3)
尝试使用 flex 。
#parent{width:200px;height:300px; display: flex; flex-direction:column}
#second{width:100%;height:auto;background-color:yellow; flex-grow: 100;}
答案 1 :(得分:1)
我假设:
div
如果&#39;中间&#39; div使用绝对定位,你不设置它的高度,但是设置它的顶部&#39;和&#39;底部&#39;然后它将自动拉伸以填充。我没有测试过,但标记看起来像这样:
<div id="parent">
<div id="top">
Heading at the TOP!
</div>
<div id="middle">
Lorem ipsum dolor sit amet, consectetuer...
</div>
<div id="bottom>
...and here is the BOTTOM.
</div>
</div>
...样式表看起来像这样:
#parent {
width: 100%;
height: 100vh;
position: relative;
}
#top, #middle, #bottom {
box-sizing: border-box;
margin: 0px;
position: absolute;
}
#top {
top: 0px;
height: 63px; // <- the set height of the top
}
#bottom {
bottom: 0px;
height: 96px; // <- the set height of the bottom
}
#middle {
// no 'height' - use both 'top' and 'bottom' instead
top: 63px; // <- the set height of the top
bottom: 96px // <- the set height of the bottom
overflow: auto;
}
这可能是最直接的方式,可能是最好的跨浏览器支持。
calc()
如果您不关心支持较旧的浏览器(例如Internet Explorer 9或更早版本),那么您可以使用calc()
让浏览器自动计算“中间”&#的高度39; div为你。 calc()
内置CSS功能允许您混合不同的度量单位 - 例如&#39;%&#39;和&#39; px&#39;在你的计算中。使用calc()
,您的样式表将如下所示:
#parent {
width: 100%;
height: 100vh; // this is the parentHeight
position: relative;
}
#top, #middle, #bottom {
box-sizing: border-box;
margin: 0px;
}
#top {
height: 63px; // <- the topHeight
}
#bottom {
position: absolute;
bottom: 0px;
height: 96px; // <- the bottomHeight
}
#middle {
// Automatically calculate the height using 'calc'.
// The formula for the calculated height should be:
// (parentHeight - (topHeight + bottomHeight)):
height: calc(100vh - 159px);
overflow: auto;
}
有几个在线教程涵盖了如何实现您想要的 - 以及更多 - 使用新的&#39; flexbox&#39;布局模式,所以我不打算在这里介绍它。 Flexbox是CSS的一个相对较新的补充,尽管当前版本的Firefox,Chrome和Safari支持得非常好,但Internet Explorer 10和11并没有(它有很多错误)。考虑到有更简单的替代解决方案 - 如上所述 - 此时我可能会选择其中一种解决方案。然而,Flexbox是未来,如果你想学习如何使用它,这将是一个很好的练习:去学习它! ; - )
我可能还有其他解决方案,所以看看有多少建议会在这里变得有趣......
我希望这有帮助!
答案 2 :(得分:0)
一种解决方案是使用calc
。
#second{
width:100%;
height:auto;
background-color:yellow;
height: calc(100% - 100px);
}
并且
#parent > div {
box-sizing: border-box;
}
<强> Working Fiddle 强>
答案 3 :(得分:0)
使用calc()
方法。 JSFiddle
div {
border: 1px solid #000
}
#parent {
width: 200px;
height: 300px
}
#first {
width: 100%;
height: 50px;
background-color: red
}
#second {
width: 100%;
height: calc(100% - 106px);
background-color: yellow
}
#third {
width: 100%;
height: 50px;
background-color: blue
}
<div id="parent">
<div id="first">1</div>
<div id="second">2</div>
<div id="third">3</div>
</div>
答案 4 :(得分:0)
我会使用CSS提供的calc()
函数来完成。
second{height: calc(100% - 106px);}
所以这里做的是从100%中减去#first
和#third
的组合高度。因此,在这种情况下,它的2x 52px(包含边框),现在因为#second
也有1px边框,我们再减去2 px。