CSS3 - 悬停时的动画 Scale/Rotate
CSS3 - Animation Scale/Rotate on Hover
我尝试并编写了这段代码,但它有一个问题,第一个问题是 div 中的文本会变得模糊(蓬松)!和第二个缩放动画不轻柔地播放,我想要的只是轻柔地播放动画,缩放一次然后在悬停时无限旋转。
@-webkit-keyframes socialspin {
from {
-webkit-transform: scale(2) rotate(0deg);
-moz-transform: scale(2)rotate(0deg);
-ms-transform: scale(2) rotate(0deg);
-o-transform: scale(2) rotate(0deg);
transform: scale(2) rotate(0deg);
}
to {
-webkit-transform: scale(2) rotateY(90deg);
-moz-transform: scale(2) rotateY(90deg);
-ms-transform: scale(2) rotateY(90deg);
-o-transform: scale(2) rotateY(90deg);
transform: scale(2) rotateY(90deg);
}
}
这里是JSFiddle演示
here 是示例,重点是首先将主要 div 中的所有功能描述为默认值,因为动画使用主要元素规则来计算时间等。
第二点在这里你使用了 90 度转弯,但是完全转回可以通过 180 度来完成,这是一条线的角度
这是代码
--更新--
here 是您可以看到缩放动画的示例问题出在您的动画缩放中,从 2 开始并以 2 结束,因此没有动画
- 更新 -
如果你先 运行 过渡,然后在过渡 运行 时让动画等待动画的延迟时间,我们就开始了它工作正常你可以看到 here
div {
width: 200px;
height: 200px;
background: yellow;
-webkit-transform:scale(1) rotate(0);
transform:scale(1) rotate(0);
margin-left:200px;
margin-top:50px;
transition:-webkit-transform .5s linear;
transition:transform .5s linear;
}
div:hover {
-webkit-transform:scale(2) rotate(0);
transform:scale(2) rotate(0);
-webkit-animation: socialspin 5s linear .5s infinite alternate;
-moz-animation: socialspin 5s linear .5s infinite alternate;
}
@-webkit-keyframes socialspin {
from {
-webkit-transform: scale(2) rotate(0deg);
transform:scale(2) rotate(0deg);
}
to {
-webkit-transform: scale(2) rotateY(180deg);
transform: scale(2) rotateY(180deg);
}
}
我们目前还不能完全让字体清晰。这是因为您正在使用动画。如果没有旋转,文字就不会模糊。但是,我们可以尝试使用几个字体平滑属性来尝试解决这个问题。 None 其中非常好,但它们确实略微提高了易读性。
无论如何,这里是第二部分的修复:
我发现了一个黑客。这将在旋转过程中消除模糊,但在放大过程中不会。
.square {
width:100px;
height: 100px;
background-color:black;
margin: 50px;
}
p {
-webkit-font-smoothing: antialiased;
color:white;
text-align: center;
padding-top: 35px;
}
.square:hover {
-webkit-animation: scale 1s linear 0s 1, spin 1s linear 1s infinite alternate;
}
.square:hover p{
-webkit-animation: scaletext 1s linear 0s 1;
}
@-webkit-keyframes scale {
from {transform: scale(1); }
to{transform: scale(2);}
}
@-webkit-keyframes scaletext {
from {transform: scale(1); }
to{transform: scale(1);}
}
@-webkit-keyframes spin {
from {transform: rotateY(0deg) scale(2) ;}
to {transform: rotateY(90deg) scale(2);}
}
<div class="square">
<p>Some text</p>
</div>
(我删除了前缀以压缩答案)
最好的平滑效果不是放大(scale=2)而是缩小(scale=0.5),当然是相反的状态。
而且我不相信一个动画就能达到你想要的效果。我使用了 2 个元素,一个处理旋转,另一个处理比例
#container {
width: 400px;
height: 400px;
}
#container:hover {
-webkit-animation: socialspin 5s linear 0s infinite alternate;
}
@-webkit-keyframes socialspin {
from { -webkit-transform: rotate(0deg); }
to { -webkit-transform: rotateY(90deg); }
}
@keyframes socialspin {
from { transform: rotate(0deg); }
to { transform: rotateY(90deg); }
}
#base {
width: 400px;
height: 400px;
background: yellow;
transform: scale(0.5);
transition: transform 5s;
transform-origin: top left;
font-size: 200%;
}
#container:hover #base {
transform: scale(1);
}
<div id="container">
<div id="base">
<br>
<br>
<br>
HELLLLOOOO!!!
</div>
</div>
我尝试并编写了这段代码,但它有一个问题,第一个问题是 div 中的文本会变得模糊(蓬松)!和第二个缩放动画不轻柔地播放,我想要的只是轻柔地播放动画,缩放一次然后在悬停时无限旋转。
@-webkit-keyframes socialspin {
from {
-webkit-transform: scale(2) rotate(0deg);
-moz-transform: scale(2)rotate(0deg);
-ms-transform: scale(2) rotate(0deg);
-o-transform: scale(2) rotate(0deg);
transform: scale(2) rotate(0deg);
}
to {
-webkit-transform: scale(2) rotateY(90deg);
-moz-transform: scale(2) rotateY(90deg);
-ms-transform: scale(2) rotateY(90deg);
-o-transform: scale(2) rotateY(90deg);
transform: scale(2) rotateY(90deg);
}
}
这里是JSFiddle演示
here 是示例,重点是首先将主要 div 中的所有功能描述为默认值,因为动画使用主要元素规则来计算时间等。 第二点在这里你使用了 90 度转弯,但是完全转回可以通过 180 度来完成,这是一条线的角度 这是代码
--更新-- here 是您可以看到缩放动画的示例问题出在您的动画缩放中,从 2 开始并以 2 结束,因此没有动画 - 更新 - 如果你先 运行 过渡,然后在过渡 运行 时让动画等待动画的延迟时间,我们就开始了它工作正常你可以看到 here
div {
width: 200px;
height: 200px;
background: yellow;
-webkit-transform:scale(1) rotate(0);
transform:scale(1) rotate(0);
margin-left:200px;
margin-top:50px;
transition:-webkit-transform .5s linear;
transition:transform .5s linear;
}
div:hover {
-webkit-transform:scale(2) rotate(0);
transform:scale(2) rotate(0);
-webkit-animation: socialspin 5s linear .5s infinite alternate;
-moz-animation: socialspin 5s linear .5s infinite alternate;
}
@-webkit-keyframes socialspin {
from {
-webkit-transform: scale(2) rotate(0deg);
transform:scale(2) rotate(0deg);
}
to {
-webkit-transform: scale(2) rotateY(180deg);
transform: scale(2) rotateY(180deg);
}
}
我们目前还不能完全让字体清晰。这是因为您正在使用动画。如果没有旋转,文字就不会模糊。但是,我们可以尝试使用几个字体平滑属性来尝试解决这个问题。 None 其中非常好,但它们确实略微提高了易读性。
无论如何,这里是第二部分的修复:
我发现了一个黑客。这将在旋转过程中消除模糊,但在放大过程中不会。
.square {
width:100px;
height: 100px;
background-color:black;
margin: 50px;
}
p {
-webkit-font-smoothing: antialiased;
color:white;
text-align: center;
padding-top: 35px;
}
.square:hover {
-webkit-animation: scale 1s linear 0s 1, spin 1s linear 1s infinite alternate;
}
.square:hover p{
-webkit-animation: scaletext 1s linear 0s 1;
}
@-webkit-keyframes scale {
from {transform: scale(1); }
to{transform: scale(2);}
}
@-webkit-keyframes scaletext {
from {transform: scale(1); }
to{transform: scale(1);}
}
@-webkit-keyframes spin {
from {transform: rotateY(0deg) scale(2) ;}
to {transform: rotateY(90deg) scale(2);}
}
<div class="square">
<p>Some text</p>
</div>
(我删除了前缀以压缩答案)
最好的平滑效果不是放大(scale=2)而是缩小(scale=0.5),当然是相反的状态。
而且我不相信一个动画就能达到你想要的效果。我使用了 2 个元素,一个处理旋转,另一个处理比例
#container {
width: 400px;
height: 400px;
}
#container:hover {
-webkit-animation: socialspin 5s linear 0s infinite alternate;
}
@-webkit-keyframes socialspin {
from { -webkit-transform: rotate(0deg); }
to { -webkit-transform: rotateY(90deg); }
}
@keyframes socialspin {
from { transform: rotate(0deg); }
to { transform: rotateY(90deg); }
}
#base {
width: 400px;
height: 400px;
background: yellow;
transform: scale(0.5);
transition: transform 5s;
transform-origin: top left;
font-size: 200%;
}
#container:hover #base {
transform: scale(1);
}
<div id="container">
<div id="base">
<br>
<br>
<br>
HELLLLOOOO!!!
</div>
</div>