Apples 12 Days of Christmas style created using html5 canvas and css3, and instead counting down the days until christmas :D
A Pen by Lennart Hase on CodePen.
Apples 12 Days of Christmas style created using html5 canvas and css3, and instead counting down the days until christmas :D
A Pen by Lennart Hase on CodePen.
| <canvas></canvas> | |
| <div class="loop"></div> | |
| <div class="no" id="no">X</div> | |
| <div class="days" id="days">DAYS</div> | |
| <div class="line"></div> | |
| <div class="text" id="text">UNTIL CHRISTMAS</div> |
| window.requestAnimFrame = (function(){ | |
| return window.requestAnimationFrame || | |
| window.webkitRequestAnimationFrame || | |
| window.mozRequestAnimationFrame || | |
| window.oRequestAnimationFrame || | |
| window.msRequestAnimationFrame || | |
| function( callback ){ | |
| window.setTimeout(callback, 1000 / 60); | |
| }; | |
| })(); | |
| var canvas = document.getElementsByTagName("canvas")[0]; | |
| var ctx = canvas.getContext("2d"); | |
| var w = window.innerWidth, h = window.outerHeight; | |
| canvas.width = w; | |
| canvas.height = h; | |
| var circles = 60; | |
| var circle_array = []; | |
| function init(){ | |
| ctx.fillStyle = "#100d04"; | |
| ctx.rect(this.x,this.y,w,h); | |
| ctx.fill(); | |
| for(var i=0;i<circles;i++){ | |
| var c = new circle(); | |
| circle_array.push(c); | |
| } | |
| var d = new Date(); | |
| var day = d.getDate(); | |
| var days_to_go = 25 - day; | |
| if(d.getMonth() != 11){ | |
| days_to_go = -1; | |
| } | |
| if(days_to_go == 0){ | |
| // IT'S CHRISTMAS | |
| document.getElementById("no").innerHTML = "X"; | |
| document.getElementById("days").innerHTML = "CHRISTMAS"; | |
| document.getElementById("days").style.left = "-webkit-calc(50% - 240px)"; | |
| document.getElementById("text").innerHTML = "IS HERE"; | |
| document.getElementById("text").style.left = "-webkit-calc(50% - 40px)"; | |
| } | |
| else if(days_to_go < 0){ | |
| // IT'S CHRISTMAS | |
| document.getElementById("no").innerHTML = "X"; | |
| document.getElementById("days").innerHTML = "CHRISTMAS"; | |
| document.getElementById("days").style.left = "-webkit-calc(50% - 240px)"; | |
| document.getElementById("text").innerHTML = "HAS PAST, COME BACK NEXT YEAR"; | |
| document.getElementById("text").style.left = "-webkit-calc(50% - 240px)"; | |
| } | |
| else{ | |
| document.getElementById("no").innerHTML = ""+days_to_go+""; | |
| } | |
| } | |
| function circle(){ | |
| this.x = Math.random()*w; | |
| this.y = Math.random()*h; | |
| this.r = 0; | |
| this.r_max = Math.floor(Math.random() * 55)+15; | |
| this.opacity = Math.floor(Math.random() * 1)+0.2; | |
| this.draw = function(){ | |
| ctx.fillStyle = "hsla(48,97%,59%,"+this.opacity+")"; | |
| ctx.beginPath(); | |
| ctx.arc(this.x,this.y,this.r, 0, Math.PI*2, false); | |
| ctx.fill(); | |
| } | |
| } | |
| function drawscene(){ | |
| ctx.fillStyle = "rgba(0,0,0,1)"; | |
| ctx.rect(0,0,w,h); | |
| ctx.fill(); | |
| for(var i=0;i<circle_array.length;i++){ | |
| if(circle_array[i].r>=circle_array[i].r_max){ | |
| if(circle_array[i].opacity<0.01){ | |
| circle_array[i] = new circle(); | |
| } | |
| else{ | |
| circle_array[i].opacity -= 0.01; | |
| } | |
| } | |
| else{ | |
| circle_array[i].r += Math.random()*0.3; | |
| } | |
| circle_array[i].draw(); | |
| } | |
| } | |
| function animloop() { | |
| drawscene(); | |
| requestAnimFrame(animloop); | |
| } | |
| init(); | |
| animloop(); |
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
| body{ | |
| margin: 0; | |
| padding: 0; | |
| background: #100d04; | |
| overflow: hidden; | |
| } | |
| canvas{ | |
| -webkit-filter: blur(8px); | |
| } | |
| div.no{ | |
| position: absolute; | |
| top: -webkit-calc(50% - 100px); | |
| left: -webkit-calc(50% - 50px); | |
| background: rgb(163,114,46); /* Old browsers */ | |
| background: -moz-linear-gradient(-45deg, rgba(163,114,46,1) 0%, rgba(208,157,47,1) 0%, rgba(255,254,170,1) 67%, rgba(254,218,79,1) 99%); /* FF3.6+ */ | |
| background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(163,114,46,1)), color-stop(0%,rgba(208,157,47,1)), color-stop(67%,rgba(255,254,170,1)), color-stop(99%,rgba(254,218,79,1))); /* Chrome,Safari4+ */ | |
| background: -webkit-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Chrome10+,Safari5.1+ */ | |
| background: -o-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Opera 11.10+ */ | |
| background: -ms-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* IE10+ */ | |
| background: linear-gradient(135deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* W3C */ | |
| filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a3722e', endColorstr='#feda4f',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ | |
| border: 2px solid #e1c15c; | |
| border-radius: 5px; | |
| font-family: Arial Black; | |
| font-size: 72px; | |
| width: 130px; | |
| height: 100px; | |
| text-align: center; | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| } | |
| div.days{ | |
| position: absolute; | |
| top: -webkit-calc(50% - 10px); | |
| left: -webkit-calc(50% - 95px); | |
| background: rgb(163,114,46); /* Old browsers */ | |
| background: -moz-linear-gradient(-45deg, rgba(163,114,46,1) 0%, rgba(208,157,47,1) 0%, rgba(255,254,170,1) 67%, rgba(254,218,79,1) 99%); /* FF3.6+ */ | |
| background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(163,114,46,1)), color-stop(0%,rgba(208,157,47,1)), color-stop(67%,rgba(255,254,170,1)), color-stop(99%,rgba(254,218,79,1))); /* Chrome,Safari4+ */ | |
| background: -webkit-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Chrome10+,Safari5.1+ */ | |
| background: -o-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Opera 11.10+ */ | |
| background: -ms-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* IE10+ */ | |
| background: linear-gradient(135deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* W3C */ | |
| filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a3722e', endColorstr='#feda4f',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| font-family: Arial Black; | |
| font-size: 82px; | |
| } | |
| div.line{ | |
| position: absolute; | |
| top: -webkit-calc(50% + 90px); | |
| left: -webkit-calc(50% - 140px); | |
| background: rgb(163,114,46); /* Old browsers */ | |
| background: -moz-linear-gradient(-45deg, rgba(163,114,46,1) 0%, rgba(208,157,47,1) 0%, rgba(255,254,170,1) 67%, rgba(254,218,79,1) 99%); /* FF3.6+ */ | |
| background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(163,114,46,1)), color-stop(0%,rgba(208,157,47,1)), color-stop(67%,rgba(255,254,170,1)), color-stop(99%,rgba(254,218,79,1))); /* Chrome,Safari4+ */ | |
| background: -webkit-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Chrome10+,Safari5.1+ */ | |
| background: -o-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Opera 11.10+ */ | |
| background: -ms-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* IE10+ */ | |
| background: linear-gradient(135deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* W3C */ | |
| filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a3722e', endColorstr='#feda4f',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ | |
| width: 350px; | |
| height: 1px; | |
| } | |
| div.text{ | |
| position: absolute; | |
| top: -webkit-calc(50% + 100px); | |
| left: -webkit-calc(50% - 110px); | |
| background: rgb(163,114,46); /* Old browsers */ | |
| background: -moz-linear-gradient(-45deg, rgba(163,114,46,1) 0%, rgba(208,157,47,1) 0%, rgba(255,254,170,1) 67%, rgba(254,218,79,1) 99%); /* FF3.6+ */ | |
| background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(163,114,46,1)), color-stop(0%,rgba(208,157,47,1)), color-stop(67%,rgba(255,254,170,1)), color-stop(99%,rgba(254,218,79,1))); /* Chrome,Safari4+ */ | |
| background: -webkit-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Chrome10+,Safari5.1+ */ | |
| background: -o-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* Opera 11.10+ */ | |
| background: -ms-linear-gradient(-45deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* IE10+ */ | |
| background: linear-gradient(135deg, rgba(163,114,46,1) 0%,rgba(208,157,47,1) 0%,rgba(255,254,170,1) 67%,rgba(254,218,79,1) 99%); /* W3C */ | |
| filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a3722e', endColorstr='#feda4f',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| font-family: Arial; | |
| font-size: 32px; | |
| } | |
| div.loop{ | |
| position: absolute; | |
| top: -webkit-calc(50% - 134px); | |
| left: -webkit-calc(50% + 12px); | |
| border: 2px solid #e1c15c; | |
| border-radius: 0 50px 50px 50px; | |
| width: 30px; | |
| height: 30px; | |
| -webkit-transform: rotate(265deg); | |
| } | |
| div.loop:after{ | |
| content: ''; | |
| position: absolute; | |
| top: -31px; | |
| left: 0px; | |
| border: 2px solid #e1c15c; | |
| border-radius: 0 50px 50px 50px; | |
| width: 30px; | |
| height: 30px; | |
| -webkit-transform: rotate(280deg); | |
| } | |
| div.loop:before{ | |
| content: ''; | |
| position: absolute; | |
| top: -8px; | |
| left: -16px; | |
| border-left: 2px solid #e1c15c; | |
| border-bottom: 2px solid #e1c15c; | |
| width: 10px; | |
| height: 10px; | |
| -webkit-transform: rotate(230deg); | |
| } |