Floating island with moving clouds and animated waterfall. Created for #codepenchallenge
A Pen by Dejan Lukac on CodePen.
Floating island with moving clouds and animated waterfall. Created for #codepenchallenge
A Pen by Dejan Lukac on CodePen.
<!doctype html> | |
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Floating Island with waterfall - #cpc-water #codepenchallenge</title> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<link href="_css/styles.css" rel="stylesheet" type="text/css"> | |
<script type="text/javascript" src="_js/jquery-3.2.1.min.js"></script> | |
<script type="text/javascript" src="_js/functions.js"></script> | |
</head> | |
<body class="noScroll"> | |
<div id="background"> | |
<div id="islandContainer" class="animated"> | |
<img src="http://www.dejanlukac.com/test/_img/small-cloud.png" class="cloudSmall animated" alt="" /> | |
<img src="http://www.dejanlukac.com/test/_img/big-cloud.png" class="cloudBig animated" alt="" /> | |
<img src="http://www.dejanlukac.com/test/_img/floating-island.png" class="island" alt="" /> | |
<div id="islandInsideContainer"> | |
<div id="leftWaterfall"> | |
<div class="waterParticle animated"></div> | |
<div class="waterParticle delay1 animated"></div> | |
<div class="waterParticle delay2 animated"></div> | |
<div class="waterParticle delay3 animated"></div> | |
<div class="waterParticle delay4 animated"></div> | |
<div class="waterParticle delay5 animated"></div> | |
<div class="waterParticle delay6 animated"></div> | |
<div class="waterParticle delay7 animated"></div> | |
<div class="waterParticle delay8 animated"></div> | |
<div class="waterParticle delay9 animated"></div> | |
<div class="waterParticle delay10 animated"></div> | |
<div class="waterParticle delay11 animated"></div> | |
</div><!-- End of #leftWaterfall --> | |
<div id="rightWaterfall"> | |
<div class="waterParticle animated"></div> | |
<div class="waterParticle delay1 animated"></div> | |
<div class="waterParticle delay2 animated"></div> | |
<div class="waterParticle delay3 animated"></div> | |
<div class="waterParticle delay4 animated"></div> | |
<div class="waterParticle delay5 animated"></div> | |
<div class="waterParticle delay6 animated"></div> | |
<div class="waterParticle delay7 animated"></div> | |
<div class="waterParticle delay8 animated"></div> | |
</div><!-- End of #rightWaterfall --> | |
</div><!-- End of #islandInsideContainer --> | |
</div><!-- End of #islandContainer --> | |
</div><!-- End of #background --> | |
</body> | |
</html> |
$(window).on('load', function() { | |
$(window).on('resize', function(event){ redrawElements(); }); | |
redrawElements(); | |
}); | |
function redrawElements(event) { | |
var islandWidth = $('#islandContainer img.island').width(); | |
var islandHeight = $('#islandContainer img.island').height(); | |
var islandPosition = $('#islandContainer img.island').offset().left - $('#islandContainer').offset().left; | |
$('#islandInsideContainer').css('width',islandWidth + 'px'); | |
$('#islandInsideContainer').css('height',islandHeight + 'px'); | |
$('#islandInsideContainer').css('left',islandPosition + 'px'); | |
var container = $('#islandInsideContainer').width(); | |
bigCloudWidth = container * 40 / 100; | |
smallCloudWidth = container * 20 / 100; | |
$('.cloudBig').css('width', bigCloudWidth + 'px'); | |
$('.cloudSmall').css('width', smallCloudWidth + 'px'); | |
} | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> |
html, body { | |
margin: 0; | |
padding: 0; | |
} | |
body.noScroll { | |
position: fixed; | |
width: 100%; | |
height: 100%; | |
overflow: hidden; | |
} | |
#background.hidden { display: block; visibility: hidden; } | |
#background { | |
position: absolute; | |
width: 100%; | |
height: 100%; | |
top: 0; | |
left: 0; | |
background: #fff; | |
} | |
#background { | |
background: -o-radial-gradient(center, ellipse cover, #47d3ff 0%, #1c6588 100%); | |
background: -moz-radial-gradient(center, ellipse cover, #47d3ff 0%, #1c6588 100%); | |
background: -webkit-radial-gradient(center, ellipse cover, #47d3ff 0%,#1c6588 100%); | |
background: radial-gradient(ellipse at center, #47d3ff 0%,#1c6588 100%); | |
} | |
#background #islandContainer { | |
position: relative; | |
width: 30%; | |
height: 70%; | |
top: 60%; | |
left: 50%; | |
-webkit-transform: translate(-50%,-47%); | |
-moz-transform: translate(-50%,-47%); | |
-o-transform: translate(-50%,-47%); | |
transform: translate(-50%,-47%); | |
} | |
#background #islandContainer img.island { | |
position: relative; | |
display:block; | |
max-width:100%; | |
max-height:100%; | |
margin:auto; | |
} | |
#background img.cloudBig { | |
position: absolute; | |
height: auto; | |
top: -17%; | |
left: 51%; | |
opacity: 0; | |
} | |
#background img.cloudSmall { | |
position: absolute; | |
height: auto; | |
top: -7%; | |
left: 37%; | |
opacity: 0; | |
} | |
#background #islandContainer #islandInsideContainer { | |
position: absolute; | |
top:0; | |
} | |
#background #islandContainer .waterParticle { | |
position: absolute; | |
width: 2%; | |
height: 2%; | |
top: 30%; | |
right:51.4%; | |
opacity:0.1; | |
} | |
/* | |
---------- OPENING ANIMATIONS ---------- | |
*/ | |
#background #islandContainer.animated { | |
-webkit-animation: movingIsland 4s ease-in-out 0s infinite alternate; | |
-moz-animation: movingIsland 4s ease-in-out 0s infinite alternate; | |
-o-animation: movingIsland 4s ease-in-out 0s infinite alternate; | |
animation: movingIsland 4s ease-in-out 0s infinite alternate; | |
} | |
#background img.cloudSmall.animated { | |
-webkit-animation: smallCloudAnimation 25s linear 0s infinite; | |
-moz-animation: smallCloudAnimation 25s linear 0s infinite; | |
-o-animation: smallCloudAnimation 25s linear 0s infinite; | |
animation: smallCloudAnimation 25s linear 0s infinite; | |
} | |
#background img.cloudBig.animated { | |
-webkit-animation: bigCloudAnimation 17s linear 0s infinite; | |
-moz-animation: bigCloudAnimation 17s linear 0s infinite; | |
-o-animation: bigCloudAnimation 17s linear 0s infinite; | |
animation: bigCloudAnimation 17s linear 0s infinite; | |
} | |
#background #islandContainer #leftWaterfall .waterParticle.animated { | |
-webkit-animation: waterAnimationLeft 2s linear 0s infinite; | |
-moz-animation: waterAnimationLeft 2s linear 0s infinite; | |
-o-animation: waterAnimationLeft 2s linear 0s infinite; | |
animation: waterAnimationLeft 2s linear 0s infinite; | |
} | |
#background #islandContainer #rightWaterfall .waterParticle.animated { | |
top: 38%; | |
left: 97%; | |
width: 1.5%; | |
height: 1.5%; | |
-webkit-animation: waterAnimationRight 2s linear 0s infinite; | |
-moz-animation: waterAnimationRight 2s linear 0s infinite; | |
-o-animation: waterAnimationRight 2s linear 0s infinite; | |
animation: waterAnimationRight 2s linear 0s infinite; | |
} | |
.delay1 { animation-delay: 0.25s !important; } | |
.delay2 { animation-delay: 0.5s !important; } | |
.delay3 { animation-delay: 0.75s !important; } | |
.delay4 { animation-delay: 1s !important; } | |
.delay5 { animation-delay: 1.25s !important; } | |
.delay6 { animation-delay: 1.5s !important; } | |
.delay7 { animation-delay: 1.75s !important; } | |
.delay8 { animation-delay: 2s !important; } | |
.delay9 { animation-delay: 2.25s !important; } | |
.delay10 { animation-delay: 2.5s !important; } | |
.delay11 { animation-delay: 2.75s !important; } | |
@-webkit-keyframes waterAnimationLeft { | |
0% { -webkit-transform: translate(0%,0%) rotate3d(0,0,0); background: #94c1c5; opacity: 0.9;} | |
25% { -webkit-transform: translate(-900%,200%) rotate3d(1,0,0,180deg); background: #e8e4de; opacity: 0.9;} | |
45% { -webkit-transform: translate(-1600%,250%) rotate3d(1,0,0,360deg); background: #94c1c5; opacity: 0.9;} | |
55% { -webkit-transform: translate(-1950%,450%) rotate3d(0,1,1,180deg); background: #5787b1; opacity: 1; } | |
95% { opacity: 0.1; } | |
100% { -webkit-transform: translate(-1900%,1900%) rotate3d(0,1,0,360deg); background: #94c1c5; opacity: 0.1; } | |
} | |
@-moz-keyframes waterAnimationLeft { | |
0% { -moz-transform: translate(0%,0%) rotate3d(0,0,0); background: #94c1c5; opacity: 0.9;} | |
25% { -moz-transform: translate(-900%,200%) rotate3d(1,0,0,180deg); background: #e8e4de; opacity: 0.9;} | |
45% { -moz-transform: translate(-1600%,250%) rotate3d(1,0,0,360deg); background: #94c1c5; opacity: 0.9;} | |
55% { -moz-transform: translate(-1950%,450%) rotate3d(0,1,1,180deg); background: #5787b1; opacity: 1; } | |
95% { opacity: 0.1; } | |
100% { -moz-transform: translate(-1900%,1900%) rotate3d(0,1,0,360deg); background: #94c1c5; opacity: 0.1; } | |
} | |
@-o-keyframes waterAnimationLeft { | |
0% { -o-transform: translate(0%,0%) rotate3d(0,0,0); background: #94c1c5; opacity: 0.9;} | |
25% { -o-transform: translate(-900%,200%) rotate3d(1,0,0,180deg); background: #e8e4de; opacity: 0.9;} | |
45% { -o-transform: translate(-1600%,250%) rotate3d(1,0,0,360deg); background: #94c1c5; opacity: 0.9;} | |
55% { -o-transform: translate(-1950%,450%) rotate3d(0,1,1,180deg); background: #5787b1; opacity: 1; } | |
95% { opacity: 0.1; } | |
100% { -o-transform: translate(-1900%,1900%) rotate3d(0,1,0,360deg); background: #94c1c5; opacity: 0.1; } | |
} | |
@keyframes waterAnimationLeft { | |
0% { transform: translate(0%,0%) rotate3d(0,0,0); background: #94c1c5; opacity: 0.9;} | |
25% { transform: translate(-900%,200%) rotate3d(1,0,0,180deg); background: #e8e4de; opacity: 0.9;} | |
45% { transform: translate(-1600%,250%) rotate3d(1,0,0,360deg); background: #94c1c5; opacity: 0.9;} | |
55% { transform: translate(-1950%,450%) rotate3d(0,1,1,180deg); background: #5787b1; opacity: 1; } | |
95% { opacity: 0.1; } | |
100% { transform: translate(-1900%,1900%) rotate3d(0,1,0,360deg); background: #94c1c5; opacity: 0.1; } | |
} | |
@-webkit-keyframes waterAnimationRight { | |
0% { -webkit-transform: translate(0%,0%) rotate3d(0,0,0); background: #7d9ec2; ; opacity: 0.9;} | |
50% { -webkit-transform: translate(-200%,1600%) rotate3d(0,1,0,400deg); background: #f2f2e4; opacity: 0.9;} | |
95% { opacity: 0.1; } | |
100% { -webkit-transform: translate(-100%,3200%) rotate3d(0,1,0,720deg); background: #3d7294; opacity: 0.1; } | |
} | |
@-moz-keyframes waterAnimationRight { | |
0% { -moz-transform: translate(0%,0%) rotate3d(0,0,0); background: #7d9ec2; ; opacity: 0.9;} | |
50% { -moz-transform: translate(-200%,1600%) rotate3d(0,1,0,400deg); background: #f2f2e4; opacity: 0.9;} | |
95% { opacity: 0.1; } | |
100% { -moz-transform: translate(-100%,3200%) rotate3d(0,1,0,720deg); background: #3d7294; opacity: 0.1; } | |
} | |
@-o-keyframes waterAnimationRight { | |
0% { -o-transform: translate(0%,0%) rotate3d(0,0,0); background: #7d9ec2; ; opacity: 0.9;} | |
50% { -o-transform: translate(-200%,1600%) rotate3d(0,1,0,400deg); background: #f2f2e4; opacity: 0.9;} | |
95% { opacity: 0.1; } | |
100% { -o-transform: translate(-100%,3200%) rotate3d(0,1,0,720deg); background: #3d7294; opacity: 0.1; } | |
} | |
@keyframes waterAnimationRight { | |
0% { transform: translate(0%,0%) rotate3d(0,0,0); background: #7d9ec2; ; opacity: 0.1;} | |
50% { transform: translate(-130%,1600%) rotate3d(0,1,0,400deg); background: #f2f2e4; opacity: 0.9;} | |
95% { opacity: 0.1; } | |
100% { transform: translate(-100%,3200%) rotate3d(0,1,0,720deg); background: #3d7294; opacity: 0.1; } | |
} | |
@-webkit-keyframes movingIsland { | |
0% { -webkit-transform: translate(-50%,-47%); } | |
100% { -webkit-transform: translate(-50%,-53%); } | |
} | |
@-moz-keyframes movingIsland { | |
0% { -moz-transform: translate(-50%,-47%); } | |
100% { -moz-transform: translate(-50%,-53%); } | |
} | |
@-o-keyframes movingIsland { | |
0% { -o-transform: translate(-50%,-47%); } | |
100% { -o-transform: translate(-50%,-53%); } | |
} | |
@keyframes movingIsland { | |
0% { transform: translate(-50%,-47%); } | |
100% { transform: translate(-50%,-53%); } | |
} | |
@-webkit-keyframes smallCloudAnimation { | |
0% { -webkit-transform: translate(0%,0%); opacity: 0; } | |
20% { -webkit-transform: translate(60%,0%); opacity: 1; } | |
80% { -webkit-transform: translate(240%,0%); opacity: 1; } | |
100% { -webkit-transform: translate(300%,0%); opacity: 0; } | |
} | |
@-moz-keyframes smallCloudAnimation { | |
0% { -moz-transform: translate(0%,0%); opacity: 0; } | |
20% { -moz-transform: translate(60%,0%); opacity: 1; } | |
80% { -moz-transform: translate(240%,0%); opacity: 1; } | |
100% { -moz-transform: translate(300%,0%); opacity: 0; } | |
} | |
@-o-keyframes smallCloudAnimation { | |
0% { -o-transform: translate(0%,0%); opacity: 0; } | |
20% { -o-transform: translate(60%,0%); opacity: 1; } | |
80% { -o-transform: translate(240%,0%); opacity: 1; } | |
100% { -o-transform: translate(300%,0%); opacity: 0; } | |
} | |
@keyframes smallCloudAnimation { | |
0% { transform: translate(0%,0%); opacity: 0; } | |
20% { transform: translate(60%,0%); opacity: 1; } | |
80% { transform: translate(240%,0%); opacity: 1; } | |
100% { transform: translate(300%,0%); opacity: 0; } | |
} | |
@-webkit-keyframes bigCloudAnimation { | |
0% { -webkit-transform: translate(0%,0%); opacity: 0; } | |
20% { -webkit-transform: translate(-30%,0%); opacity: 1; } | |
80% { -webkit-transform: translate(-120%,0%); opacity: 1; } | |
100% { -webkit-transform: translate(-150%,0%); opacity: 0; } | |
} | |
@-moz-keyframes bigCloudAnimation { | |
0% { -moz-transform: translate(0%,0%); opacity: 0; } | |
20% { -moz-transform: translate(-30%,0%); opacity: 1; } | |
80% { -moz-transform: translate(-120%,0%); opacity: 1; } | |
100% { -moz-transform: translate(-150%,0%); opacity: 0; } | |
} | |
@-o-keyframes bigCloudAnimation { | |
0% { -o-transform: translate(0%,0%); opacity: 0; } | |
20% { -o-transform: translate(-30%,0%); opacity: 1; } | |
80% { -o-transform: translate(-120%,0%); opacity: 1; } | |
100% { -o-transform: translate(-150%,0%); opacity: 0; } | |
} | |
@keyframes bigCloudAnimation { | |
0% { transform: translate(0%,0%); opacity: 0; } | |
20% { transform: translate(-30%,0%); opacity: 1; } | |
80% { transform: translate(-120%,0%); opacity: 1; } | |
100% { transform: translate(-150%,0%); opacity: 0; } | |
} | |
@media only screen and (min-width : 767px) and (max-width : 1024px) { | |
#openingAnimation #background #islandContainer { width: 60%;top: 60%; } | |
#openingAnimation #background img.cloudBig { top: 13%; left: 54%; } | |
#openingAnimation #background img.cloudSmall { top: 20%; left: 20%; } | |
} | |
@media only screen and (min-width : 767px) and (max-width : 1024px) and (orientation: landscape) { | |
#openingAnimation #background #islandContainer { width: 40%;top: 60%; } | |
#openingAnimation #background img.cloudBig { top: 11%; left: 52%; } | |
#openingAnimation #background img.cloudSmall { top: 18%; left: 31%; } | |
} | |
@media only screen and (max-width : 767px) { | |
#openingAnimation #background #islandContainer { width: 70%;top: 60%; } | |
#openingAnimation #background img.cloudBig { top: 12%; left: 57%; } | |
#openingAnimation #background img.cloudSmall { top: 17%; left: 17%; } | |
} | |
@media only screen and (max-width : 767px) and (orientation: landscape) { | |
#openingAnimation #background #islandContainer { width: 30%;top: 60%; } | |
#openingAnimation #background img.cloudBig { top: 11%; left: 51%; } | |
#openingAnimation #background img.cloudSmall { top: 16%; left: 37%; } | |
} | |