长期以来,WebKit 中一直存在一个错误,即伪元素(如 ::before 和 ::after)无法进行动画或过渡。截至 昨天,由于 Elliott Sprehn 的努力,该错误已修复。您可以打开 Google Chrome Canary 并 查看其运行情况。
他在票证中指出
新的基于 DOM 的 :before 和 :after 伪元素已经支持动画和过渡,但我禁用了支持,以便我们能够在单独的步骤中启用它们。
基于 DOM 嗯?我想知道这到底是什么意思。例如,我们能否将事件绑定到它们?我在 Chrome 开发工具中没有看到它们有任何不同。如果有人知道,请告诉我。
为了记录,Firefox 一直支持此功能。Safari 很可能会在下次更新时支持它(它们是所有浏览器中更新速度最慢的)。Opera 尚不支持。我不确定这种事情是如何传播到移动 WebKit 的。
IE 10 支持伪元素上的动画。过渡也是如此,但有一个奇怪的警告
.x:hover:before { /* By itself, doesn't work */ }
.x:hover {}
.x:hover:before { /* This works (needs :hover declared) */ }
演示视频 由 Caleb Kester 提供。
我已经很高兴地更新了 这张图表。
我在 Chrome Canary 26.0.1373.0 上,没有看到任何动画或过渡。我需要配置什么吗?或者 Canary 的最新版本尚未推送给我?
嘿詹姆斯,它应该开箱即用。对我来说就是这样。
詹姆斯,我也有同样的问题。转到选项 -> 关于 Google Chrome,它可能会检查是否有更新的版本可用。我的花了点时间才找到它,然后它要求我重新启动新版本。
如前所述,它在 Firefox 中也有效,因此也打开 Firefox 来查看其运行情况。
我很高兴这终于可以用了。几个月前我尝试在我的投资组合网站上实现一个动画伪元素,但由于 WebKit 错误,不得不切换到使用实际的 HTML 元素。希望它能尽快推出到 Chrome 稳定版渠道。
幸运的是,此修复也适用于 display: box 和 box-ordinal-group 重新排序,它们会导致 :before 内容卡在第一个子元素之上,即使它被重新定位。
演示
胡扎!我一直将它们放到东西中(例如我网站上的导航),只是为了这样做,即使当时它只在 FireFox 中运行。状态仍然会像预期的那样改变,只是它们没有过渡,因此我谨慎地只对那些不需要过渡才能有意义的事情这样做:最终状态就足够了。也就是说,假设一切顺利,一旦它进入稳定构建,它将在 webkit 中正常工作。所以我说“胡扎!”
这是一个好消息,我计划在一段时间前使用伪元素来进行我们 UI 中的一些细微过渡提示,但我不得不放弃,因为我无法干净地进行动画。期待与它们一起玩!
这是一个巨大的消息。多年来一直在等待这个,感谢 Chrome 开发团队!
太棒了。我之前遇到过这个问题,而且很恼火。但我还是决定让我的代码继续运行
对此感到超级兴奋。开辟了许多很棒的机会!
“基于 DOM 嗯?我想知道这到底是什么意思” -> 事实上,这意味着在幕后,我们将它们实现为常规的 DOM 节点(为了简单起见),但它没有公开,因为伪元素是不可访问的(就像今天一样)。这是一个关于我们在 WebKit 中如何处理它的实现细节,但对用户来说应该无关紧要。希望这有帮助。
在 Chrome Android 上尝试了 codepen:没有。动画。
啥
一年后又坏了?codepen 中的动画部分在 Chrome 32.0.1700.107 和 Android 上的 Chrome 中不起作用 :-( 不过在 Firefox 中有效。
怎么了?