元素隐藏时是否禁用CSS3转换



我注意到(在Chrome 43中使用jQuery)当元素具有display: none时,转换将被禁用。在所有浏览器上,这种标准化的行为是jQuery的一个特性,还是在生产中不能依赖它?

当在延迟函数中更改要设置动画的CSS语句时,将启用转换。看看这个JSFiddle。取消注释第3行6行,以便自己查看。


解决方案:

在生产中不能依赖这种行为,因为它似乎是优化/设计选择的产物,而不是规范(根据@Andriy Horens的回答)。相反,您应该使用类打开和关闭动画(transition-property: none。在Chrome 43中,由于没有使用类,它变得不可靠。Chrome还需要单独的框架(将代码延迟到0超时)来更新一些CSS语句。如果你想节省开发时间,只需推迟任何与动画相关的事情。

根据MDN:

显示器

除了许多不同的显示框类型外,值none还可以关闭元素的显示;当您使用none时,所有子代元素的显示也将关闭。文档将被呈现为该元素不存在于文档树中。

因此,我认为display设置为none的元素不会在所有浏览器中呈现,因此不会应用过渡或任何其他视觉效果。

您也可以通过订阅transitionend事件来测试自己:

$(element).on("transitionend", function () {
     console.log("transition ended");
});

更新:

它也符合w3c规范:

某些值(如display:none、display:contents和box suppress:discard)会导致元素和/或其子体根本不生成任何框。

其中,框是元素的视觉表示。过渡肯定是视觉表示的一部分,因为它也会影响布局,例如,当您在应用过渡的情况下更改元素的相对位置时。


这里是具有display : nonevisibility : hidden的元素的动画(换句话说,渲染的元素和未渲染的元素)如何不同的又一个示例。

JSFiddle演示

相关内容

  • 没有找到相关文章

最新更新