css 一个元素消失后的平滑过渡

bvhaajcl  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(198)

我在做一个插件。我想做一个平滑的过渡效果,以其他元素时,他们是自动来填补空间后,一个特定的元素成为显示:无;.我尝试对所有元素使用过渡,但它不起作用。它们仍然以无聊的默认动画移动。我需要知道一个方法来实现这一点。
先谢谢你。
所以我在一个容器中有多个子元素。当用户单击一个按钮时,我切换一个名为“hide”的CSS类,使其中一个子元素消失,在它消失后,其他子元素自动填充空间。如何为子元素创建平滑过渡?此外,这些子元素内部也有一些内容。

CSS

.hide{
 display:none;
}
.child{
 transition: all 500ms linear;
}

HTML

<section class="container">
  <div class="child" ></div>
  <div class="child" ></div>
  <div class="child" ></div>
  <div class="child" ></div>
</section>

示例codepen https://codepen.io/luke-fer/pen/NWEbaBv

suzh9iv8

suzh9iv81#

如何显示动画:无

display: none通常导致动画停止。然而,有一个技巧,使它的工作描述:
So, you’d like to animate the display property
简而言之,动画元素需要在display: blockdisplay: none之间转换。显然,这不能在所有情况下都使用,但它适用于这个问题,而且很好知道。

代码片段

// hide each DIV in the container sequentially

document.querySelector('section')
  .addEventListener('transitionend', function(e) {

    console.log(e.type,
      e.propertyName,
      e.target.tagName,
      e.target.innerText
    );

    // There is one event per animated property, so need to check which
    
    if (e.propertyName === 'display') {
      this.querySelector('div:not(.hide)')?.classList.add('hide');

    }
  });

// start by hiding the first DIV

setTimeout(() =>
  document.querySelector('section div:first-child').classList.add('hide'),
  500);
section div {
  font-size: 1.4rem;
}

.hide {
  transition: opacity, display;
  transition-duration: 1s;
  transition-delay: 0.5s;
  display: none;
  opacity: 0;
}
<section>
  <div>Lions</div>
  <div>Tigers</div>
  <div>Bears</div>
  <div>Elephants</div>
  <div>Zebras</div>
</section>

相关问题