使div适合剩余高度

时间:2016-04-26 20:18:43

标签: javascript jquery html css flexbox

我有以下div

<div class="top">
   <div class="inner1"></div>
   <div class="inner2"></div>
   <div class="inner3"></div>
</div>

这是CSS:

.top { 
    height: 100vh;
}

.div1 {
    min-height: 215px;
    box-sizing: border-box;
    height: 30vh;
}

.div2 { 
    box-sizing: border-box;
    min-height: calc(100vh - 30vh - 265px);
    padding-top: 2.5em;
    margin-top: 0;
    display: table;
}

.div3 {
    min-height: 265px;
    box-sizing: border-box;
    background: white;
    display: table;
    width: 100%;
    font-weight: 700;
    padding-bottom: 42px;
}

我不想使用calc(100vh - 30vh - 265px)来设置div 2的最小高度。我怎么能拥有它以便它需要剩余的高度(意味着div2 height = 100vh - div1 height - div2身高。

我猜flex在这里很有用,但我不太清楚如何使用它。任何帮助将不胜感激。

感谢?

在将此标记为重复之前,请注意:我尝试使用flex,但在IE11中效果不佳。

2 个答案:

答案 0 :(得分:0)

不知道这是不是最好的主意,但为了克服跨浏览器限制,我通常会使用javascript来重新计算。我编写了javascript函数,然后在窗口调整大小和加载时触发它。

&#13;
&#13;
// some jQuery
function adjustHeight() {
var fullHeight = $(window).height();

var neededHeight = fullHeight - fullHeight*0.3 - 263;

$('.div2').css('min-height', neededHeight + 'px');

}


$(document).ready(function(){ adjustHeight(); });
&#13;
&#13;
&#13;

答案 1 :(得分:0)

在flex,display:table属性也可以帮助旧版浏览器。

在这种情况下,高度变为min-height

&#13;
&#13;
.top {
  height: 100vh;
  display: table;
  width: 100%;
}
.top>div {
  display: table-row;
}
.inner1 {
  min-height: 215px;/* becomes useless */
  box-sizing: border-box;
  height: 30vh;
  background: tomato;
}
.inner2 {
  box-sizing: border-box;
  padding-top: 2.5em;/* i'll get squeezed here */
  margin-top: 0;/* useless, border-spacing is to be used */
  background: turquoise;
}
.inner3 {
  height: 265px;
  box-sizing: border-box;
  background: yellow;
  display: table;
  width: 100%;
  font-weight: 700;
  padding-bottom: 42px;/* ? :) */
}
&#13;
<div class="top">
  <div class="inner1">1</div>
  <div class="inner2">run me in full page to see how i behave :)</div>
  <div class="inner3">3</div>
</div>
&#13;
&#13;
&#13;