需求

我们先看一下底部 copyright 有什么特点:

  1. 页面底部居中。
  2. 如果内容不满,则直接出现在页面底部。
  3. 如果内容充满需要滑动,则滑动到底部后出现。

实现

首先介绍一下 flex,flex-direction,flex-grow:

  1. flex 布局又称弹性布局,它能给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。
  2. flex-direction 属性决定主轴的方向(即项目的排列方向)。
  3. flex-grow 定义子元素的放大比例。
    1. 如果为 0,表示不放大。
    2. 如果子元素都为 1,则子元素平分剩余空间。
    3. 如果一个项目的 flex-grow 属性为 2,其他项目都为 1,则前者占据的剩余空间将比其他项多一倍。

因此,我们的思路如下:

  1. 父元素 content,定义为一个 flexbox,且 flex-direction 为 column(纵向排列子元素)。
  2. 子元素 content-main,设置 flex-grow 为 1。
  3. 子元素 content-copyright,设置 flex-grow 为 0(默认值)。

核心代码

  1. .content {
  2. display: flex;
  3. flex-direction: column;
  4. }
  5. .content-main {
  6. flex-grow: 1;
  7. }
  8. .content-copyright {
  9. flex-grow: 0;
  10. text-align: center;
  11. }

完整代码参考

  1. <!DOCTYPE html>
  2. <head>
  3. <style>
  4. html,
  5. body {
  6. margin: 0;
  7. padding: 0;
  8. width: 100%;
  9. height: 100%;
  10. }
  11. .content {
  12. display: flex;
  13. flex-direction: column;
  14. width: 100%;
  15. height: 100%;
  16. overflow: scroll;
  17. }
  18. .content-main {
  19. flex-grow: 1;
  20. background-color: lightblue;
  21. }
  22. .content-copyright {
  23. flex-grow: 0;
  24. text-align: center;
  25. background-color: lightgreen;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="content">
  31. <div class="content-main">
  32. <!-- 如果没有任何内容,则会占满;否则会滚动 -->
  33. <div style="height: 150vh"></div>
  34. </div>
  35. <div class="content-copyright">copyright</div>
  36. </div>
  37. </body>

参考资料

  1. Flex 布局 by MDN https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox
  2. Flex 布局 by 阮一峰 http://ruanyifeng.com/blog/2015/07/flex-grammar.html

[END]