CSS学习笔记:页脚布局

今天工作状态不好,放松一下,找了个教程,学习下 CSS。

对于常见的上中下三栏布局:页头、正文、页脚,如何保持页脚固定在最底部?下面是一个简化的页面:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0px;
      }

      body {
        min-height: 100vh;
      }

      main {
        padding: 1rem;
        max-width: 80ch;
        margin: 10px auto;
        outline: 2px dashed grey;
      }

      header,
      footer {
        display: grid;
        place-items: center;
        background-color: rebeccapurple;
        color: #fff;
        height: 100px;
      }
    </style>
  </head>
  <body>
    <header>
      <h1>Hello World</h1>
    </header>

    <main>
      <p>
        This is a main content. This is a main content. This is a main content. This is a main
        content.
      </p>
    </main>

    <footer>
      <p>This is a footer.</p>
    </footer>
  </body>
</html>

有两种实现方法。用 grid 最简单,且可以保证正文内容自动填满页头和页脚之间的所有空间。但是使用这种方法,需要注意顶层嵌套结构。

body {
  display: grid;
  grid-template-rows: auto 1fr auto;
}

如果使用 flex 布局,则页头页脚中间可以任意添加顶级元素,而无需包装在 main 标签内。但是这种写法,main 元素不会自动填充高度。

body {
  display: flex;
  flex-direction: column;
}

footer {
  margin-top: auto;
}