Safari 不采用添加的过渡属性 class
Safari not taking on the transition properties from added class
Fiddle for testing (click the black container)
我有一个动画,我正在使用一系列 div 进行编码,我要从中添加和删除 class。动画已完成,并在 Firefox 和 Chrome 中正常运行。但是,我在 Safari 中遇到了问题:对象没有采用新添加的 class 中的 transition
属性,并且仅使用其初始 transition
中的属性 class.
例如:
div既有.circle
class,也有.circle.grow
class,是我想做圆的时候加的div 更大。你可以看到在class的增长中,div已经取代了.grow
的transform
属性,其中它的比例返回到(1,1 ).但是,.grow
中包含的 transition
不会添加会转换比例的 transition
,而是坚持 .circle
中出现的初始 transition
属性,它不会转换转换 属性。结果,当添加 .grow
时,圆只是跳到新的比例。
如前所述,它在 Chrome 和 Safari 中运行良好,承担 .grow
的转换 属性。有谁知道为什么会这样?
编辑 1: 经过更多测试后,我尝试从初始圆 class 中删除 transition
属性。但是,在添加 circle.grow
class 时,transition
属性仍被划掉,并且应用了其中的 none,尽管没有任何东西可以恢复。也许 transition
属性 在 .circle.grow
中的定义方式对 Safari 来说是无效的?据推测,我可以将 transition
属性 放回基础 .circle
class,如果它是 transition
,它会被 .cricle.grow
覆盖有效。但它不是 (?)
SO:代码有什么问题:
transition: transform 0.3s, width 0.3s;
-moz-transition: transform 0.3s, width 0.3s;
-webkit-transition: transform 0.3s, width 0.3s;
这会让 Safari 无法读取或执行它?
啊!我已经解决了!考虑到它在 Chrome / FF 中以其他方式工作,这是一个奇怪的问题,但应该是显而易见的。
解决方案很简单:Safari 将只执行 -webkit- 转换。但是当它尝试时,其中之一是转换 属性,Safari 不接受它。我需要做的就是在每个 transform
各自的供应商前缀 transition
中添加供应商前缀。像这样:
transition: transform 0.3s, width 0.3s;
-moz-transition: -moz-transform 0.3s, width 0.3s;
-webkit-transition: -webkit-transform 0.3s, width 0.3s;
看起来是语法问题。
CSS:
.circle.grow {
transition: transform 0.3s, width 0.3s;
-moz-transition: transform 0.3s, width 0.3s;
-webkit-transition: -webkit-transform 0.3s, width 0.3s;
transform: translate(-50%,-50%) scale(1,1);
-moz-transform: translate(-50%,-50%) scale(1,1);
-webkit-transform: translate(-50%,-50%) scale(1,1);
}
Fiddle for testing (click the black container)
我有一个动画,我正在使用一系列 div 进行编码,我要从中添加和删除 class。动画已完成,并在 Firefox 和 Chrome 中正常运行。但是,我在 Safari 中遇到了问题:对象没有采用新添加的 class 中的 transition
属性,并且仅使用其初始 transition
中的属性 class.
例如:
div既有.circle
class,也有.circle.grow
class,是我想做圆的时候加的div 更大。你可以看到在class的增长中,div已经取代了.grow
的transform
属性,其中它的比例返回到(1,1 ).但是,.grow
中包含的 transition
不会添加会转换比例的 transition
,而是坚持 .circle
中出现的初始 transition
属性,它不会转换转换 属性。结果,当添加 .grow
时,圆只是跳到新的比例。
如前所述,它在 Chrome 和 Safari 中运行良好,承担 .grow
的转换 属性。有谁知道为什么会这样?
编辑 1: 经过更多测试后,我尝试从初始圆 class 中删除 transition
属性。但是,在添加 circle.grow
class 时,transition
属性仍被划掉,并且应用了其中的 none,尽管没有任何东西可以恢复。也许 transition
属性 在 .circle.grow
中的定义方式对 Safari 来说是无效的?据推测,我可以将 transition
属性 放回基础 .circle
class,如果它是 transition
,它会被 .cricle.grow
覆盖有效。但它不是 (?)
SO:代码有什么问题:
transition: transform 0.3s, width 0.3s;
-moz-transition: transform 0.3s, width 0.3s;
-webkit-transition: transform 0.3s, width 0.3s;
这会让 Safari 无法读取或执行它?
啊!我已经解决了!考虑到它在 Chrome / FF 中以其他方式工作,这是一个奇怪的问题,但应该是显而易见的。
解决方案很简单:Safari 将只执行 -webkit- 转换。但是当它尝试时,其中之一是转换 属性,Safari 不接受它。我需要做的就是在每个 transform
各自的供应商前缀 transition
中添加供应商前缀。像这样:
transition: transform 0.3s, width 0.3s;
-moz-transition: -moz-transform 0.3s, width 0.3s;
-webkit-transition: -webkit-transform 0.3s, width 0.3s;
看起来是语法问题。
CSS:
.circle.grow {
transition: transform 0.3s, width 0.3s;
-moz-transition: transform 0.3s, width 0.3s;
-webkit-transition: -webkit-transform 0.3s, width 0.3s;
transform: translate(-50%,-50%) scale(1,1);
-moz-transform: translate(-50%,-50%) scale(1,1);
-webkit-transform: translate(-50%,-50%) scale(1,1);
}