2016-09-20 5 views
1

Gibt es eine Möglichkeit, ein div Spin, sowie seinen Inhalt zu machen, aber den Inhalt nicht auf den Kopf, während drehen drehen?
Was ich meine ist, dass die Div-Kinder der Rotation der Mutter-Div-Spinnerei folgen würden, aber in der gleichen Richtung bleiben (oben auf der Spitze, unten auf der Unterseite).Drehen Sie ein div, aber machen Sie seinen Inhalt nicht auf den Kopf gestellt

Mein Englisch ist nicht genug goog richtig zu artikulieren, was ich tun will, so ist hier ein exemple:

.spin { 
 
    margin: 50px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: orange; 
 
    animation: spin 10s infinite linear; 
 
} 
 

 
#div1 { 
 
    border: 1px solid blue; 
 
    width: 50px; 
 
    height: 50px; 
 
} 
 

 
#div2 { 
 
    border: 1px solid red; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
} 
 

 
#div3 { 
 
    border: 1px solid black; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 

 
#div4 { 
 
    border: 1px solid green; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 

 
.spin:hover { 
 
    animation-play-state: paused; 
 
} 
 

 
@keyframes spin { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(359deg); 
 
    } 
 
}
<div class="spin"> 
 
    <div id="div1">hello 
 
    </div> 
 
    <div id="div2">hello 
 
    </div> 
 
    <div id="div3">hello 
 
    </div> 
 
    <div id="div4">hello 
 
    </div> 
 
</div>

Im exemple oben werden das Kind divs nach dem Rotation und der Spin.
Ich möchte sie nicht "auf den Kopf drehen" und nur der Rotation folgen.

Ich habe diese Art von Animation in mehreren Websites gesehen, aber ich weiß nicht genau wo genau.
Gibt es eine Möglichkeit, dies in css/js/jquery/php ... zu tun?

+1

würden Sie haben die Kinder synchron mit dem Elternteil, in der entgegengesetzten Richtung zu drehen. z.B. Wenn die Eltern um 37 Grad im Uhrzeigersinn gegangen sind, sind die Kinder um 37 Grad gegen den Uhrzeigersinn gegangen und in der gleichen Orientierung wie vor dem Start der Eltern. –

Antwort

4

Sie können die gleiche Animation auf die vier Kinder anwenden, aber umgekehrt. Auf diese Weise wirkt die Rotation der Kinder der Rotation der Eltern entgegen und die Kinder bleiben aufrecht.

Aus Gründen der Übersichtlichkeit habe ich animation-direction verwendet, um die Animation zu umkehren:

animation-direction: reverse; 

Aber man könnte die Richtung, in Ihrem animation shorthand, wie ist:

animation: spin 10s reverse infinite linear; 

Hier ein Beispiel:

.spin { 
 
    margin: 50px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: orange; 
 
    animation: spin 10s infinite linear; 
 
} 
 
.spin div { 
 
    width: 50px; 
 
    height: 50px; 
 
    animation: spin 10s infinite linear; 
 
    animation-direction: reverse; 
 
} 
 
#div1 { 
 
    border: 1px solid blue; 
 
} 
 
#div2 { 
 
    border: 1px solid red; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
} 
 
#div3 { 
 
    border: 1px solid black; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 
#div4 { 
 
    border: 1px solid green; 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 
.spin:hover, 
 
.spin:hover div { 
 
    animation-play-state: paused; 
 
} 
 
@keyframes spin { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(359deg); 
 
    } 
 
}
<div class="spin"> 
 
    <div id="div1">hello</div> 
 
    <div id="div2">hello</div> 
 
    <div id="div3">hello</div> 
 
    <div id="div4">hello</div> 
 
</div>

+0

Danke für Ihre Antwort, das ist in der Tat der Effekt, den ich versuchte zu bekommen, es sieht sehr sauber aus. In meinem Code wird es viel komplexer sein mit einem Übergang in der Animation, aber ich glaube, dass es auch funktionieren kann, wenn ich dem gleichen Weg folge wie du. Vielen Dank ! – eloism

0

Fügen Sie diese Regel auf jeden nummerierte div:

counterspin 10s infinite linear; 

und dann Keyframes dieser Animation

@keyframes counterspin { 
    0% { 
    transform: rotate(0deg); 
} 
    100% { 
    transform: rotate(-359deg); 
    } 
} 
1

Nach @showdev Antwort, wenn Sie die Ränder um die inneren divs wollen Folge der Drehung des äußeren Blocks und mache den Text nur so, dass er "fixiert" bleibt - du kannst dafür ein bisschen jQuery verwenden:

$('.spin div').each(function() { 
     $(this).contents().wrap('<span></span>'); 
    }); 

Ich habe auch ein bisschen CSS, können Sie innerhalb des Schnipsel überprüfen:

$('.spin div').each(function() { 
 
    $(this).contents().wrap('<span></span>'); 
 
});
.spin { 
 
    margin: 50px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: orange; 
 
    animation: spin 10s infinite linear; 
 
} 
 
.spin div { 
 
    text-align: center; 
 
    line-height: 50px; 
 
} 
 
.spin div span { 
 
    animation: spin 10s infinite linear; 
 
    animation-direction:reverse; 
 
    display: inline-block; 
 
} 
 
#div1 { 
 
    border: 1px solid blue; 
 
    width: 50px; 
 
    height: 50px; 
 
} 
 
#div2 { 
 
    border: 1px solid red; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
} 
 
#div3 { 
 
    border: 1px solid black; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 
#div4 { 
 
    border: 1px solid green; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 
.spin:hover, .spin:hover span { 
 
    animation-play-state: paused; 
 
} 
 
@keyframes spin { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(359deg); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="spin"> 
 
    <div id="div1">hello</div> 
 
    <div id="div2">hello</div> 
 
    <div id="div3">hello</div> 
 
    <div id="div4">hello</div> 
 
</div>

+0

Danke für deine Antwort, das ist eigentlich fortgeschrittener als das, was ich erreichen wollte, daran hatte ich nicht gedacht. Da ich mich nicht mit diesem Problem beschäftigen wollte, entschied ich mich dafür, mit Kreisen Grenzen zu gehen, damit sie für mein Design nicht überlaufen, aber das hätte auch funktioniert :) – eloism

0

.spin { 
 
    margin: 50px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: orange; 
 
    animation: spin 10s infinite linear; 
 
    position:relative; 
 
    
 
} 
 
.spin div { 
 
    margin:10px; 
 
    animation: spin 10s infinite ease-in-out; 
 
    animation-direction: reverse; 
 
} 
 
#div1 { 
 
    border: 1px solid blue; 
 
    width: 50px; 
 
    height: 50px; 
 
    position:absolute; 
 
    top:0; 
 
    left:0; 
 
    
 
} 
 

 
#div2 { 
 
    border: 1px solid red; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
} 
 

 
#div3 { 
 
    border: 1px solid black; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 

 
#div4 { 
 
    border: 1px solid green; 
 
    width: 50px; 
 
    height: 50px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 

 
.spin:hover { 
 
    animation-play-state: paused; 
 
} 
 
.spin:hover div { 
 
    animation-play-state: paused; 
 
} 
 

 
@keyframes spin { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(359deg); 
 
    } 
 
}
<div class="spin"> 
 
    <div id="div1">hello 
 
    </div> 
 
    <div id="div2">hello 
 
    </div> 
 
    <div id="div3">hello 
 
    </div> 
 
    <div id="div4">hello 
 
    </div> 
 
</div>

Sie können diese versuchen

.spin { 
    margin: 50px; 
    width: 200px; 
    height: 200px; 
    background: orange; 
    animation: spin 10s infinite linear; 
    position:relative; 

} 
.spin div { 
    margin:10px; 
    animation: spin 10s infinite ease-in-out; 
    animation-direction: reverse; 
} 
#div1 { 
    border: 1px solid blue; 
    width: 50px; 
    height: 50px; 
    position:absolute; 
    top:0; 
    left:0; 

} 

#div2 { 
    border: 1px solid red; 
    width: 50px; 
    height: 50px; 
    position: absolute; 
    top: 0; 
    right: 0; 
} 

#div3 { 
    border: 1px solid black; 
    width: 50px; 
    height: 50px; 
    position: absolute; 
    bottom: 0; 
    left: 0; 
} 

#div4 { 
    border: 1px solid green; 
    width: 50px; 
    height: 50px; 
    position: absolute; 
    bottom: 0; 
    right: 0; 
} 

.spin:hover { 
    animation-play-state: paused; 
} 
.spin:hover div { 
    animation-play-state: paused; 
} 

@keyframes spin { 
    0% { 
    transform: rotate(0deg); 
    } 
    100% { 
    transform: rotate(359deg); 
    } 

}

1

Ich verstand man auch jeweils 4 Elemente wollten im Bereich ihrer Ecken bleiben. Dies erfordert möglicherweise zusätzliche Animationen, damit sie um die übergeordneten Kanten herumlaufen.

Unterhalb der Idee von dem, was ich verstand:

.spin { 
 
    margin: 50px; 
 
    width: 200px; 
 
    height: 200px; 
 
    background: orange; 
 
    position: relative; 
 
    animation: spin 10s infinite linear; 
 
} 
 
.spin div { 
 
    width: 50px; 
 
    height: 50px; 
 
} 
 
#div1 { 
 
    border: 1px solid blue; 
 
    animation: spin1 10s infinite linear; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
} 
 
#div2 { 
 
    animation: spin2 10s infinite linear; 
 
    border: 1px solid red; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
} 
 
#div3 { 
 
    animation: spin3 10s infinite linear; 
 
    border: 1px solid black; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
} 
 
#div4 { 
 
    animation: spin4 10s infinite linear; 
 
    border: 1px solid green; 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
} 
 
.spin:hover, 
 
.spin:hover div { 
 
    animation-play-state: paused!important;/* or used id and several selectors to avoid the important and overide div#div1 {...}*/ 
 
} 
 
@keyframes spin { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    100% { 
 
    transform: rotate(359deg); 
 
    } 
 
} 
 
@keyframes spin1 { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    25% { 
 
    top: 150px; 
 
    left: 0 
 
    } 
 
    50% { 
 
    left: 150px; 
 
    top: 150px 
 
    } 
 
    75% { 
 
    left: 150px; 
 
    top: 0; 
 
    } 
 
    100% { 
 
    transform: rotate(-359deg); 
 
    } 
 
} 
 
@keyframes spin2 { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    25% { 
 
    top: 0; 
 
    right: 150px 
 
    } 
 
    50% { 
 
    right: 150px; 
 
    top: 150px 
 
    } 
 
    75% { 
 
    top: 150px; 
 
    right: 0; 
 
    } 
 
    100% { 
 
    transform: rotate(-359deg); 
 
    } 
 
} 
 
@keyframes spin3 { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    25% { 
 
    bottom: 0; 
 
    left: 150px 
 
    } 
 
    50% { 
 
    left: 150px; 
 
    bottom: 150px 
 
    } 
 
    75% { 
 
    bottom: 150px; 
 
    left: 0; 
 
    } 
 
    100% { 
 
    transform: rotate(-359deg); 
 
    } 
 
} 
 
@keyframes spin4 { 
 
    0% { 
 
    transform: rotate(0deg); 
 
    } 
 
    25% { 
 
    right: 0; 
 
    bottom: 150px 
 
    } 
 
    50% { 
 
    right: 150px; 
 
    bottom: 150px 
 
    } 
 
    75% { 
 
    right: 150px; 
 
    bottom: 0; 
 
    } 
 
    100% { 
 
    transform: rotate(-359deg); 
 
    } 
 
}
<div class="spin"> 
 
    <div id="div1">top left</div> 
 
    <div id="div2">top right</div> 
 
    <div id="div3">bottom left</div> 
 
    <div id="div4">bottom right</div> 
 
</div>

Verwandte Themen