【发布时间】:2016-02-04 14:18:27
【问题描述】:
我遇到的问题是在尝试为网络字体设置动画时发生的。具体来说,如果 HTML 元素有一个类定义 font-family 和 :before 元素上的其他所需 CSS 属性,而不是元素本身,则伪内容将不会动画化。
这是一些示例 CSS:
@font-face {
font-family: 'FontAwesome';
src: /** src urls here... **/
}
.fa-before:before,
.fa {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-refresh:before {
content: "\f021";
}
.spinning-loader {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
现在关键部分是我的fa 和fa-before:before 选择器。
如果我使用fa-before 类,则可以很好地设置我的:before 内容的正确font-family。此外,普通的fa 也适用于:before 内容(我认为任何其他内容也是如此)。
问题是,如果一个元素有fa-before,它不会动画(至少,不是所有 浏览器都动画它)。
<!-- This doesn't always animate -->
<i class="fa-before icon-refresh spinning-loader"></i>
<!-- This DOES always animate -->
<i class="fa icon-refresh spinning-loader"></i>
当它起作用时:
当它不起作用时:
这是一个 JSFiddle,您可以在自己的浏览器中进行测试:https://jsfiddle.net/b3gojahs/1/
以下是我能够测试的所有浏览器:
-
适用于:
- Mac OS X 10.10.5
- 铬 47.0.2526.111
- Windows 10.0.10240
- IE 11.0.10240.16644
- 边缘 10.10240.16384.0
- Mac OS X 10.10.5
-
不适用于:
- Mac OS X 10.10.5
- Chrome Canary 50.0.2639.0 (!!)
- Safari 9.0.3 (10601.4.4)
- 火狐44.0
- Windows 10.0.10240
- 铬 48.0.2564.97
- 火狐44.0
- Mac OS X 10.10.5
有人知道为什么会这样吗?我似乎找不到任何关于这个问题的文章。
【问题讨论】:
标签: css css-animations css-transforms