如何使用Flex垂直中心和视口单元?

时间:2017-02-25 05:46:08

标签: html css html5 css3 flexbox

我有一个简单的页面布局,其中包含使用flex的垂直居中内容框。

我使用min-height: 70vh;拉伸容器高度以允许内容框垂直居中。

我还有一个页脚,使用flex: 1;将高度差扩展到页面底部。

https://jsfiddle.net/Lvod41L2/

layout 1

问题

如果内容框中有足够的内容使其高于页面,则页脚不会被推到底部并随页面滚动。示例:height: 2000px;

layout 2

如果我删除min-height: 70vh;,页脚会被推到页面底部,因为它应该看起来。

layout 3

HTML / CSS

<!DOCTYPE html>
<html>
      <head>
            <style>
            html, body {
                  height: 100%;
                  margin: 0;
                  padding: 0;
            }
            body {
                  display: flex;
                  flex-direction: column;
            }
            .header {
                  min-height: 40px;
                  padding: 0.8em 2em;
                  background: black;
                  color: white;
            }
            .flex-container {
                  display: flex;
                  align-items: center;
                  min-height: 70vh;
                  padding: 2em;
                  background: gray;
            }
            .content-box {
                  width: 300px;
                  height: 300px;
                  margin: auto;
                  padding: 2em;
                  text-align: center;
                  background: black;
                  color: white;
            }
            .footer {
                  z-index: 100;
                  position: relative;
                  flex: 1;
                  padding: 2em;
                  background: black;
                  color: white;
            }     
            </style>
      </head>

      <body>
            <div class="header">
                  Header
            </div>

            <div class="flex-container">
                  <div class="content-box">
                        Content Box
                  </div>
            </div>

            <div class="footer">
                  Footer
            </div>

      </body>
</html>

1 个答案:

答案 0 :(得分:2)

SOLUTION - JSFIDDLE

flex: 0 0 auto;添加到容器

.flex-container {
  display: flex;
  align-items: center;
  min-height: 70vh;
  padding: 2em;
  background: gray;
  flex: 0 0 auto; /* Added rule */
}

我希望能解决这个问题。