CSS3过渡保持重置旋转

时间:2014-09-04 14:07:24

标签: html css css3

我有一个CSS3过渡,但在过渡结束时我的旋转重置为正常状态。 HTML和CSS很简单:

HTML

<a href="#"><span></span>Test</a>

CSS

a {
    text-decoration: none;
}
a span {
    display: inline-block;
    width: 25px;
}
a span:before {
    content:'>';
    font-size: 10px;
    font-weight: bold;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
    -ms-transition: all 0.5s;
    -o-transition: all 0.5s;
    transition: all 0.5s;
}
a:hover span:before {
    margin-left: 55%;
    -webkit-transform: rotate(-90deg);
}

转换按预期进行,但在动画结束时,旋转将重置为正常状态而不是持续存在。我创建了一个JSFiddle as an example。如何保持我的轮换持续?

2 个答案:

答案 0 :(得分:11)

尝试添加display: inline-block 像这样:

a:hover span:before {
    margin-left: 55%; 
    -webkit-transform: rotate(90deg); 
    display: inline-block;
}

fiddle

解释

默认情况下,:before:after等伪元素是内联的,因此它们存在转换问题,因此您需要将它们设置为display: block或{{1} }。

答案 1 :(得分:1)

其工作使用此方法

  • 不要将margin用于动画使用translate istead。
  • 以获得更好的平滑过渡

Demo


<强> HTML

<a href="#"><span>></span>Test</a>

<强> CSS

a {
    text-decoration: none;
}
a span {
    display: inline-block;
    width: 25px;
}
a span{
    font-size: 10px;
    font-weight: bold;
    -webkit-transition: all 0.5s linear;
    -moz-transition: all 0.5s linear;
    -ms-transition: all 0.5s linear;
    -o-transition: all 0.5s linear;
    transition: all 0.5s linear;
}
a:hover span{
    -webkit-transform: rotate(-90deg) translateX(50%);
    -moz-transform: rotate(-90deg) translateX(50%);
    -ms-transform: rotate(-90deg) translateX(50%);
    -o-transform: rotate(-90deg) translateX(50%);
    transform: rotate(-90deg) translateX(50%);
}