悬停时平滑 CSS 旋转动画
Smooth CSS rotate animation on hover
我创建了一个按钮,我希望它在鼠标悬停时旋转 360 度,并在鼠标悬停时旋转反向词 360 度。到目前为止它运行良好,但如果你用鼠标慢慢靠近它,它会闪烁。
这是代码的简短版本:
.btn {
display: block;
margin: 60px auto;
width: 250px;
padding: 15px;
position: relative;
color: #3498db;
font-weight: 300;
font-size: 24px;
text-decoration: none;
border: 5px solid #3498db;
transform: rotate(360deg);
transition: all 0.5s;
transition-timing-function: cubic-bezier(1, 0.8, 0.5, 1);
}
.btn-rotate:hover {
transform: rotate(0deg);
transition-delay: 0;
transition: all 0.5s;
}
<a href="#" class="btn btn-rotate">I am a button!</a>
有关完整代码,请查看 codpen 演示 http://codepen.io/andornagy/pen/ojBNZx
出现闪烁问题是因为,当您将鼠标悬停在元素上时,元素开始旋转。旋转 x 度后,元素会 旋转到一定程度,并且 mouse/cursor 不再位于元素 上。
这就是闪烁发生的原因。
对比上面那个,感觉用wrapper(div),分析了可能需要多大的宽度,我们设置为div。在 div:hover 元素上,我们可以执行转换。与现在相比,它提供了更好的结果。
这是fiddle
.buttonHolder {
padding: 50px;
}
.buttonHolder:hover .btn-rotate {
transform: rotate(360deg);
transition-delay: 0;
transition: all 0.6s;
}
这是一个想法,它仅在您悬停时添加一个额外的伪元素:
.btn:after {
content: '';
width: 300px;
height: 150px;
display: none;
position: absolute;
top: 50%;
left: 50%;
border-radius: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.btn:hover:after {
display: block;
}
给它加一点背景色,这样可以更好地看到发生了什么...
为了最大程度的控制,我会求助于一些 JavaScript。
我创建了一个按钮,我希望它在鼠标悬停时旋转 360 度,并在鼠标悬停时旋转反向词 360 度。到目前为止它运行良好,但如果你用鼠标慢慢靠近它,它会闪烁。
这是代码的简短版本:
.btn {
display: block;
margin: 60px auto;
width: 250px;
padding: 15px;
position: relative;
color: #3498db;
font-weight: 300;
font-size: 24px;
text-decoration: none;
border: 5px solid #3498db;
transform: rotate(360deg);
transition: all 0.5s;
transition-timing-function: cubic-bezier(1, 0.8, 0.5, 1);
}
.btn-rotate:hover {
transform: rotate(0deg);
transition-delay: 0;
transition: all 0.5s;
}
<a href="#" class="btn btn-rotate">I am a button!</a>
有关完整代码,请查看 codpen 演示 http://codepen.io/andornagy/pen/ojBNZx
出现闪烁问题是因为,当您将鼠标悬停在元素上时,元素开始旋转。旋转 x 度后,元素会 旋转到一定程度,并且 mouse/cursor 不再位于元素 上。 这就是闪烁发生的原因。
对比上面那个,感觉用wrapper(div),分析了可能需要多大的宽度,我们设置为div。在 div:hover 元素上,我们可以执行转换。与现在相比,它提供了更好的结果。
这是fiddle
.buttonHolder {
padding: 50px;
}
.buttonHolder:hover .btn-rotate {
transform: rotate(360deg);
transition-delay: 0;
transition: all 0.6s;
}
这是一个想法,它仅在您悬停时添加一个额外的伪元素:
.btn:after {
content: '';
width: 300px;
height: 150px;
display: none;
position: absolute;
top: 50%;
left: 50%;
border-radius: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.btn:hover:after {
display: block;
}
给它加一点背景色,这样可以更好地看到发生了什么...
为了最大程度的控制,我会求助于一些 JavaScript。