如何在没有居中导航栏的情况下垂直居中身体元素

时间:2017-10-23 21:38:19

标签: html css twitter-bootstrap css3 flexbox

所以我有一个包含navbar的页面和一堆内容。代码大纲如下:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class="navbar">
<!-- Various navbar links here -->
</div>

<div class="container">
<!-- Some content here -->
</div>

我想要的是containerbody为中心,但保持navbar位于顶部。

上述代码在中心对齐navbarcontainer。如何在container中垂直居中body并使navbar不能居中?

3 个答案:

答案 0 :(得分:1)

你可以这样做:

html, body {height: 100%} /* mandatory */
body {margin: 0} /* mandatory */

body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.navbar {
  position: absolute;
  top: calc(50% - 150px); /* moved down by 50% of the screen height - half of the container's height - navbar's height */
  width: 1200px;
  max-width: 100%;
  height: 50px;
  background: Khaki;
}

.container {
  width: 1200px;
  max-width: 100%;
  height: 200px;
  background: Lavender;
}
<div class="navbar">
<!-- Various navbar links here -->
</div>

<div class="container">
<!-- Some content here -->
</div>

body 元素应该成为 flex-container flex-direction: column,以便它堆叠 < EM>垂直。由于您只想center div .container,因此您需要.navbar absolute position并将其移到正上方使用 CSS top 函数计算的calc() 属性和相应的

答案 1 :(得分:0)

你可以给.container一个固定的宽度:

.container {

max-width: 860px;
margin-right: auto;
margin-left: auto;
}

答案 2 :(得分:0)

您可以将正文设为flex列容器,并使用margin .navbar.container代替justify-contentalign-items来自flex父级

所需的基本代码:

&#13;
&#13;
html,
body {
  height: 100%;
  margin: 0;
}

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

.navbar {
  margin: 0 auto;
}

.container {
  margin: auto;
}
&#13;
<div class="navbar">navbar
</div>

<div class="container">
  container
</div>
&#13;
&#13;
&#13;

(min - ) width(min - ) height可应用于您的盒子以满足您的需求。