CSS3 Infinite Spin

2019-08-26 12:49发布

问题:

So I'm trying to make an image rotate, 360 infinite times when "hover". But unfortunately it isn't, I think it maybe because I have used a background element to display the image but I cant think of how to display the image an other way.
Using bootstrap 3, unsure how to use glyphicons

<div class="services">
    <i class="icon-html5"></i>
    <h4 class="service-heading">HTML5</h4>
    <p>Developed with high level of coding and care to provide everyone with a HTML5 compliant markup.</p>
</div>
.services{
    background-color:#F5F5F5;
    border-radius: 5px 5px 5px 5px;
    cursor: pointer;
    margin:60px 0;
    padding:14px;
    position: relative;
}
.services i{
    border:10px solid #FFFFFF;
    border-radius: 50% 50% 50% 50%;
    color:#F4F4F4;
    font-size: 18px;
    height:100%;
    left:50%;
    line-height: 100%;
    margin: -60px 0 0 -60px !important;
    padding:0 !important;
    position: absolute;
    top:0px;
    transition: all 0.3s ease-in-out 0s;
    width:140px;
    background-color:#F47E7E;
}
.services:hover > i{
    animation: 1.5s linear 0s normal none infinite spinAround;
    border: 10px solid #FFFFFF;
}
.icon-html5{
    background-image: url('../img/html5.png');
    background-repeat: no-repeat;
    animation: 1.5s linear 0s normal none infinite spinAround;
    border: 10px solid #FFFFFF;
    background-position:center;
}

JS Fiddle - http://jsfiddle.net/MJXrM/1/

Thanks!

回答1:

You are missing something like this in your css:

@-moz-keyframes spinAround { 
    from {-moz-transform: rotate(00deg); } 
    to {-moz-transform: rotate(360deg);}
}

@-webkit-keyframes spinAround {
    from { -webkit-transform: rotate(0deg); }
    to { -webkit-transform: rotate(360deg); }
}

@keyframes spinAround {
    from {transform:rotate(0deg);}
    to {transform:rotate(360deg);}
}

see fiddle: http://jsfiddle.net/MJXrM/3/

I've also changed this:

.services:hover > i

into this:

.services > i:hover


回答2:

If you’re using less with bootstrap, you can just do:

.services > i:hover {
    .icon-spin;
}


回答3:

Do you consider about using sprite sheet animation to implement your Infinite Spin? If you have a animation file, you can implement with following code. This way is more compatible with both old browsers and modern browsers.

<div class="spinner-bg">
    <div id="spinner">
    </div>
</div>

.spinner-bg
{
    width: 44px;
    height: 41px;
    background:#000000;
}

#spinner
{
    width: 44px;
    height: 41px;
    background:url(./preloadericon.png) no-repeat;
}

<script>
var currentbgx = 0;
var circle = document.getElementById("spinner");
var circleTimer = setInterval(playAnimation, 100);

function playAnimation() {
    if (circle != null) {
        circle.style.backgroundPosition = currentbgx + "px 0";
    }

    currentbgx -= 44; //one frame width, there are 5 frame
    //start from 0, end at 176, it depends on the png frame length
    if (currentbgx < -176) {
        currentbgx = 0;
    }
}
</script>

You can also find more HTML animation implementation here:

Loading AJAX Spinner Animation

Create CSS Animation in HTML5 Games