需求
我们先看一下底部 copyright 有什么特点:
- 页面底部居中。
- 如果内容不满,则直接出现在页面底部。
- 如果内容充满需要滑动,则滑动到底部后出现。
实现
首先介绍一下 flex,flex-direction,flex-grow:
- flex 布局又称弹性布局,它能给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。
- flex-direction 属性决定主轴的方向(即项目的排列方向)。
- flex-grow 定义子元素的放大比例。
- 如果为 0,表示不放大。
- 如果子元素都为 1,则子元素平分剩余空间。
- 如果一个项目的 flex-grow 属性为 2,其他项目都为 1,则前者占据的剩余空间将比其他项多一倍。
因此,我们的思路如下:
- 父元素 content,定义为一个 flexbox,且 flex-direction 为 column(纵向排列子元素)。
- 子元素 content-main,设置 flex-grow 为 1。
- 子元素 content-copyright,设置 flex-grow 为 0(默认值)。
核心代码
.content {
display: flex;
flex-direction: column;
}
.content-main {
flex-grow: 1;
}
.content-copyright {
flex-grow: 0;
text-align: center;
}
完整代码参考
<!DOCTYPE html>
<head>
<style>
html,
body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
.content {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
overflow: scroll;
}
.content-main {
flex-grow: 1;
background-color: lightblue;
}
.content-copyright {
flex-grow: 0;
text-align: center;
background-color: lightgreen;
}
</style>
</head>
<body>
<div class="content">
<div class="content-main">
<!-- 如果没有任何内容,则会占满;否则会滚动 -->
<div style="height: 150vh"></div>
</div>
<div class="content-copyright">copyright</div>
</div>
</body>
参考资料
- Flex 布局 by MDN https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox
- Flex 布局 by 阮一峰 http://ruanyifeng.com/blog/2015/07/flex-grammar.html
[END]