我想创建三个堆叠div
的 s。顶部和底部的高度是固定的,而中间的高度是动态的,可以扩展以填充剩余空间:
我尝试了很多事情,例如将高度设置为auto
. 我确实有一个解决方案,但它涉及 JavaScript(即计算剩余高度),但我想知道是否有纯 CSS 解决方案。
一种解决方案是使用 position 来完成absolute
。
这种方法的缺点是,如果周围的总高度更小,那么固定高度的总和container
将不再可见。
需要注意的另一件事是,如果您想针对移动设备,这可能是一个糟糕的解决方案。该解决方案是否合适,始终取决于具体情况。
如果我没记错的话,您只会遇到不支持该top
bottom
位置组合的IE 6(在桌面上)的问题absolute
。
HTML
<div class="header"></div>
<div class="container"></div>
<div class="footer"></div>
CSS
.header, .container, .footer{
position: absolute;
outline: 1px solid black;
}
.header {
left: 0px;
top: 0px;
right : 0px;
height: 50px;
}
.container {
left: 0px;
top: 50px;
right : 0px;
bottom: 50px;
}
.footer {
left: 0px;
bottom: 0px;
right : 0px;
height: 50px;
}
有一个 CSS 解决方案,但它不适用于旧版浏览器。您需要使用calc
CSS 新增的“功能”,并结合height: 100%
. 如果您以前从未使用height: 100%
过,那么您就知道您想要 100% 高的元素的每个父元素也必须设置为height:100%
. calc
可以取一个百分比值并从中减去像素,因此您只需将其设置为100%
负值,无论顶部和底部 div 有多高。
支持:IE9+、Firefox 4+、Chrome 19+、Safari 6+ http://caniuse.com/calc
HTML
<div id='top'></div>
<div id='mid'></div>
<div id='bot'></div>
CSS
html, body
{
height: 100%;
}
#top, #bot
{
height: 50px;
background: red;
}
#mid
{
height: calc(100% - 100px);
}
小提琴:http : //jsfiddle.net/jakelauer/9cYUB/
如果您需要旧版浏览器支持,或者如果您需要支持IE8+ 或更高版本,您可以使用 HTML 表格来完成,您可以使用 CSS 表格布局。
这是一个jsFiddle使用 CSS 表格布局。
HTML
<div>
<div>
<div>Fixed Height</div>
</div>
<div>
<div>
<div>Variable Height</div>
</div>
</div>
<div>
<div>Fixed Height</div>
</div>
</div>
CSS
html, body {
height:100%;
width: 100%;
margin: 0px;
padding: 0px;
text-align: center;
font-size: 20pt;
font-family: Verdana;
}
body > div {
display:table;
width: 100%;
height:100%;
}
body > div > div {
display: table-row;
}
body > div > div > div {
display: table-cell;
vertical-align: middle;
}
body > div > div:nth-child(odd) {
background: grey;
color: #FFF;
height: 100px;
}
body > div > div:nth-child(even) {
height:100%;
width:100%;
}
body > div > div:nth-child(even) >div {
height:100%;
width:100%;
overflow:hidden;
}
如果我了解您的要求,您需要使用 wrap div:http ://www.cssstickyfooter.com/using-sticky-footer-code.html