通常对于这些实验性功能(所以一般来说,如果您不确定,请查一下)最好查一下浏览器是否支持。由于并非所有主流浏览器都完全支持过渡,因此您需要为所有尚不完全支持它的浏览器添加前缀。因此,根据MDN's Browser support list 和Statcounter's browser usage stats,您应该有以下内容:
.revision-span-in {
opacity: 0;
}
.revision-span:not(.revision-span-out) {
transition: 1s;
-o-transition: 1s;
-webkit-transition: 1s;
}
.revision-span-out {
position:absolute;
opacity: 0;
}
由于两个 webkit 浏览器都没有一个不完全支持没有前缀的通用版本,并且 firefox 不需要前缀,这应该可以工作。您遇到的问题表明您已经有一段时间没有更新您的 Firefox,如果您要测试您的网站在其他浏览器中的外观,我强烈建议您确保您已获得最新版本。 Firefox 从版本 16 开始支持不带 -moz- 前缀的语法,现在是版本 26(目前最常用的是 25)。
当然,如果你真的想要支持由于自动更新而几乎没人使用的浏览器(例如 Firefox Zach Saucier (删除了他的答案) JoshC 说还包括-moz- 前缀。不过,-ms- 前缀根本不需要,因为支持转换的每个版本的 IE 也都支持它,而不需要那个前缀。
编辑:为Android/Blackberry default browser 添加了-webkit-。
额外位(在看到添加的保管箱链接后)
考虑到 Dropbox 链接,我认为导致它的原因是:Firefox 在第二个元素出现时仍在为第一个元素设置动画,因此它不会重新启动动画。
这可以解释为什么它随机发生:它仅在 Firefox 有几毫秒的延迟时发生,并且 Firefox 从第二个动画的起点继续播放第二个项目的动画。这可能是由于您的项目是嵌套的,因此第一行的动画会被第二行的动画继承,依此类推。
由于您的动画长度正好是 0.5 秒,并且显示元素之间的间隔也正好是 0.5 秒,如果有一点延迟,就会导致这些问题。我建议在显示每个元素(可能是 10 或 50 毫秒左右)或将项目从嵌套方法更改为同级方法之间留出一点额外的空间。所以,而不是这个:
<div class="body content">
<span class="first">500ms
<span class="second">500ms
<span class="third">500ms
<span class="fourth">500ms</span>
</span>
</span>
</span>
</div>
使用这个:
<div class="body content">
<span class="first">500ms</span>
<span class="second">500ms</span>
<span class="third">500ms</span>
<span class="fourth">500ms</span>
</div>
因此,不要将跨度附加到当前跨度,而是将其附加到父元素.body.content。我会给你一个演示,但你的脚本看起来非常复杂(可能是因为它是由某些东西生成的),所以你必须自己尝试这样做。您还可以尝试在每个项目的动画开始之间放置一点额外的空间,看看是否可以解决问题。