标题可能比想法本身更复杂。下面是一张显示我需要的图片。有简单的规则:
这是否可以使用纯HTML / CSS并且没有Javascript?执行环境没有Javascript功能(或者如果有,它是非常有限的功能),所以我可能不能依赖基于JS的解决方案。
我自己的第一次尝试是制作A position: relative;
并制作C position:absolute; bottom: 0;
但是当B增长时,它将与C重叠,因为C不再在页面流中。
然后我想给B一个min-height
将C推到底部,但这不起作用,因为C没有固定的高度,这意味着我不能指定一个固定的{{ 1}}代表B。
我也试过制作A min-height
,但这会推动B& C到底部。也许如果我可以让B填充其余可用空间,我可以使这种方法有效吗?
我创建了这个jsfiddle http://jsfiddle.net/376rp/,这样任何有想法的人都会有一个快速启动。请注意:那里有两个" B" -blocks(黄色背景)。正确的解决方案可能适用于任何数量的" B" -blocks。
答案 0 :(得分:1)
这可能与纯CSS一样接近:
http://codepen.io/cimmanon/pen/zALfo
<div class="paper">
<div class="header"></div>
<div class="body"></div>
<div class="footer"></div>
</div>
.paper {
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
.paper .footer {
margin-top: auto;
}
当内容变得太大时,实际上没有办法防止外部元素扩展。如果您的设备无法访问JS,则Flexbox也很有可能无法正常工作。
答案 1 :(得分:0)
嗯,我知道你正在寻找一个纯CSS解决方案,但也许这可以帮到你。
http://jsfiddle.net/coma/kb6nW/6/
<强> HTML 强>
<div class="a">
<div class="b"></div>
<div class="c"></div>
</div>
<强> JS 强>
var margin = 10;
var minHeight = 250 + margin;
var as = document.getElementsByClassName('a');
var i;
for(i = 0; i < as.length; i++) {
var height = minHeight - as[i].offsetHeight;
var x = as[i].getElementsByClassName('b')[0];
x.style.marginBottom = Math.max(margin, height) + 'px';
}