我想对已display: none
设置的元素进行 css 转换。考虑以下代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Transition From Hidden</title>
<style type="text/css">
div {
-webkit-transition-property: all;
-webkit-transition-duration: 2s;
}
div.hidden {
display: none;
opacity: 0;
}
div.from {
opacity: 0;
}
</style>
<script type="text/javascript">
function loaded() {
var e = document.getElementById("foo");
e.className = "from";
window.webkitRequestAnimationFrame(function(t) {
e.className = null;
});
}
</script>
</head>
<body onload="loaded()">
<div id="foo" class="hidden">
My test div
</div>
</body>
</html>
我想从class="div.hidden"
to class=""
,即从display: none; opacity: 0;
todisplay: block; opacity: 1;
但是,在 chrome 中(至少)一个display: none
没有动画的对象。元素立即进入结束状态。
我的解决方法是首先将元素设置为display: block; opacity: 0;
,然后在下一帧中进行转换(使用. 这有点尴尬,我在规范requestAnimationFrame()
中找不到这种行为的任何解释。我知道我可以使用-属性,但我不想使用它,因为我不想布局隐藏元素。visibility
所以,问题是:这是正确的行为还是错误?如果这是正确的行为,是否有更好的方法来编写代码?请注意,我不是在问是否有任何库可以做到这一点,我想知道是否有更好的方法可以直接在 DOM 上做到这一点。