6 Blob Animation effects using HTML and CSS Only - Coding Torque

6 Blob Animation effects using HTML and CSS Only

Blob Animation effects

Hello Coders! Welcome to Coding Torque. In this blog, We are going to create 6 different blob animation effects using HTML & CSS Only. Let's get started 🚀.

Demo


1. Blended photo and gradient blob animation


Blended photo and gradient blob animation


Code Credits: @markmiscavage
HTML(PUG) Code
.main
    .blob

CSS(SCSS) Code
$background_color: #000;
$time: 30s;

.blob {
    display: block;
    position: relative;
    width: 200px;
    height: 200px;
    overflow: hidden;
    border-radius: 48% 52% 68% 32% / 42% 28% 72% 58%;
    background: linear-gradient(to right, #23D5AB, #23A6D5, #E73C7E, #EE7752, #DDD6F3);
    background-size: 500% 100%;
    animation: 
        blobber $time 0s linear infinite,
        cobler $time 0s linear infinite alternate;
    
    &:after {
        content: '';
        display: block;
        position: absolute;
        top: 5px;
        right: 5px;
        bottom: 5px;
        left: 5px;
        background-color: #000;
        background-image: url(https://images.unsplash.com/photo-1495429789562-21d697f29b02?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2250&q=80);
        background-repeat: no-repeat;
        background-size: cover;
        background-position: center;
        mix-blend-mode: multiply;
        animation:
            blobber $time 0s ease-in-out infinite,
            wobbler 15s 0s linear infinite alternate;
    }
}

@keyframes blobber {
    0%  { border-radius: 48% 52% 68% 32% / 42% 28% 72% 58%; }
    5%  { border-radius: 48% 52% 41% 59% / 66% 37% 63% 34%; }
    10% { border-radius: 69% 31% 71% 29% / 67% 31% 69% 33%; }
    15% { border-radius: 60% 40% 71% 29% / 63% 65% 35% 37%; }
    20% { border-radius: 61% 39% 51% 49% / 57% 58% 42% 43%; }
    25% { border-radius: 66% 34% 25% 75% / 47% 30% 70% 53%; }
    30% { border-radius: 32% 68% 38% 62% / 65% 60% 40% 35%; }
    35% { border-radius: 63% 37% 41% 59% / 35% 38% 62% 65%; }
    40% { border-radius: 57% 43% 49% 51% / 55% 71% 29% 45%; }
    45% { border-radius: 47% 53% 34% 66% / 65% 36% 64% 35%; }
    50% { border-radius: 44% 56% 32% 68% / 69% 26% 74% 31%; }
    55% { border-radius: 28% 72% 37% 63% / 71% 44% 56% 29%; }    
    60% { border-radius: 38% 62% 35% 65% / 74% 53% 47% 26%; }
    65% { border-radius: 73% 27% 46% 54% / 54% 47% 53% 46%; }
    70% { border-radius: 75% 25% 47% 53% / 49% 53% 47% 51%; }
    75% { border-radius: 62% 38% 43% 57% / 55% 60% 40% 45%; }
    80% { border-radius: 41% 59% 65% 35% / 73% 50% 50% 27%; }
    85% { border-radius: 55% 45% 57% 43% / 73% 61% 39% 27%; }
    90% { border-radius: 74% 26% 33% 67% / 40% 65% 35% 60%; }
    95% { border-radius: 58% 42% 57% 43% / 53% 45% 55% 47%; }
    100%{ border-radius: 48% 52% 68% 32% / 42% 28% 72% 58%; }
}

@keyframes cobler {
	0% {
        background-position: 0% 0%;
    }
    100% {
        background-position: 100% 0%;
    }
}

@keyframes wobbler {
    0%  {
        transform: rotateZ(8deg);
    }
    100% {
        transform: rotateZ(-8deg);
    }
}

//
// Page Default Styles
//

* {
    margin: 0;
    padding: 0;
    border: 0;
    outline: none;
    box-sizing: border-box;
}

html,
body {
    display: block;
    position: fixed;
    height: 100vh;
    width: 100vw;
    background-color: $background_color;
    background: linear-gradient(#1f1f21, $background_color);
}

.main {
    display: flex;
    height: 100vh;
    width: 100vw;
    flex-wrap: wrap;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

2. An animated blobby gooey button using CSS

An animated blobby gooey button using CSS
Code Credits: @leenalavanya
HTML Code
<svg viewBox="45 60 400 320" xmlns="http://www.w3.org/2000/svg">
    <path fill="#fff" d="M 90 210 C 90 180 90 150 90 150 C 150 150 180 150 180 150 C 180 150 300 150 300 150 C 300 150 330 150 390 150 C 390 150 390 180 390 210 C 390 240 390 270 390 270 C 330 270 300 270 300 270 C 300 270 180 270 180 270 C 180 270 150 270 90 270 C 90 270 90 240 90 210" mask="url(#knockout-text)" >
    </path>
    <mask id="knockout-text">
      <rect width="100%" height="100%" fill="#fff" x="0" y="0" />
      <text x="147" y="227" fill="#000">BUTTON</text>
    </mask>
</svg>

CSS(SCSS) Code

@import url("https://fonts.googleapis.com/css?family=Raleway:900");

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    background-image:
        url(https://images.unsplash.com/photo-1519501025264-65ba15a82390?w=1600);
    background-size: cover;
    background-position: 50% 50%;
    min-height:
        100vh;
    font-family: Raleway, serif;
    &

    :after {
        content: "";
        width:
            100%;
        height: 100%;
        position: fixed;
        background: rgba(0, 0, 0, 0.2);
        z-index: 1;
    }
}

svg {
    width: 80vw;
    position: fixed;
    top: 50vh;
    left:
        50vw;
    max-width: 430px;
    transform: translateY(-50%) translateX(-50%);
    z-index: 2;
    filter: drop-shadow(0 0 40px rgba(0, 0, 0, 0.3));

    path {
        cursor: pointer;
        animation: blob 2s infinite forwards;
        transform-origin: 50% 50%;
        &

        :hover {
            fill: #fafafa;
        }
    }

    text {
        font-size: 45px;
    }
}

@keyframes blob {
    25% {
        d: path("M 90 210 C 90
180 110 160 130 160 C 160 160 180 140 200 130 C 230 120 270 100 290 140 C 310 170 340 100 360 140 C 370 160 390 180 390 210 C 390 240 380 290 350 280 C 330 270 300 280 280 290 C 260 300 230 300 220 290 C 200 270 160 310 140 280 C 130 260 90 240 90 210 " ); transform:
rotate(-5deg);
        }

        50% {
            d: path("M 90 210 C 90 180 100 150 120 130 C
150 100 180 140 200 130 C 230 120 270 100 290 140 C 300 160 330 130 360 140 C 390 150 390 180 390 210 C 390 240 380 300 350 280 C 330 270 320 230 280 260 C 260 280 220 310 200 290 C 180 270 160 280 140 280 C 110 280 90 240 90 210" ); } 75% { d: path( " M 90 210 C 90 180 110 180 130 170 C 150 160 170 130 200 130 C 240 130 260 150 290 140 C 310 130 340 120 360 140 C 380 160 390 180 390 210 C 390 240 380 260 350 270 C 320 280 290 270 270 260 C 240 250 230 280 210 290 C 180 310 130 300 110 280 C 90 260 90 240 90 210" ); transform: rotate(5deg); } }

3. Border Radius Blob using HTML 

Border Radius Blob using HTML
Code Credits: @karisabinemalmin
HTML Code

<div class="wrap">

 <div class="circle">
    <img src='https://images.unsplash.com/photo-1547542928-dd9bc5371279?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&ixid=eyJhcHBfaWQiOjE0NTg5fQ' alt=''>
  </div>
</div>

CSS(SCSS) Code
body {
  background: #000;
}

.wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.circle {
  background: plum;
  width: 200px;
  height: 200px;
  border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
  overflow: hidden;
  animation: morph 3s linear infinite;
}

.circle img {
  width: 100%;
}


@keyframes morph{
  0%, 100% {
  border-radius: 40% 60% 70% 30% / 40% 40% 60% 50%;
  }
  34% {
    border-radius: 70% 30% 50% 50% / 30% 30% 70% 70%;
  }
  67% {
    border-radius: 100% 60% 60% 100% / 100% 100% 60% 60%;
  }
}

4. Blob Loading Animation using CSS

Blob Loading Animation using CSS
Code Credits: @marcossilva
HTML Code

<div class="wrapper">
  <p><span></span></p>
  <p><span></span></p>
</div>

CSS(SCSS) Code
.wrapper {
    --size: 250px;
    position: absolute;
    width: var(--size);
    height: var(--size);
    top: 50%;
    left: 50%;
    margin: calc(var(--size) / -2);
    background: white;
    filter: blur(10px) contrast(15);

    span {
        background: black;
        position: absolute;
        border-radius: 50%;
        display:
            inline-block;
    }

    p {
        position: absolute;
        top: 50%;
        left: 50%;
    }

    p:nth-child(1) {
        position: absolute;
        animation: skewing-child .2s ease-in-out infinite alternate;

        span {
            width: calc(var(--size) / 10);
            height: calc(var(--size) / 10);
            margin: calc(var(--size) / -20);
            ;
            animation: moving 2s cubic-bezier(.97, .01, .12, .99) infinite alternate;
        }
    }

    p:nth-child(2) {
        position: absolute;
        animation: squishing 1s ease-in-out infinite alternate;

        span {
            width: calc(var(--size) / 4);
            height: calc(var(--size) / 4);
            top: 50%;
            left: 50%;
            margin:
                calc(var(--size) / -8);
            animation: skewing 2s 1.5s ease-in-out infinite;
        }
    }
}

@keyframes skewing {
    0% {
        transform: skewX(6deg);
    }

    10% {
        transform: skewX(-6deg);
    }

    20% {
        transform: skewX(4deg);
    }

    30% {
        transform: skewX(-4deg);
    }

    40% {
        transform: skewX(2deg);
    }

    50% {
        transform: skewX(-6deg);
    }

    55% {
        transform: skewX(6deg);
    }

    60% {
        transform: skewX(-5deg);
    }

    65% {
        transform: skewX(5deg);
    }

    70% {
        transform: skewX(-4deg);
    }

    75% {
        transform: skewX(4deg);
    }

    80% {
        transform: skewX(-3deg);
    }

    85% {
        transform: skewX(3deg);
    }

    90% {
        transform: skewX(-2deg);
    }

    95% {
        transform: skewX(2deg);
    }

    100% {
        transform: skewX(1deg);
    }
}

@keyframes skewing-child {
    0% {
        transform:
            skewX(-10deg);
    }

    100% {
        transform: skewX(10deg);
    }
}

@keyframes moving {
    0% {
        transform: translate(calc(var(--size) / -2.5));
    }

    30% {
        transform:
            translate(calc(var(--size) / -10));
    }

    70% {
        transform:
            translate(calc(var(--size) / 10));
    }

    100% {
        transform:
            translate(calc(var(--size) / 2.5));
    }
}

@keyframes squishing {

    10%,
    40%,
    80% {
        transform: scale(1, .9);
    }

    0%,
    30%,
    60%,
    100% {
        transform:
            scale(.9, 1);
    }
}

5. Dashing Blob Ball

Dashing Blob Ball
Code Credits: @sasi-jj
HTML Code
<div class="scene">
  <div class="cage">
      <div class="ball">
      </div>
  </div>
</div>


CSS Code

*{
  margin:0px;
  padding:0px;
}

.scene{
  position:relative;
  width:100vw;
  height:100vh;
  display:flex;
  justify-content:center;
  align-items:center;
  background: #8E2DE2;  /* fallback for old browsers */
background: -webkit-linear-gradient(to left, #4A00E0, #8E2DE2);  /* Chrome 10-25, Safari 5.1-6 */
background: linear-gradient(to left, #4A00E0, #8E2DE2); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */

}

.cage{
  position:relative;  
  display:flex;
  justify-content:center;
  align-items:center;
  width:200px;
  height:200px;
}

.cage::before{
  content:"";
  position:absolute;
  top:0px;
  left:0px;
  width:100%;
  height:100%;
  background:rgba(251,251,251,0.08);
  animation-name: rotate;
  animation-duration: 1.5s;
  animation-iteration-count:infinite;
  box-shadow: -20px -20px 10px 0px rgba(0, 0, 0, 0.05),5px 5px 20px 0px rgba(0, 0, 0, 0.1);
}

.cage::after{
  content:"";
  position:absolute;
  bottom:10px;
  width:100%;
}

.ball{
  position:relative;
  width:20px;
  height:20px;
  border-radius:50%;
  background: #f12711;  /* fallback for old browsers */
background: -webkit-linear-gradient(to left, #f5af19, #f12711);  /* Chrome 10-25, Safari 5.1-6 */
background: linear-gradient(to left, #f5af19, #f12711); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */

  animation-name: dash;
  animation-duration: 1.5s;
  animation-iteration-count:infinite;
}

@keyframes dash {
  0%   {left:0px}
  10%  {left:25px;height:22px;width:17px;border-radius:25px;}
  15%  {height:20px;width:20px}
  30%  {border-radius:25px;height:17px;width:60px;}
  45%  {left:-90px;height:22px;width:17px;border-radius:25px;}  
  70% {border-radius:50%}
  80% {height:20px;width:20px}
  100% {left:0px;}
}

@keyframes rotate {
  0%   {left:0px;transform:rotate(0deg)}
  33%  {left:0px;transform:rotate(0deg)}
  36%  {left:-60px;transform:rotate(0deg);border-bottom-left-radius: 0%;border-top-left-radius: 0%;}
  45%  {transform:rotate(-45deg);border-bottom-left-radius: 50%;border-top-left-radius: 20%;}
  100% {left:0px;transform:rotate(0deg);border-bottom-left-radius: 0%;border-top-left-radius: 0%;}
}

6. Draggable Blob using HTML, CSS & JS

Draggable Blob using HTML, CSS & JS
Code Credits: @maaarj
HTML Code
<div class="glowy-blob">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>

<span>Drag</span>

<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 19 -9" result="goo" />
      <feComposite in="SourceGraphic" in2="goo" operator="atop"/>
    </filter>
  </defs>
</svg>
CSS(SCSS) Code
@import 'compass/css3';
@import url('https://fonts.googleapis.com/css?family=Chewy|Gloria+Hallelujah');
$bg : #121327;
html { height:100%; width:100%; }
body{
 margin:0;
 padding:0;
 height:100%;
 width:100%;
 background:$bg;
 overflow:hidden;
 @include filter(hue-rotate(0deg));
 @include animation(huerot 5s ease infinite )
}
/** end for goo container **/
@function randomNum($min, $max) {
 $rand: random();
 $randomNum: $min + floor($rand * (($max - $min) + 1));
 @return $randomNum;
}

$color:#fff;
$color2:#5048A0;
$color3:#85EDE8;
$color4:#48098b;
.glowy-blob {
 position:absolute;
 left:50%;
 top:50%;
 @include transform(translate(-50,-50));
 @include filter(url('#goo'));
 div {
  width:80px;
  height: 80px;
  background:$color3;
  @include border-radius(500px);
  display: inline-block;
  position:absolute;
  box-shadow:0px 0px 50px $color3;
  $top-collection: 0;
  $left-collection: 0;

  @for $i from 2 to 17 {
   $left: randomNum(-60px, 60px);
   $top: randomNum(-60px, 60px);
   $randWH : randomNum(30px, 60px);
   &:nth-child(#{$i}) {
    width:$randWH;
    height: $randWH;
    left:$left;
   }

   $left-collection: append($left-collection,$left);
   $top-collection: append($top-collection,$top);
  }

  @for $i from 1 to length($top-collection) {
   &:nth-child(#{$i}) {
    top: 0;
    left: 0;
    @include animation(anim-#{$i} 2.5s ease-in-out infinite);
    @if($i == 1) {
     @include animation-delay(0s);
    }
    @else {
     @include animation-delay(randomNum(1s,3s));
    }
  }
  /**keyframes **/
   @include keyframes(anim-#{$i}) {
    0%{left:0;top:0}
    50% { left:nth($left-collection, $i+1);top:nth($top-collection, $i)}
    100%{left:0;top:0}
   }
  } //end of collection loop
  &:hover {
   cursor:default;
  }
 } //end of div

} //end of glowby-blob

 span {
  color:$color3;
  opacity: 0.5;
  font-size: 24px;
  font-family:'Chewy';
  font-weight: bolder;
  text-transform: uppercase;
  letter-spacing:1px;
  position: absolute;
  left:50%;
  top:30%;
  @include transform(translate(-50,-50));
  -webkit-touch-callout: none; /* iOS Safari */
  @include user-select(none);
	 &:hover {
		 cursor:default;
	 }
 }

@include keyframes(huerot) {
 0%{@include filter(hue-rotate(0deg));}
 100%{@include filter(hue-rotate(360deg));}
}
@include keyframes(bounceback) {
 100%{left:0;top:0}
}



JavaScript Code
var doms = document.getElementsByClassName("glowy-blob"); var
selected = 0; for(var x =0;x<doms.length;x++) { for(var i =
0;i<doms[x].children.length;i++) {
doms[x].children[i].addEventListener("mousedown", function(e){
selected = this; }) } } window.addEventListener("mouseup",
function(e){ selected.style.animation = "bounceback 1s ease";
selected.style.animationFillMode = "forwards"; var lala = selected;
selected = null; setTimeout(function() { lala.style.animation = "";
lala.style.animationFillMode = ""; lala.style.left = "";
lala.style.top = ""; },1000) }) window.addEventListener("mousemove",
function(e) { if(selected == null || !selected) return;
selected.style.left = (e.clientX -
(selected.getBoundingClientRect().width/2) - window.innerWidth/2)
+"px" selected.style.top = (e.clientY -
(selected.getBoundingClientRect().height/2) - window.innerHeight/2 )
+"px" selected.style.animation = 0; })
      



If you want me to code any project or post any specific post, feel free to DM me at IG @code.scientist or @codingtorque

 If you have any doubt or any project ideas feel free to Contact Us 

Hope you find this post helpful💖 

 Written by: Coding Torque | Piyush Patil 

 Follow us on Instagram for more projects like this👨‍💻 

Post a Comment

Previous Post Next Post