<div class="field"> <div class="item"></div> </div>
.field { background: #86c6e0; overflow: hidden; position: relative; height: 300px; } .item { display: block; width: 70px; height: 70px; border-radius: 100%; box-shadow: 0px 0px 15px 0px rgba(255, 255, 255, 0.6) inset; -webkit-box-shadow: 0px 0px 15px 0px rgba(255, 255, 255, 0.6) inset; position: relative; } .item:after { content: ""; display: block; width: 20%; height: 20%; border-radius: 100%; background: rgba(255, 255, 255, 0.8); position: absolute; right: 15%; top: 15%; filter: blur(2px); -webkit-filter: blur(2px); transform: rotateZ(45deg) scaleY(0.8); -webkit-transform: rotateZ(45deg) scaleY(0.8); }
class="shake"を追加し、@keyframesとanimationを用いアニメーションをセッティングします。
<div class="field"> <div class="item shake"></div> </div>
/*animation Setting*/ @keyframes shake { 0% { transform: translateX(10px); } 50% { transform: translateX(-10px); } 100% { transform: translateX(10px); } } @-webkit-keyframes shake { 0% { -webkit-transform: translateX(10px); } 50% { -webkit-transform: translateX(-10px); } 100% { -webkit-transform: translateX(10px); } } /*animation Play*/ .shake { animation: shake 2s ease 0s infinite normal; -webkit-animation: shake 2s ease 0s infinite normal; }
左右にらゆら
ここで気泡の大きさをちょっと小さくします。
class="move"を付加したdiv要素で囲い、同じようにアニメーションをセッティングします。translateYの値は任意で変更してさい。
同時に、absoluteでスタートの位置を下に設定します。
<div class="field"> <div class="move"><div class="item shake"></div></div> </div>
/*animation Setting*/ @keyframes move { 0% { transform: translateY(0px); } 100% { transform: translateY(-1000px); opacity: 0; } } @-webkit-keyframes move { 0% { -webkit-transform: translateY(0px); } 100% { -webkit-transform: translateY(-1000px); opacity: 0; } } /*animation Play*/ .move { animation: move 5s cubic-bezier(0.47, 0, 0.745, 0.715) 0s infinite normal; -webkit-animation: move 5s cubic-bezier(0.47, 0, 0.745, 0.715) 0s infinite normal; position: absolute; bottom: -10%; left: 50%; }
これで左右にゆらゆらしながら浮き上がるようになりました。
duration、delayを調整しパターンを量産します。
自力で数十パターン用意してもいいですが、面倒くさいので、、、ここで登場sass!
forを使って一気に量産!
/*animation Play*/ @for $i from 0 through 50 { $time: $i*0.2; $scale: $i*0.1; .shake#{$i * 1} { animation: shake ($time+2)+s ease 0s infinite normal; -webkit-animation: shake ($time+2)+s ease 0s infinite normal; } .move#{$i * 1} { animation: move ($time+5)+s $b_ease $time+s infinite normal; -webkit-animation: move ($time+5)+s $b_ease $time+s infinite normal; position: absolute; bottom: -10%; } .pos#{$i * 1} { left: percentage($i*2/100); } .scale#{$i * 1} { transform: scale($scale); -webkit-transform: scale($scale); } }
さくっと50パターン出来上がりました。
ついでに、ランダムに配置するための".pos"、大きさを調整する".scale"を用意しておきます。
先ほど用意した各パターンをランダムに設置し、気泡を量産していきます。
自力で設置してもいいですが、ここはJavascriptで。
field内をからにします。
<div class="field"> </div>
forで回してfield内にがんがん量産!
その際に乱数を用いて各クラスをランダムに設置します。
var items = 30;//気泡の個数 for (var i=0; i<=items; i++) { var moveVal = Math.ceil( Math.random()*50 ); var posVal = Math.ceil( Math.random()*50 ); var scaleVal = Math.ceil( Math.random()*10 ); var shakeVal = Math.ceil( Math.random()*5 ); $(".field").append('<div class="move'+moveVal+' pos'+posVal+'"><div class="scale'+scaleVal+'"><div class="item shake'+shakeVal+'"></div></div>'); }
<div class="field"> <div class="move46 pos27"><div class="scale10"><div class="item shake2"></div></div></div> <div class="move12 pos49"><div class="scale8"><div class="item shake1"></div></div></div> ... ... </div>