html - 转换延迟似乎在 "height: auto;"上被忽略

标签 html css transition

我知道我无法将元素的高度设置为从 0auto 的动画。这对我来说很好。

当您单击标题时,下面的元素应该占据它的空间并淡入。当您再次单击时,它应该淡出然后消失。

但是:似乎忽略了 height 上的延迟。这意味着,它会立即获得高度 0 然后淡出。您可以在红色边框上非常清楚地看到这一点。

有人可以解释原因以及什么是好的解决方法吗?

HTML

<h1>Minion Ipsum</h1>
<p>[…]</p>

CSS

p {
    visibility: hidden;
    opacity: 0;
    height: 0;
    overflow: hidden;
    border: 1px solid red;
    -webkit-transition: opacity 0.55s linear, visibility 0 0.6s linear, height 0 0.7s linear;
    -moz-transition: opacity 0.55s linear, visibility 0 0.6s linear, height 0 0.7s linear;
    -ms-transition: opacity 0.55s linear, visibility 0 0.6s linear, height 0 0.7s linear;
    -o-transition: opacity 0.55s linear, visibility 0 0.6s linear, height 0 0.7s linear;
    transition: opacity 0.55s linear, visibility 0 0.6s linear, height 0 0.7s linear;
}

p.active {
    visibility: visible;
    opacity: 1;
    height: auto;
    -webkit-transition: opacity 0.55s cubic-bezier(0.405, 0.145, 0.505, 1);
    -moz-transition: opacity 0.55s cubic-bezier(0.405, 0.145, 0.505, 1);
    -ms-transition: opacity 0.55s cubic-bezier(0.405, 0.145, 0.505, 1);
    -o-transition: opacity 0.55s cubic-bezier(0.405, 0.145, 0.505, 1);
    transition: opacity 0.55s cubic-bezier(0.405, 0.145, 0.505, 1);
}

测试

http://jsfiddle.net/4wqoaek2/

最佳答案

那是因为你不能使用 height: auto 进行转换。当您将 fiddle 中的高度从 auto 更改为即 20px 时,您会看到过渡正常工作。 (在 OS X 上使用 Chrome 36)

解决方法是通过 javascript 确定正确的高度并将该样式应用于 p.active

关于html - 转换延迟似乎在 "height: auto;"上被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485454/

相关文章:

css - 显示滚动条时页面大小调整和整形

jquery-mobile - 如何删除 jQuery Mobile RC2 中 URL 中的历史记录?

html - 修复简单布局中丑陋的 Bootstrap 导航栏

javascript - 在 HTML5/JavaScript 中扫描条形码

javascript - WebClientPrint 用于 Chrome 上的客户端打印 javascript 问题

javascript - 如何使这些菜单项链接到其他页面?

用于选择下拉值的 Javascript 书签?

javascript - 如何在 Angular 中动态删除 css?

html - 为什么我的不透明度过渡时间 (CSS) 不起作用? CSS block 中的其他所有内容都有效吗?

javascript - 加载页面上的 CSS3 过渡