Flexbox主体和主要最小高度

时间:2016-05-25 08:22:28

标签: css height flexbox

https://jsfiddle.net/vz7cLmxy/

我试图让身体扩张,但最小高度不起作用。我已经阅读了其他相关主题,但无法理解它。

CSS和HTML

body,
html {
  padding: 0;
  margin: 0;
  min-height: 100%;
}

body {
  display: flex;
  background: #eee;
  flex-direction: column;
}

.menu {
  background: red;
  color: #fff;
  padding: 10px;
}

.wrap {
  display: flex;
}

.sidebar {
  background: #ddd;
  width: 300px;
}

.main {
  background: #ccc;
  flex: 1;
}

.footer {
  background: #000;
  color: #fff;
  padding: 10px;
}
<div class="menu">Menu</div>

<div class="wrap">
  <div class="sidebar">Sidebar</div>
  <div class="main">Main</div>
</div>

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

预期的结果是,如果它低于100%,则主要拉伸以填充高度。

2 个答案:

答案 0 :(得分:7)

在居中元素上使用flex: 1

.Site {
  display: flex;
  min-height: 100vh;
  flex-direction: column;
}

.Site-content {
  flex: 1;
  background-color:#bbb;
}
<body class="Site">
  <header>This is the header text ☺</header>
  <main class="Site-content">…</main>
  <footer>This is the footer text ☻</footer>
</body>

答案 1 :(得分:0)

要使min-height的相关单元即使在IE11中也可以正常工作,它只需要一个小技巧。

min-height的性质是当height小于height时覆盖min-height。非常清楚!但是陷阱是min-height具有实际单位(%vh)并且未设置height时。由于它是相对的,因此没有依据。

对于Internet Explorer以外的所有主要浏览器,一种可能性是将单位从%更改为vh

body {
  min-height: 100vh;
}

对于Internet Explorer,它需要一个height(将从min-height覆盖):

body {
  height: 1px;
  min-height: 100vh;
}

或也要保留%的规则也必须应用于html

html, body {
  height: 1px;
  min-height: 100%;
}

用于OP的跨浏览器解决方案需要height: 1px上的body,当然flex-grow: 1上需要.wrap,以使其比menu和{{ 1}}:

footer
body,
html {
  padding: 0;
  margin: 0;
  height: 1px; /* added */
  min-height: 100%;
}

body {
  display: flex;
  background: #eee;
  flex-direction: column;
}

.menu {
  background: red;
  color: #fff;
  padding: 10px;
}

.wrap {
  display: flex;
  flex-grow: 1; /* added */
}

.sidebar {
  background: #ddd;
  width: 300px;
}

.main {
  background: #ccc;
  flex: 1;
}

.footer {
  background: #000;
  color: #fff;
  padding: 10px;
}