2016-03-07 47 views
2

如何使div填充父级顶部到下一个绝对底部定位元素顶部之间的整个高度?如何使div填充高度,直到下一个绝对定位元素

看到这里codepen:http://codepen.io/LouisDoe/pen/vGLJVB

<div class="wrapper"> 
    <div class="maxHeight"> 
    blabla 
    </div> 
    <div class="content"> 
    <div>row 1</div> 
    <div>row 2</div> 
    <div>row 3</div> 
    </div> 
</div> 

CSS:

.content { position:absolute; bottom:0; width:100%; } 

我想打

<div class="maxHeight"> 
</div> 

全部可用高度。

感谢

+0

JavaScript解决方案是容易的。 –

+0

你为什么使用'position:absolute;'? –

+0

不可以。你必须使用js作为我的回答 –

回答

1

您可以使用Flexbox。如果您在.wrapper上设置min-height: 100vh,它将占用窗口的全部高度。在.maxHeightflex: 1,该元素将剩余高度并将.content div推到窗口的底部。

* { 
 
    margin:0; 
 
    padding:0; 
 
} 
 

 
.wrapper { 
 
    min-height: 100vh; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
.maxHeight { 
 
    flex: 1; 
 
    background: lightgreen; 
 
} 
 

 
.content div { 
 
    padding:10px; 
 
    border-top: 1px solid #D1D1D1; 
 
}
<div class="wrapper"> 
 
    <div class="maxHeight">blabla</div> 
 
    <div class="content"> 
 
    <div>row 1</div> 
 
    <div>row 2</div> 
 
    <div>row 3</div> 
 
    </div> 
 
</div>

+0

似乎很好的工作!你能帮我在flexbox中垂直居中文本“blabla”吗? – Louis

+0

是的,你可以这样做https://jsfiddle.net/Lg0wyt9u/153/,如果你不想水平中心删除'justify-content:center' –

+0

非常感谢! – Louis

0

问题:-(

position:absolute;的全部目的就是要“拉”的元素从页面的流量,所以不存在“可用高度”,因为绝对定位的元素没有按” t拍摄它的父元素的任何地方。

你可以做到这一点使用JavaScript的通过编程计算父元素的高度,并从中减去底部定位元素的高度...

编辑:

考虑到你的HTML,你可以像这样同时设置.maxHeight.content元素是position:absolute;,不同bottom & height值:

.content { 
    bottom:0; 
    height:150px; 
} 
.maxHeight { 
    top:0; 
    bottom:150px; 
} 

这不是动态的,但将实现你想要什么。

+0

好的,有没有办法避免位置绝对吗? – Louis

+0

@Louis为什么我的答案下面没有做你想要的吗? –

+0

@ScottMarcus是的,第一个div的高度不能包含底部div。 – Louis

0

也许你要检查这个js的解决方案:jsfiddle

CSS:

.wrapper {position: relative; height: 100%;} 
html, body {height: 100%;} 

jQuery:

$(document).ready(function(){ 
    wrapperHeight = $(".wrapper").height(); 
    contentHeight = $(".content").height(); 
    $(".maxHeight").height(wrapperHeight-contentHeight); 
});