先看html和效果图
<!DOCTYPE html>
<html>
<head>
<style>
body,p{
margin:0;
}
.header,.footer{
background:#000;
height:60px;
}
/*兼容ie8
html,body{
height:100%;
}
*/
.auto-height{
/*兼容ie8
min-height:100%;
*/
min-height:100vh;
margin-top:-60px;
margin-bottom:-60px;
/*设置内边距方式一*/
box-sizing:border-box;
padding-top:60px;
padding-bottom:60px;
}
/*设置内边距方式二
.auto-height>div{
padding-top:60px;
padding-botom:60px;
}
*/
</style>
</head>
<body>
<div class="header">
</div>
<div class="main auto-height" id="main-con">
<div>
<p>设置页面最小高度为窗口高度的方法</p>
</div>
</div>
<div class="footer">
</div>
<!-- script>
var mainElem=document.getElementById("main-con");
document.onreadystatechange=function(){
if(document.readyState=="complete"){
mainElem.style.minHeight=(document.documentElement.clientHeight-120)+"px";
window.onresize=function(){
mainElem.style.minHeight=(document.documentElement.clientHeight-120)+"px";
};
}
};
</script -->
</body>
</html>
效果图:
这里有两种方法:
第一种是使用css实现:
1. 给main元素添加样式:
min-height:100vh;
margin-top:-60px;//数值等于页面头部高度
margin-bottom:-60px;//数值等于页面尾部高度
margin的高度是页面头部和尾部的高度。
2. 为了让main元素里的所有内容都显示出来,要增加相应的内边距,这里有两种方法:
box-sizing:border-box;//将main元素的宽高计算方式更改为包含内边距和边框
padding-top:60px;//数值等于页面头部高度
padding-botom:60px;//数值等于页面尾部高度
或设置其子元素的内边距:
.auto-height>div{
padding-top:60px;//数值等于页面头部高度
padding-botom:60px;//数值等于页面尾部高度
}
3.由于ie8不支持vh单位,所以如果需要兼容ie8的话,可以将html和body的高度都设为100%,再设置main元素的最小高度为100%(min-height:100%),其他的设置不变。
html,body{
height:100%;
}
第二种是使用JavaScript来实现:
使用JavaScript来动态设置main元素的最小高度即可,这里提供其中一种实现方式
var mainElem=document.getElementById("main-con");//获得main元素
document.onreadystatechange=function(){
if(document.readyState=="complete"){//页面加载完成时执行
mainElem.style.minHeight=(document.documentElement.clientHeight-120)+"px";//初始化最小高度
window.onresize=function(){//窗口大小改变时改变main元素的最小高度
mainElem.style.minHeight=(document.documentElement.clientHeight-120)+"px";
};
}
};
最小高度的值=窗口的高度-页面头部高度-页面尾部高度。