在CSS过渡期间Div消失了

时间:2017-11-08 23:29:54

标签: css html5 css3 bootstrap-4

我有两个divs彼此相邻。单击一个按钮,左边的div向左折叠,只留下右边的div。由于右边的div是宽度:100%;它填充了折叠的左div留下的空间。唯一的问题是,当div崩溃/ CSS转换正在进行时,正确的div消失片刻,我无法弄清楚原因。

HTML

<div>
  <div id="demo" class="collapse show width">
    <aside>
    </aside>
  </div><!--COLLAPSE-->

  <main>
    <button role="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo">
      simple horizontal collapsible
    </button>
    <div class="sample">
      Some TExt
    </div>
  </main>
</div>

CSS

html {
  height: 100%
}

body {
  height: 100%;
  font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
  background: gray;
}

a {
  color: #00B7FF;
}

.collapse {
  visibility: hidden;
}

.collapse.show {
  visibility: visible;
  display: block;
}

.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.45s;
  transition-duration: 0.45s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}

.collapsing.width {
  -webkit-transition-property: width, visibility;
  transition-property: width, visibility;
  width: 0;
  height: auto;
}

aside {
  height: 100vh;
  width: 250px;
  background-color: white;
  /*border-right:1px solid black;*/
  display: block;
  float: left;
}

.sample {
  margin-top: 100px;
  text-align: center;
}

main {
  width: 100%;
  height: 100vh;
  background-color: pink;
  display: inline;
}

现场例子

https://jsfiddle.net/djjvqtop/1/

这种情况发生在所有浏览器中。有办法防止这种情况吗?

1 个答案:

答案 0 :(得分:2)

问题是由添加overflow: hidden更改#demo的高度这一事实引起的。最初它是0,因为它只包含float元素。类.collapsing添加overflow: hidden,这会使其展开以包含浮点数。因此,#demo.collapsing的高度为<aside>,而<main>元素位于其下方且不在视线范围内。

一种解决方案是让#demo也向左浮动。