网站布局这么久了,遇到有些页面内容不够的版面,底部的footer总是会贴着内容下方一起浮动,看着很是别扭,于是就科学上网找到了这个方法,还不错,送给跟我一样刚学习网站布局的新同学试试。
方法一:footer高度固定+绝对定位
HTML结构
<body>
<header>header</header>
<main>main content</main>
<footer>footer</footer>
</body>
CSS设置
html{height:100%;}
body{min-height:100%;margin:0;padding:0;position:relative;}
header{background-color: #ffe4c4;}
main{padding-bottom:100px;background-color: #bdb76b;}/* main的padding-bottom值要等于或大于footer的height值 */
footer{position:absolute;bottom:0;width:100%;height:100px;background-color: #ffc0cb;}
首先,设置body的高度至少充满整个屏幕,并且body作为footer绝对定位的参考节点;
其次,设置main(footer前一个兄弟元素)的padding-bottom值大于等于footer的height值,以保证main的内容能够全部显示出来而不被footer遮盖;
最后,设置footer绝对定位,并设置height为固定高度值。
方法二:footer高度固定+margin负值
HTML结构
<body>
<div class="container">
<header>header</header>
<main>main content</main>
</div>
<footer>footer</footer>
</body>
CSS设置
html,body{height:100%;margin:0;padding:0;}
.container{min-height:100%;}
header{background-color: #ffe4c4;}
main{padding-bottom:100px;background-color: #bdb76b;}/* main的padding-bottom值要等于或大于footer的height值 */
footer{height:100px;margin-top:-100px;background-color: #ffc0cb;}/* margin-top(负值的)高度等于footer的height值 */
此方法把footer之前的元素放在一个容器里面,形成了container和footer并列的结构:
首先,设置.container的高度至少充满整个屏幕;
其次,设置main(.container最后一个子元素)的padding-bottom值大于等于footer的height值;
最后,设置footer的height值和margin-top负值。
这种方法没有使用绝对定位,但html结构的语义化不如方法一中的结构清晰。
也可以设置负值的margin-bottom在.container上面,此时html结构变化如下:
<body>
<div class="container">
<header>header</header>
<main>main content</main>
<div class="empty"></div>
</div>
<footer>footer</footer>
</body>
CSS设置
html,body{height:100%;margin:0;padding:0;}
.container{min-height:100%;margin-bottom:-100px;}
.empty,footer{height:100px;}
使用一个空的div把footer容器推到页面最底部,同时给container设置一个负值的margin-bottom,这个margin-bottom与footer和.empty的高度相等。
虽然多了一个空的div,语义上也不怎么好,但是相比前面为main元素设置padding-bottom的方法有一个明显的好处:当网页内容不满一屏的时候,如果需要为main元素设置边框、背景色的时候,padding-bottom硬生生地撑出了一片空白,真真是有点丑,但是加个空的div之后,布局方式作用在.empty上,对main的css设置就不影响了,算是一个好处吧!
方法三:footer高度任意+js
HTML 结构
<body>
<header>header</header>
<main>main content</main>
<footer>footer</footer>
</body>
CSS设置
html,body{margin:0;padding: 0;}
header{background-color: #ffe4c4;}
main{background-color: #bdb76b;}
footer{background-color: #ffc0cb;}
/* 动态为footer添加类fixed-bottom */
.fixed-bottom {position: fixed;bottom: 0;width:100%;}
js代码
$(function(){
function footerPosition(){
$("footer").removeClass("fixed-bottom");
var contentHeight = document.body.scrollHeight,//网页正文全文高度
winHeight = window.innerHeight;//可视窗口高度,不包括浏览器顶部工具栏
if(!(contentHeight > winHeight)){
//当网页正文高度小于可视窗口高度时,为footer添加类fixed-bottom
$("footer").addClass("fixed-bottom");
} else {
$("footer").removeClass("fixed-bottom");
}
}
footerPosition();
$(window).resize(footerPosition);
});
CSS 布局 - 最后一个元素占满剩余可用高度
在当前屏幕中,让最后一个元素占满可用的剩余空间,当窗口大小变化时也需如此。
html
<div class="container">
<div>Div 1</div>
<div>Div 2</div>
<div>Div 3</div>
</div>
css
html,
body {
height: 100%;
margin: 0;
}
.container {
height: 100%;
display: flex;
flex-direction: column;
}
.container > div:last-child {
background-color: tomato;
flex: 1;
}
说明
- height: 100% 设置容器高度为屏幕高度
- display: flex 启用 flex 盒子模型
- flex-direction: column 设置 flex 盒子模型中的子元素按照从上到下的方向进行排列
- flex-grow: 1 flex 盒子模型内的该元素将会占据父容器中剩余的空间
- 父元素必须有一个设定的高度
- flex-grow: 1 可以应用到第一个或者第二个或者任意一个子元素上,被设置了该属性的子元素将会占据所有剩余的可用空间
浏览器支持
支持率:99.5%
支持情况:https://caniuse.com/#feat=flexbox
⚠️:进行所有支持时需要提供前缀
评论已关闭