我正在使用带有font-face(twitter bootstrap/font-awesome)的CSS变换/动画来生成一个类似微调器的gif图标。
问题是图标在360度左右时会摇摆不定。 See this JSFiddle看看我的意思。有谁知道如何让它不摆动?或者至少让它旋转得更顺一点?
以下是以下代码:
CSS:
i.icon-repeat {
-webkit-animation: Rotate 500ms infinite linear;
-moz-animation: Rotate 500ms infinite linear;
-ms-animation: Rotate 500ms infinite linear;
-o-animation: Rotate 500ms infinite linear;
animation: Rotate 500ms infinite linear;
}
@-o-keyframes Rotate {
from {-o-transform:rotate(0deg);}
to {-o-transform:rotate(360deg);}
}
@-moz-keyframes Rotate {
from {-moz-transform:rotate(0deg);}
to {-moz-transform:rotate(360deg);}
}
@-ms-keyframes Rotate {
from {-ms-transform:rotate(0deg);}
to {-ms-transform:rotate(360deg);}
}
@-webkit-keyframes Rotate {
from {-webkit-transform:rotate(0deg);}
to {-webkit-transform:rotate(360deg);}
}
@keyframes Rotate {
from { transform:rotate(0deg);}
to { transform:rotate(360deg);}
}
#iconRepeatMain{
display: inline-block;
position: absolute;
z-index:10007;
left: 50%;
top: 50%;
margin-left: -24px; /* -1 * image width / 2 */
margin-top: -24px; /* -1 * image height / 2 */
font-size:36px;
}
HTML:
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.1.1/css/bootstrap.no-icons.min.css" rel="stylesheet">
<link href="//netdna.bootstrapcdn.com/font-awesome/2.0/css/font-awesome.css" rel="stylesheet">
<i id='iconRepeatMain' class='icon-repeat' style='font-size:36px; color:red'></i>
注意:如果有人想在您自己的网络应用中使用此代码,请务必在完成所需操作后从DOM中删除此微调器。保持此图标在后台旋转会耗尽CPU,无论您不相信浏览器。此外,简单地切换其可见性,即display:none
,也不起作用。您需要将其从DOM中删除,如下所示:$('#iconRepeatMain').remove();
答案 0 :(得分:15)
默认情况下,CSS使用属性transform-origin
转换有关其垂直和水平中心的内容。此默认值的简写语法为50% 50%
,表示原点的x和y值。
对于这个图标,我发现将y原点移动到38%会使它平滑一点,但是你需要使用它来获得精确的值。 View on JSFiddle
i.icon-repeat {
-webkit-transform-origin:50% 38%;
-moz-transform-origin:50% 38%;
-ms-transform-origin:50% 38%;
-o-transform-origin:50% 38%;
transform-origin: 50% 38%;
}
有关transform-origin
媒体资源的详情,建议您the MDN article on the property.
答案 1 :(得分:4)
尝试在元素上设置特定的高度和宽度。通过反复试验,我发现添加:
#iconRepeatMain {
width: 26px;
height: 19px;
}
很好地使字体居中,似乎消除了摇摆。但是,这可能取决于使用的浏览器 - 彻底测试它。
答案 2 :(得分:3)
我没有在Font Awesome网站的页面中看到它,但CSS源代码显示了一个图标旋转类,它无休止地旋转图标,对于你的图标重复标识,几乎没有摆动。
<i class="icon-repeat icon-spin"></i>
...虽然我猜它真的是用于icon-spinner图标:
<i class="icon-spinner icon-spin"></i>
编辑:d'oh ...这依赖于比你的例子更新的字体awesome.css。所以也许答案只是他们自己解决了摇摆。 icon-spin类是新的。
答案 3 :(得分:0)
我如何通过图标字体的偏心旋转解决了我的问题: 我必须解决几个问题: 1.图标大小:它必须是整个px大小(例如font-size:small;使我的图标为17.5px因此中心不是转换的绝对中心) 2.定义显示:图标级别的块使其在父div的中间正确居中 3.定义父div的精确平方大小(在我的情况下按钮)和固定填充使其正确居中 4.添加任何文本阴影将改变内部图标的大小,使其不在中心。诀窍是将悬停样式更改为与我的情况下背景颜色相同的阴影
所以这是代码:
CSS:
button.close {
padding: 10px;
opacity: 0.8;
text-shadow: 1px 1px 1px #999;
width: 40px;
height: 40px;
}
button.close i{
font-size: 20px;
max-width: 20px;
max-height: 20px;
display: block;
}
button.close:hover {
text-shadow: 1px 1px 1px #fff;
}
/* rotation CSS*/
@keyframes anim-rotate {
0% {
-moz-transform:rotate(0);
-webkit-transform:rotate(0);
transform:rotate(0);
}
100% {
-moz-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes anim-rotate-next {
0% {
-moz-transform:rotate(0);
-webkit-transform:rotate(0);
transform:rotate(0);
}
100% {
-moz-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
.rotate{
animation: anim-rotate-next 1s normal linear;
}
.rotate.down{
animation: anim-rotate 1s normal linear;
}
HTML:
<button type="button" class="close"><i class="lnr lnr-sync rotate"></i></button>
最后用于切换旋转类的JQuery JQuery的:
$("#parentDiv").on('click', 'i.lnr-sync', function () {
// rotiraj ikonu
$(this).toggleClass("down");
});