使用CSS过渡动画最大高度

Mad*_*d0g 40 css3 css-transitions css-animations

我想创建一个仅由类名驱动的扩展/折叠动画(javascript用于切换类名).

我正在上课 max-height: 4em; overflow: hidden;

和另一个max-height: 255em;(我也尝试了价值none,根本没有动画)

这个动画: transition: max-height 0.50s ease-in-out;

我使用CSS过渡在它们之间切换,但是浏览器似乎在动画所有这些额外em的动画,因此它会在崩溃效果中产生延迟.

是否有一种方法(具有相同的精神 - 使用css类名)没有副作用(我可以放置较低的像素数,但这显然有缺点,因为它可能会切断合法的文本 - 这是价值很大的原因,所以它不会切断合法的长篇文章,只会是荒谬的长篇文章)

查看jsFiddle - http://jsfiddle.net/wCzHV/1/(单击文本容器)

ego*_*xyz 66

修复延迟解决方案

将cubic-bezier(0,1,0,1)转换函数放入元素.

.text {
  overflow: hidden;
  max-height: 0;
  transition: max-height 0.5s cubic-bezier(0, 1, 0, 1);

  &.full {
    max-height: 1000px;
    transition: max-height 1s ease-in-out;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 经过更多研究后,我可以肯定地说,这不是一个解决方案,而是一种解决方法,而且甚至不是一个好的方法。唯一发生的事情基本上是动画的持续时间较短,并且所使用的功能基本上是极端的“缓出”。所以基本上,你只是很快地收缩最大高度的 1000px,最后放慢速度,所以最后一点看起来有点像常规的“缓入缓出”。再说一次:不是修复,而是一种解决方法,而且不是一个好的方法。 (3认同)
  • 最好的方法是纯 css。感谢您的提醒,不久前失去了该曲线。 (2认同)
  • 有人可以解释在这种情况下`&.full`是什么意思吗? (2认同)
  • @Jakub `&.full` 是在说 - “当类 `.full` 被添加到具有类 `.text` 的元素时,按如下方式更新 CSS ......”它基本上是 SCSS 执行此操作的方式。 text.full {}`,这就是它在普通 CSS 中的样子。它被称为嵌套,是 Sass/SCSS 的一个特性。 (2认同)

Wil*_*ins 8

这是一个古老的问题,但我只是想办法做到这一点,并想把它粘在某处,所以我知道在哪里找到它我应该再次需要它:o)

所以我需要一个带有可点击的"sectionHeading"div的手风琴,它显示/隐藏相应的"sectionContent"div.部分内容div具有可变高度,这会产生问题,因为您无法将高度设置为100%.我已经看到其他答案建议动画最大高度,但这意味着当你使用的最大高度大于实际高度时,有时会出现延迟.

我的想法是在加载时使用jQuery来查找并明确设置"sectionContent"div的高度.然后为每个单击处理程序添加一个css类'noHeight'以切换它:

$(document).ready(function() {
    $('.sectionContent').each(function() {
        var h = $(this).height();
        $(this).height(h).addClass('noHeight');
    });
    $('.sectionHeader').click(function() {
        $(this).next('.sectionContent').toggleClass('noHeight');
    });
});
Run Code Online (Sandbox Code Playgroud)

为完整起见,相关的css类:

.sectionContent {
    overflow: hidden;
    -webkit-transition: all 0.3s ease-in;
    -moz-transition: all 0.3s ease-in;
    -o-transition: all 0.3s ease-in;
    transition: all 0.3s ease-in;
}
.noHeight {
        height: 0px !important;
}
Run Code Online (Sandbox Code Playgroud)

现在高度转换工作没有任何延迟.

  • 据我所知,此解决方案仅在内容具有固定高度(100px/100em/等)时才有效,但如果内容具有自动高度、未设置、100% 或类似的高度,则不会发生动画 (2认同)

Mad*_*d0g 5

万一有人在读此书,我还没有找到解决方案,而是采用了仅扩展效果(通过将transition样式移至扩展的类定义来实现)

  • 您介意将解决方案发布到JS小提琴或类似工具中吗? (7认同)
  • 是2016年,但仍然没有解决方案。这是一个耻辱。 (5认同)