CSS3アニメーションで円を展開する
-
26-10-2019 - |
質問
ページが読み込まれるときに円が表示されるようにしようとしていますが、これは問題ありませんが、左上からではなく中央から小さいものから大きいものへと外側に向かって成長する必要があります。
私が現在持っているものはここで見ることができます: http://thomasbritton.co.uk/projects/ebrd/
理想的には、これを CSS で行う必要がありますが、より簡単で安定している場合は JS を使用することもできます。
何か案は?
これもアニメーション部分のCSSです。
.circle a {
border-radius: 150px;
color: #fff;
height: 0;
position: absolute;
text-decoration: none;
width: 0;
}
.circle a.grow {
-webkit-animation-name: grow;
-webkit-animation-duration: 2.2s;
-webkit-animation-timing-function: ease;
-webkit-animation-iteration-count: 1;
-webkit-animation-direction: normal;
-webkit-animation-delay: 0;
-webkit-animation-play-state: running;
-webkit-animation-fill-mode: forwards;
-moz-animation-name: grow;
-moz-animation-duration: 2.2s;
-moz-animation-timing-function: ease;
-moz-animation-iteration-count: 1;
-moz-animation-direction: normal;
-moz-animation-delay: 0;
-moz-animation-play-state: running;
-moz-animation-fill-mode: forwards;
animation-name: grow;
animation-duration: 2.2s;
animation-timing-function: ease;
animation-iteration-count: 1;
animation-direction: normal;
animation-delay: 0;
animation-play-state: running;
animation-fill-mode: forwards;
}
@-webkit-keyframes grow {
0% { -moz-transform: scale(0); }
100% { -moz-transform: scale(1); }
}
@-moz-keyframes grow {
0% { -moz-transform: scale(0); }
100% { -moz-transform: scale(1); height: 168px; width: 168px; }
}
@keyframes grow {
0% { -moz-transform: scale(0); }
100% { -moz-transform: scale(1); }
}
解決
以下に、行う必要があることの大まかな例を示します。 jsfiddle.net/UxtJV/. 。ちょっとした JS を使用して、サークルをアニメーション化するクラスを追加します。その width
, height
, top
そして left
プロパティがアニメーション化されて与えられます position: relative
.
div.circle {
position: relative;
width: 0px;
height: 0px;
top: 50px;
left: 50px;
-webkit-transition-duration: 2s;
-webkit-transition-property: all;
-webkit-transition-timing-function: ease-in-out;
text-align: center;
background: red;
color: white;
border-radius: 100%;
padding: 20px;
overflow: hidden;
}
div.circle.open {
top: 0px;
left: 0px;
width: 100px;
height: 100px;
}
他のヒント
そうするために、あなたのアニメーションには次のことが含まれるべきです:
- 幅と高さを増やします。
- 上部と左を増やします。
それはちょっとした仕事ですが、それはあなたが尋ねたことを正確に行います。
アニメーションと翻訳プロパティを組み合わせることを試みることができます。
これは別のオプションかもしれません:
transform-origin: top right; /* 50% 50% or whatever*/
投稿されています ここ...
誰かがjqueryソリューションを求めている場合に備えて、ここにあります...
HTML
<div class=circle1></div>
CSS
.circle1 {
position:absolute; top:50px; left:50px;
width: 0px; height: 0px;
border:1px solid red;
padding:20px;
border-radius:50%;
}
JS
$(".circle1").mouseover(function() {
$(this).animate({top:"0", left:"0", width:"100px", height:"100px", opacity: 0}, 200);
}).mouseout(function() {
$(this).animate({top:"50px", left:"50px", width:"0", height:"0", opacity: 1}, 200);
});
そして、これがデモです - http://jsbin.com/esiluleb/1/
ケースにjQueryやJavaScriptを使用する必要はありません。純粋なCSSでそれを達成できます。
アニメーションDivに位置プロパティを使用しないでください。それはあなたに遅れたアニメーションを引き起こします。代わりに、パフォーマンスのアニメーションに変換を使用します。
<div class="circle__wrapper">
<a class="circle" href="#"></a>
</div>
/* circle__wrapper will help you to position the div in the center of the page */
.circle__wrapper {
position: fixed;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.circle__wrapper a.circle {
display:block;
height: 168px;
width: 168px;
background-color: #fea733;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
border-radius: 50%;
-webkit-animation: growUp 2s 1.5s; /* You can remove 1.5s if you don't want delay */
-moz-animation: growUp 2s 1.5s;
-ms-animation: growUp 2s 1.5s;
-o-animation: growUp 2s 1.5s;
animation: growUp 2s 1.5s;
}
@-webkit-keyframes growUp {
0% { -webkit-transform: scale(0); }
100% { -webkit-transform: scale(1); }
}
@-moz-keyframes growUp {
0% { -moz-transform: scale(0); }
100% { -moz-transform: scale(1); }
}
@-o-keyframes growUp {
0% { -o-transform: scale(0); }
100% { -o-transform: scale(1); }
}
@-ms-keyframes growUp {
0% { -ms-transform: scale(0); }
100% { -ms-transform: scale(1); }
}
@keyframes growUp {
0% { transform: scale(0); }
100% { transform: scale(1); }
}
お役に立てれば。