CSS vh и vw: Почему мой div совпадает с div над ним?

В следующем SSCCE, почему #sliderArea div перекрывают #topBar Div над ним, в то время как div такое элемент уровня блока?

Я ожидал, что он появится ниже #topBar?

JsFiddle здесь.

#left-div {
  float: left;
}
#right-div {
  float: right;
}
a {
  margin: 10px;
}
#topBar {
  width: 100%;
}
#sliderArea {
  background-color: yellow;
  width: 100vw;
  height: 100vh;
}
#four-cols {
  margin: 5px 100px 5px 100px;
}
#col-one {
  background-color: orange;
  height: 125px;
  width: 100px;
  display: inline-block;
}
#col-two {
  background-color: blue;
  height: 125px;
  width: 100px;
  display: inline-block;
}
#col-three {
  background-color: green;
  height: 125px;
  width: 100px;
  display: inline-block;
}
#col-four {
  background-color: red;
  height: 125px;
  width: 100px;
  display: inline-block;
}
<div id="topBar">
  <div id="left-div">
    <a href="#">Login</a>
  </div>
  <div id="right-div">
    <a href="#">Menu One</a>
    <a href="#">Menu Two</a>
  </div>
</div>
<div id="sliderArea"></div>
<div id="four-cols">
  <div id="col-one"></div>
  <div id="col-two"></div>
  <div id="col-three"></div>
  <div id="col-four"></div>
</div>

4 ответа

Решение

Вам нужно очистить floats:

div{ clear:both; }

JSFiddle

Или только для #sliderArea элемент:

JSFiddle

Потому что float из детей вам нужно будет добавить

#topBar {
 width: 100%;
 overflow: hidden; <-- add this
}

или же

#topBar {
 width: 100%;
 display: inline-block; <-- add this
}

который будет clear floats

демо - http://jsfiddle.net/qbx5vwy5/6/

Добавьте к своему CSS:

#topBar {
width: 100%;
overflow: hidden;
}

Добавив overflow: скрытый в обертку плавающих элементов, браузер может рассчитать ее высоту.

Вы можете добавить очистить, где вы хотите их очистить. JSFiddle

.clear {
    clear: both;
}

Когда вы не очищаете поплавки, они просто слипаются. Добавив clear, вы остановите и начнете "новый" float, если это необходимо:)

Другие вопросы по тегам