使用 CSS 垂直居中两个 div

Vertically centering two divs using CSS

我意识到有很多关于如何做到这一点的问题,但他们所有的解决方案似乎都对我目前的情况没有反应。我在网站顶部有一个横幅,其中有两个浮动列。右栏包含一个导航菜单,我觉得它可能是罪魁祸首。

我已经设置了以下 jfiddle:https://jsfiddle.net/Lhd0soL5/1/

.container {
  max-width: 940px;
  margin: 0 auto;
  margin-top: 0px;
  padding-top: 0px;
  box-sizing: border-box;
  position: relative;
}



.high {
  background-color: #FFF;
}

.high .left-col {
  width: 33%;
  float: left;
  height: auto;
  padding: 20px 0px;
}

.high .left-col p {
  font-size: 140%;
}

.high .right-col {
  width: 67%;
  float: right;
  height: auto;
  top: 50%;
  bottom: 50%;
}


.site-nav {
  float: right;
}

.site-nav li {
  list-style: none;
  float: left;
  border-right: 1.5px solid;
}

.site-nav li:last-child {
  border: none;
}

.site-nav ul {
  -webkit-padding-start: 0px;
}

.site-nav a {
  display: block;
  text-decoration: none;
  padding: 5px 20px;
}

/* This is the clear fix method */
.group:before,
.group:after {
  content: "";
  display: table;
}

.group:after {
  clear: both;
}

.group {
  zoom: 1;
}
<div class="high group">
  <div class="container">
    <div class="left-col">
      <p>Company Name</p>
    </div>
    <aside class="right-col">
      <nav class="site-nav">
        <ul class="group">
          <li><a href="draft1-1.html">Home</a></li>
          <li><a href="contact.html" class="last">Contact Us</a></li>
          <li><a href="#about">About</a></li>
          <li><a href="#methodology">Methodology</a></li>
          <li><a href="#">Products</a></li>
        </ul>
      </nav>
    </aside>
  </div>
</div>

谢谢!

您可以对父元素使用 display: table,然后对 2 个子元素分别使用 display: table-cellvertical-align: middle

此实现不使用 float 属性。

fiddle

像这样:

/* line 45, ../scss/screen1-2.scss */
.container {
  max-width: 940px;
  margin: 0 auto;
  margin-top: 0px;
  padding-top: 0px;
  box-sizing: border-box;
  position: relative;
  display: table;
}


/* line 90, ../scss/screen1-2.scss */
.high {
  background-color: #FFF;
}
/* line 92, ../scss/screen1-2.scss */
.high .left-col {
  width: 30%;
  display: table-cell;
  vertical-align: middle;
  padding: 20px 0px;
}
/* line 95, ../scss/screen1-2.scss */
.high .left-col p {
  font-size: 140%;
}
/* line 99, ../scss/screen1-2.scss */
.high .right-col {
  width: 70%;
  display: table-cell;
  vertical-align: middle;
  top: 50%;
  bottom: 50%;
}

/* line 108, ../scss/screen1-2.scss */
.site-nav {
  float: right;
}
/* line 110, ../scss/screen1-2.scss */
.site-nav li {
  list-style: none;
  float: left;
  border-right: 1.5px solid;
}
/* line 116, ../scss/screen1-2.scss */
.site-nav li:last-child {
  border: none;
}
/* line 120, ../scss/screen1-2.scss */
.site-nav ul {
  -webkit-padding-start: 0px;
}
/* line 124, ../scss/screen1-2.scss */
.site-nav a {
  display: block;
  text-decoration: none;
  padding: 5px 20px;
}

/* This is the clear fix method */
/* line 410, ../scss/screen1-2.scss */
.group:before,
.group:after {
  content: "";
  display: table;
}

/* line 415, ../scss/screen1-2.scss */
.group:after {
  clear: both;
}

/* line 419, ../scss/screen1-2.scss */
.group {
  zoom: 1;
}
<div class="high group">
  <div class="container">
    <div class="left-col">
      <p>Company Name</p>
    </div>
    <aside class="right-col">
      <nav class="site-nav">
        <ul class="group">
          <li><a href="draft1-1.html">Home</a></li>
          <li><a href="contact.html" class="last">Contact Us</a></li>
          <li><a href="#about">About</a></li>
          <li><a href="#methodology">Methodology</a></li>
          <li><a href="#">Products</a></li>
        </ul>
      </nav>
    </aside>
  </div>
</div>

注意:我将每个元素的宽度分别从 33% 和 67% 更改为 30% 和 70%,因为导航栏不适合。

如果可以使用flexbox,可以将容器设置为display:flexjustify-content:space-between(项目在行中均匀分布;第一个项目在起始行,最后一个末行的项目)和 align-items:center(项目在横轴上居中)。请看下面的演示,我稍微简化了 HTML。

jsFiddle

.container {
  max-width: 940px;
  margin: 0 auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px 0;
  border: 1px solid;
}
.site-logo {
  font-size: 150%;
}
.site-nav ul {
  padding: 0;
  margin: 0;
}
.site-nav li {
  list-style: none;
  display: inline-block;
  border-right: 1.5px solid;
  margin: 0 0 0 10px;
  padding: 0 14px 0 0;
}
.site-nav li:last-child {
  border: none;
  padding-right: 0;
}
<div class="container">
  <div class="site-logo">Company Name</div>
  <nav class="site-nav">
    <ul>
      <li><a href="draft1-1.html">Home</a></li>
      <li><a href="contact.html" class="last">Contact Us</a></li>
      <li><a href="#about">About</a></li>
      <li><a href="#methodology">Methodology</a></li>
      <li><a href="#">Products</a></li>
    </ul>
  </nav>
</div>