htmlcssrepeatcss-animationscontinuous

Animate bubbles upwards continuously with CSS3?


See the following image:

https://i.sstatic.net/F3znK.png

See those transparent circles in the background? What i want to do is make them animate from the bottom up, and then manually jump down (off screen) and re-start the animation. The circles are simple <span> elements with border-radius to make the circle effect.

Is this possible to do with CSS3, or will i be needing javascript for that? I would also, if possible, like to move the circles randomly sideways within an X range while moving up. I would imagine the randomness would require javascript?

If possible, i would appreciate some suggestions/ideas as for how to make it. If not possible with CSS, Javascript libraries is welcome as well!


Solution

  • Here is a pure CSS demonstration (adapted from this tutorial) that relies on the animation property. Update: Thanks to TonioElGringo the bubbles now also move sideways, although the motion is rhythmic, not random:

    html,
    body,
    #bubbles { height: 100% }
    body { overflow: hidden }
    #bubbles { padding: 100px 0 }
    .bubble {
        width: 60px;
        height: 60px;
        background: #ffb200;
        border-radius: 200px;
        -moz-border-radius: 200px;
        -webkit-border-radius: 200px;
        position: absolute;
    }
    
    .x1 {
        -webkit-transform: scale(0.9);
        -moz-transform: scale(0.9);
        transform: scale(0.9);
        opacity: 0.2;
        -webkit-animation: moveclouds 15s linear infinite, sideWays 4s ease-in-out infinite alternate;
        -moz-animation: moveclouds 15s linear infinite, sideWays 4s ease-in-out infinite alternate;
        -o-animation: moveclouds 15s linear infinite, sideWays 4s ease-in-out infinite alternate;
    }
    
    .x2 {
        left: 200px;
        -webkit-transform: scale(0.6);
        -moz-transform: scale(0.6);
        transform: scale(0.6);
        opacity: 0.5;
        -webkit-animation: moveclouds 25s linear infinite, sideWays 5s ease-in-out infinite alternate;
        -moz-animation: moveclouds 25s linear infinite, sideWays 5s ease-in-out infinite alternate;
        -o-animation: moveclouds 25s linear infinite, sideWays 5s ease-in-out infinite alternate;
    }
    .x3 {
        left: 350px;
        -webkit-transform: scale(0.8);
        -moz-transform: scale(0.8);
        transform: scale(0.8);
        opacity: 0.3;
        -webkit-animation: moveclouds 20s linear infinite, sideWays 4s ease-in-out infinite alternate;
        -moz-animation: moveclouds 20s linear infinite, sideWays 4s ease-in-out infinite alternate;
        -o-animation: moveclouds 20s linear infinite, sideWays 4s ease-in-out infinite alternate;
    }
    .x4 {
        left: 470px;
        -webkit-transform: scale(0.75);
        -moz-transform: scale(0.75);
        transform: scale(0.75);
        opacity: 0.35;
        -webkit-animation: moveclouds 18s linear infinite, sideWays 2s ease-in-out infinite alternate;
        -moz-animation: moveclouds 18s linear infinite, sideWays 2s ease-in-out infinite alternate;
        -o-animation: moveclouds 18s linear infinite, sideWays 2s ease-in-out infinite alternate;
    }
    .x5 {
        left: 150px;
        -webkit-transform: scale(0.8);
        -moz-transform: scale(0.8);
        transform: scale(0.8);
        opacity: 0.3;
        -webkit-animation: moveclouds 7s linear infinite, sideWays 1s ease-in-out infinite alternate;
        -moz-animation: moveclouds 7s linear infinite, sideWays 1s ease-in-out infinite alternate;
        -o-animation: moveclouds 7s linear infinite, sideWays 1s ease-in-out infinite alternate;
    }
    @-webkit-keyframes moveclouds {
        0% {
            top: 500px;
        }
        100% {
            top: -500px;
        }
    }
    
    @-webkit-keyframes sideWays {
        0% {
            margin-left:0px;
        }
        100% {
            margin-left:50px;
        }
    }
    
    @-moz-keyframes moveclouds {     
        0% {
            top: 500px;
        }
    
        100% {
            top: -500px;
        }
    }
    
    @-moz-keyframes sideWays {
        0% {
            margin-left:0px;
        }
        100% {
            margin-left:50px;
        }
    }
    @-o-keyframes moveclouds {
        0% {
            top: 500px;
        }
        100% {
            top: -500px;
        }
    }
    
    @-o-keyframes sideWays {
        0% {
            margin-left:0px;
        }
        100% {
            margin-left:50px;
        }
    }