回転しながら徐々に表示されていくアニメーションを実装してみます。
右半分を徐々に表示する
まずは右半分が徐々に表示されているアニメーションを実装してみます。
HTML
<div class="circle-wrap"> <div class="circle-right"> <div class="circle-right-hidden"> <div class="circle"></div> </div> </div> </div>
CSS
.circle-wrap {
position: relative;
width: 50px;
height: 50px;
}
.circle {
width: 50px;
height: 50px;
border-radius: 25px;
background: #E74C3C;
}
.circle-right {
position: absolute;
left: 25px;
width: 25px;
height: 50px;
overflow: hidden;
}
.circle-right-hidden {
position: relative;
left: -25px;
width: 25px;
height: 50px;
overflow: hidden;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 100% 50%;
transform-origin: 100% 50%;
-webkit-animation: rotateRight 2s linear infinite;
animation: rotateRight 2s linear infinite;
}
@-webkit-keyframes rotateRight {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes rotateRight {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
.circle-rightで右半分だけ表示するようにして、子要素の.circle-right-hiddenを回転させて徐々に表示するようにしています。
右半分を徐々に表示するのデモページ
左半分を徐々に表示する
先ほどのCSSを少し変更して、左半分を徐々に表示してみます。
HTML
<div class="circle-wrap"> <div class="circle-left"> <div class="circle-left-hidden"> <div class="circle"></div> </div> </div> </div>
CSS
.circle-wrap {
position: relative;
width: 50px;
height: 50px;
}
.circle {
width: 50px;
height: 50px;
border-radius: 25px;
background: #E74C3C;
}
.circle-left {
width: 25px;
height: 50px;
overflow: hidden;
}
.circle-left-hidden {
position: relative;
left: 25px;
width: 25px;
height: 50px;
overflow: hidden;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 0% 50%;
transform-origin: 0% 50%;
-webkit-animation: rotateLeft 2s linear infinite;
animation: rotateLeft 2s linear infinite;
}
.circle-left .circle {
position: relative;
left: -25px;
}
@-webkit-keyframes rotateLeft {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes rotateLeft {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
円形に徐々に表示する
右半分と左半分のアニメーションを組み合わせて、円形に徐々に表示するアニメーションを実装します。
HTML
<div class="circle-wrap"> <div class="circle-right"> <div class="circle-right-hidden"> <div class="circle"></div> </div> </div> <div class="circle-left"> <div class="circle-left-hidden"> <div class="circle"></div> </div> </div> </div>
CSS
.circle-wrap {
position: relative;
width: 50px;
height: 50px;
}
.circle {
width: 50px;
height: 50px;
border-radius: 25px;
background: #E74C3C;
}
.circle-right {
position: absolute;
left: 25px;
width: 25px;
height: 50px;
overflow: hidden;
}
.circle-right-hidden {
position: relative;
left: -25px;
width: 25px;
height: 50px;
overflow: hidden;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 100% 50%;
transform-origin: 100% 50%;
-webkit-animation: rotateRight 4s linear infinite;
animation: rotateRight 4s linear infinite;
}
@-webkit-keyframes rotateRight {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes rotateRight {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
.circle-left {
width: 25px;
height: 50px;
overflow: hidden;
}
.circle-left-hidden {
position: relative;
left: 25px;
width: 25px;
height: 50px;
overflow: hidden;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 0% 50%;
transform-origin: 0% 50%;
-webkit-animation: rotateLeft 4s linear infinite;
animation: rotateLeft 4s linear infinite;
}
.circle-left .circle {
position: relative;
left: -25px;
}
@-webkit-keyframes rotateLeft {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes rotateLeft {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
0%~50%までが右半分、50%~100%が左半分がアニメーションするようにしています。
円形に徐々に表示するデモページ
画像を円形に徐々に表示する
先ほどはCSSで作った円を徐々に表示しましたが、画像を徐々に表示するようにしてみます。
HTML
<div class="circle-wrap"> <div class="circle-right"> <div class="circle-right-hidden"> <div class="circle"> <img src="img.jpg" width="320" height="320" alt="" /> </div> </div> </div> <div class="circle-left"> <div class="circle-left-hidden"> <div class="circle"> <img src="img.jpg" width="320" height="320" alt="" /> </div> </div> </div> </div>
CSS
.circle-wrap {
position: relative;
width: 640px;
height: 640px;
}
.circle {
position: relative;
width: 640px;
height: 640px;
}
.circle img {
position: relative;
top: 160px;
}
.circle-right {
position: absolute;
left: 320px;
width: 320px;
height: 640px;
overflow: hidden;
}
.circle-right-hidden {
position: relative;
left: -320px;
width: 320px;
height: 640px;
overflow: hidden;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 100% 50%;
transform-origin: 100% 50%;
-webkit-animation: rotateRight 4s linear infinite;
animation: rotateRight 4s linear infinite;
}
@-webkit-keyframes rotateRight {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes rotateRight {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
.circle-right .circle {
position: relative;
left: 160px;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 25% 50%;
transform-origin: 25% 50%;
-webkit-animation: rotateRight2 4s linear infinite;
animation: rotateRight2 4s linear infinite;
}
@-webkit-keyframes rotateRight2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
100% {
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
}
@keyframes rotateRight2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
100% {
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
}
.circle-left {
width: 320px;
height: 640px;
overflow: hidden;
}
.circle-left-hidden {
position: relative;
left: 320px;
width: 320px;
height: 640px;
overflow: hidden;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 0% 50%;
transform-origin: 0% 50%;
-webkit-animation: rotateLeft 4s linear infinite;
animation: rotateLeft 4s linear infinite;
}
@-webkit-keyframes rotateLeft {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
@keyframes rotateLeft {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
}
.circle-left .circle {
position: relative;
left: -160px;
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform-origin: 25% 50%;
transform-origin: 25% 50%;
-webkit-animation: rotateLeft2 4s linear infinite;
animation: rotateLeft2 4s linear infinite;
}
@-webkit-keyframes rotateLeft2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
}
@keyframes rotateLeft2 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
}
}
実際の画像の大きさよりアニメーションする要素を大きくしています。
.circle-right-hiddenと.circle-left-hiddenが回転すると画像も回転してしまうので、画像を反対方向に回転するようにしています。
画像を円形に徐々に表示するのデモページ
コメントが承認されるまで時間がかかります。