The Gooey Effect inspired by http://css-tricks.com/gooey-effect/. Essentially it uses SVG Filters to get sticky (gooey) effect.
A Pen by Alex Marinenko on CodePen.
<div class="bubbles-wrapper bubbles-circle"> | |
<div class="bubble">1</div> | |
<div class="bubble">2</div> | |
<div class="bubble">3</div> | |
<div class="bubble">4</div> | |
<div class="bubble">5</div> | |
<div class="bubble">6</div> | |
</div><!-- remove spaces | |
--><div class="bubbles-wrapper bubbles-vertical"> | |
<div class="bubble"></div> | |
<div class="bubble"></div> | |
<div class="bubble"></div> | |
<div class="bubble"></div> | |
<div class="bubble"></div> | |
</div> | |
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> | |
<defs> | |
<filter id="goo"> | |
<feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur" /> | |
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7" result="goo" /> | |
<feBlend in="SourceGraphic" in2="goo" /> | |
</filter> | |
</defs> | |
</svg> |
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
The Gooey Effect inspired by http://css-tricks.com/gooey-effect/. Essentially it uses SVG Filters to get sticky (gooey) effect.
A Pen by Alex Marinenko on CodePen.
*, | |
*:before, | |
*:after { | |
box-sizing: border-box; | |
} | |
html, | |
body { | |
background: #ecf0f1; | |
color: #444; | |
font-family: Tahoma, Geneva, sans-serif; | |
font-size: 1em; | |
} | |
$center: 48%; | |
$size: 50px; | |
.bubbles-wrapper { | |
border: 1px solid #ccc; | |
display: inline-block; | |
filter: url('#goo'); | |
height: 350px; | |
overflow: auto; | |
position: relative; | |
width: 50%; | |
zoom: 1; | |
.bubble { | |
border-radius: 50%; | |
font-size: 2em; | |
height: $size; | |
line-height: 1.5em; | |
position: absolute; | |
text-align: center; | |
width: $size; | |
} | |
} | |
.bubbles-circle { | |
.bubble { | |
background: #e74c3c; | |
color: #e74c3c; | |
transform: translate(0, 0) scale(1.5); | |
left: $center; | |
top: $center; | |
animation: move-to-center-1 cubic-bezier(0.770, 0.000, 0.175, 1.000) 3s infinite alternate; | |
&:nth-child(1) { | |
animation-name: move-to-center-1; | |
} | |
&:nth-child(2) { | |
animation-name: move-to-center-2; | |
animation-delay: .1s; | |
} | |
&:nth-child(3) { | |
animation-name: move-to-center-3; | |
animation-delay: .2s; | |
} | |
&:nth-child(4) { | |
animation-name: move-to-center-4; | |
animation-delay: .3s; | |
} | |
&:nth-child(5) { | |
animation-name: move-to-center-5; | |
animation-delay: .4s; | |
} | |
&:nth-child(6) { | |
animation-name: move-to-center-6; | |
animation-delay: .5s; | |
} | |
} | |
@keyframes move-to-center-1 { | |
to { | |
background: #3498db; | |
color: #fefefe; | |
transform: translate(0, -$size * 2); | |
} | |
} | |
@keyframes move-to-center-2 { | |
to { | |
background: #3498db; | |
color: #fefefe; | |
transform: translate(-$size * 1.25, -$size * .75); | |
} | |
} | |
@keyframes move-to-center-3 { | |
to { | |
background: #3498db; | |
color: #fefefe; | |
transform: translate($size * 1.25, -$size * .75); | |
} | |
} | |
@keyframes move-to-center-4 { | |
to { | |
background: #3498db; | |
color: #fefefe; | |
transform: translate(-$size * 1.25, $size * .75); | |
} | |
} | |
@keyframes move-to-center-5 { | |
to { | |
background: #3498db; | |
color: #fefefe; | |
transform: translate($size * 1.25, $size * .75); | |
} | |
} | |
@keyframes move-to-center-6 { | |
to { | |
background: #3498db; | |
color: #fefefe; | |
transform: translate(0, $size * 2); | |
} | |
} | |
} | |
.bubbles-vertical { | |
.bubble { | |
background: #3BC29E; | |
transform: translate(0, 0) scale(1.5); | |
left: $size; | |
top: $center; | |
animation: move-to-right-1 cubic-bezier(.66,.1,.97,.36) 3s infinite alternate; | |
&:nth-child(1) { | |
animation-name: move-to-right-1; | |
animation-delay: .25s * 1; | |
} | |
&:nth-child(2) { | |
animation-name: move-to-right-2; | |
animation-delay: .25s * 2; | |
} | |
&:nth-child(3) { | |
animation-name: move-to-right-3; | |
animation-delay: .25s * 3; | |
} | |
&:nth-child(4) { | |
animation-name: move-to-right-4; | |
animation-delay: .25s * 4; | |
} | |
&:nth-child(5) { | |
animation-name: move-to-right-5; | |
animation-delay: .25s * 5; | |
} | |
} | |
@keyframes move-to-right-1 { | |
to { | |
transform: translate($size * .125, -$size * 3); | |
} | |
} | |
@keyframes move-to-right-2 { | |
to { | |
transform: translate($size * 2.5, -$size * 2.5); | |
} | |
} | |
@keyframes move-to-right-3 { | |
to { | |
transform: translate($size * 3.5, 0); | |
} | |
} | |
@keyframes move-to-right-4 { | |
to { | |
transform: translate($size * 2.5, $size * 2.5); | |
} | |
} | |
@keyframes move-to-right-5 { | |
to { | |
transform: translate($size * .125, $size * 3); | |
} | |
} | |
} |