【发布时间】:2015-01-10 02:14:25
【问题描述】:
我有一个 CSS3 过渡,我缩小了元素的高度。我这样做是:
- 类中指定的 CSS3 过渡和目标高度(例如,类中的高度:5px)
- 将 height=$el.height() 分配给样式属性中的元素(例如,样式上的 height:100px)
- 向元素添加类
- 移除 style 属性中定义的高度
- 计算的 CSS 值从样式的 100 像素更改为类的 5 像素,这会触发过渡
我发现设置 CSS3 过渡触发器似乎存在延迟,如果步骤 #4 在 #3 之后过早完成,触发器将看到高度最初是自动的,而不是 100px,并且没有发生过渡(由于 CSS3 的另一个限制,您不能从 height:auto 过渡到 height:x)。
这是实际代码:
$(document).ready(function() {
$a = $('#box'); // height:auto, not specified
$a.css('height',$a.height()); // height:100px on style;
$a.addClass('shrink'); // height:100px on style, height:5px on class
$a.css('height',''); // height removed from style, falls back to 5px on class
});
这是一个演示问题的 JSFiddle:http://jsfiddle.net/1escyLqf/2/
在小提琴中,如果我在删除高度值之前添加 20 毫秒的延迟,则过渡有效。如果您注释掉该行并在添加类后立即调用 css('height',''),则速度太快且不会发生转换。
这是 CSS3 过渡的浏览器实现中的错误吗?或者我真的需要添加超时吗?
【问题讨论】:
-
可能最好避开类,直接设置高度。从 / 转换到
auto永远不起作用 -
查看 jsfiddle - 它可以工作(因为我们将高度设置为 $el.height() 作为解决方法)。时间是唯一的问题。
标签: javascript css css-transitions