+------------------+ <-- container - should not be stretched by its contents
|+----------------+|
|| |||
|| ||| <-- main div - as big as container minus footer
|| ||| if content overflows, scrollbar appear
|| |||
|| scrollbar-> H||
|| H||
|| |||
|+----------------+|
|+----------------+| <-- footer - stretched by its contents (button) to
|| [button] || minimal needed height
|+----------------+|
+------------------+
容器可能没有静态大小,因此解决方案“只计算主div的高度”不是一个选项(当然没有JS)
HTML5,无需向后兼容。
答案 0 :(得分:2)
在CSS3中,您可以使用
height: calc(100% - 60px);
60px可以代表页脚的高度。
答案 1 :(得分:0)
尝试这样的事情:
/* css */
<style>
.container{
position: relative;
height: 100%;
width: 100%;
}
.main{
position: relative;
height: calc{100% - 10%};
width: 100%;
overflow: auto;
}
.footer{
position: relative;
height: 10%;
width: 100%;
}
</style>
<!-- html -->
<div class="container">
<div class="main">
</div>
<div class="footer">
</div>
</div>
答案 2 :(得分:0)
你走了;仅使用html / flexbox:
您会注意到,在添加<p>
标记时,在页脚div上,div会缩放到最大高度30%,并强制主div再次溢出内容。
在没有静态容器高度/宽度的情况下工作,猜测它取决于父容器。
首先:内容最少
<!DOCTYPE html>
<html>
<head>
<style>
.container{
height:200px;
width:400px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.main{
width:100%;
background-color:blue;
overflow-y: scroll;
}
.main p{
color:white;
}
.footer{
max-height:30%;
width:100%;
background-color:red;
}
</style>
</head>
<body>
<div class="container">
<div class="main">
<p>Trump2016</p><p>Trump2016</p><p>Trump2016</p><p>Trump2016</p>
<p>Trump2016</p><p>Trump2016</p><p>Trump2016</p><p>Trump2016</p>
<p>Trump2016</p><p>Trump2016</p><p>Trump2016</p><p>Trump2016</p>
</div>
<div class="footer">
<span>Trump2016</span>
</div>
</div>
</body>
</html>
&#13;
第二:添加内容(显示容器将扩展并强制主要部分)。
<!DOCTYPE html>
<html>
<head>
<style>
.container{
height:200px;
width:400px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.main{
width:100%;
background-color:blue;
overflow-y: scroll;
}
.main p{
color:white;
}
.footer{
max-height:30%;
width:100%;
background-color:red;
}
</style>
</head>
<body>
<div class="container">
<div class="main">
<p>Trump2016</p><p>Trump2016</p><p>Trump2016</p><p>Trump2016</p>
<p>Trump2016</p><p>Trump2016</p><p>Trump2016</p><p>Trump2016</p>
<p>Trump2016</p><p>Trump2016</p><p>Trump2016</p><p>Trump2016</p>
</div>
<div class="footer">
<span>Trump2016</span>
<p>Trump2016</p>
</div>
</div>
</body>
</html>
&#13;
答案 3 :(得分:0)
检查这是否对您有所帮助。
我使用height: 100vh
.container
并将.footer
拉上了负余额。
* {
margin: 0;
}
.container {
height: 100vh;
box-sizing: border-box;
padding-bottom: 50px;
overflow: auto;
}
.footer {
height: 50px;
text-align: center;
margin-top: -50px;
background: #ccc;
position: relative;
z-index: 1;
box-sizing: border-box;
padding: 15px;
}
<div class="outer">
<div class="container">
<ul>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
</ul>
</div>
</div>
<div class="footer">
footer
</div>