【问题标题】:CSS Transition of fading out but some space still remains in the place of the elementCSS 淡出过渡,但元素位置仍保留一些空间
【发布时间】:2020-04-17 12:01:33
【问题描述】:

我有一个垂直排列的 div 列表,我试图在单击按钮时使某个元素淡出。随着内容变得不可见,我还需要将其高度和宽度设为 0 以释放空间。如果我一次完成所有转换,div 将改变高度和宽度,并且文本在变得不可见之前会奇怪地拉伸。我尝试修复它是在高度/宽度转换上添加延迟,这似乎有效,但在 div 所在的地方,仍然有一些空间,比如边距。我也尝试将边距/填充转换为 0,但它没有做任何事情。

.list-element
    background-color: #E7E9EB;
    border-radius: 5px;
    margin: 20px;
    padding: 15px;
    display: flex;
    width: 100%;

我正在使用 React,并且在按下按钮时将以下类动态添加到 div。

.list-element-approved
    opacity: 0;
    height: 0;
    width: 0;
    margin: 0;
    padding: 0;
    color: rgba(0, 0, 0, 0);
    transition: height 0.1s 1s, width 0.1s 1s, margin 0.5s 1s, padding 0.5s 1s, opacity 0.5s;

过渡后留下空间的原因是什么?我怎样才能摆脱它?

【问题讨论】:

    标签: html css css-transitions


    【解决方案1】:

    发生这种情况是因为尽管您已通过将已批准列表元素的高度设置为零来使其不可见,但它仍然存在。周围的可见列表元素与它们的邻居有 20 像素的边距,而不可见的邻居仍然存在。因此,两个可见列表项之间的总边距以及它们之间的一个不可见列表项是 40 像素。

    以下是解决此问题的方法:

    .list-element-approved {
      ...
      margin: 0 0 -20px 0;
      ...
    }
    

    或者,您必须完全删除已批准的列表项,但这会使您的过渡效果失效。

    【讨论】:

    • 谢谢,确实是这个问题。由于某种原因,它只需要 -10px,因为 -20px 将它们粘在一起,根本没有空间。
    • 它与边距折叠有关,当您删除元素高度和边距时,它之前的边距和折叠后的边距与它一起,因为它没有完全删除,这使得总数空间的40px 因为每个都有20px
    猜你喜欢
    • 2012-07-25
    • 2012-08-24
    • 1970-01-01
    • 2016-06-27
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多