This post contains a total of 3+ JavaScript Ribbon Examples with Source Code. All these Ribbons are made using JavaScript & Styled using CSS.
You can use the source code of these examples with credits to the original owner.
Related Posts
JavaScript Ribbon Examples
1. Color Ribbons
Made by Evan You. Source
<!DOCTYPE html>
<html lang="en" >
<head>
<title></title>
<style>
body,html {
font-family: Futura, "Trebuchet MS", Arial, sans-serif;
}
#about {
position:absolute;
width:100%;
height:100%;
text-align:center;
}
h1 {
padding-top:2em;
}
#ribbon {
width:100%;
height:100%;
position:fixed;
top:0;
left:0;
bottom:0;
right:0;
}
</style>
</head>
<body>
<div id="about">
<h1>Evan You</h1>
<p><a href="#">evanyou.me</a></p>
</div>
<canvas id="ribbon"></canvas>
<script src="https://cpwebassets.codepen.io/assets/common/stopExecutionOnTimeout-1b93190375e9ccc259df3a57c1abc0e64599724ae30d7ea4c6877eb615f89387.js"></script>
<script>
document.addEventListener('touchmove', function (e) {
e.preventDefault();
});
var c = document.getElementsByTagName('canvas')[0],
x = c.getContext('2d'),
pr = window.devicePixelRatio || 1,
w = window.innerWidth,
h = window.innerHeight,
f = 90,
q,
m = Math,
r = 0,
u = m.PI * 2,
v = m.cos,
z = m.random;
c.width = w * pr;
c.height = h * pr;
x.scale(pr, pr);
x.globalAlpha = 0.6;
function i() {
x.clearRect(0, 0, w, h);
q = [{ x: 0, y: h * .7 + f }, { x: 0, y: h * .7 - f }];
while (q[1].x < w + f) {if (window.CP.shouldStopExecution(0)) break;d(q[0], q[1]);}window.CP.exitedLoop(0);
}
function d(i, j) {
x.beginPath();
x.moveTo(i.x, i.y);
x.lineTo(j.x, j.y);
var k = j.x + (z() * 2 - 0.25) * f,
n = y(j.y);
x.lineTo(k, n);
x.closePath();
r -= u / -50;
x.fillStyle = '#' + (v(r) * 127 + 128 << 16 | v(r + u / 3) * 127 + 128 << 8 | v(r + u / 3 * 2) * 127 + 128).toString(16);
x.fill();
q[0] = q[1];
q[1] = { x: k, y: n };
}
function y(p) {
var t = p + (z() * 2 - 1.1) * f;
return t > h || t < 0 ? y(p) : t;
}
document.onclick = i;
document.ontouchstart = i;
i();
</script>
</body>
</html>
2. Boredom
Made by Schmuh. Source
<!DOCTYPE html>
<html lang="en" >
<head>
<title></title>
<style>
.rotate {
-webkit-animation-name: rotate;
-webkit-animation-duration: 10s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
}
@-webkit-keyframes rotate {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
.slideExpandUp {
animation-name: slideExpandUp;
-webkit-animation-name: slideExpandUp;
animation-duration: 1s;
-webkit-animation-duration: 1s;
animation-timing-function: ease-out;
-webkit-animation-timing-function: ease -out;
visibility: visible !important;
}
@keyframes slideExpandUp {
0% {
transform: translateY(100%) scaleX(0);
}
50% {
transform: translateY(0%) scaleX(1.1);
}
60% {
transform: translateY(0%) scaleX(0.9);
}
70% {
transform: translateY(0%) scaleX(1.05);
}
80% {
transform: translateY(0%) scaleX(0.95);
}
90% {
transform: translateY(0%) scaleX(1.02);
}
100% {
transform: translateY(0%) scaleX(1);
}
}
@-webkit-keyframes slideExpandUp {
0% {
-webkit-transform: translateY(100%) scaleX(0);
}
50% {
-webkit-transform: translateY(0%) scaleX(1.1);
}
60% {
-webkit-transform: translateY(0%) scaleX(0.9);
}
70% {
-webkit-transform: translateY(0%) scaleX(1.05);
}
80% {
-webkit-transform: translateY(0%) scaleX(0.95);
}
90% {
-webkit-transform: translateY(0%) scaleX(1.02);
}
100% {
-webkit-transform: translateY(0%) scaleX(1);
}
}
.fadeIn {
animation-name: fadeIn;
-webkit-animation-name: fadeIn;
animation-duration: 1.5s;
-webkit-animation-duration: 1.5s;
animation-timing-function: ease-in-out;
-webkit-animation-timing-function: ease-in-out;
visibility: visible !important;
}
@keyframes fadeIn {
0% {
transform: scale(0);
opacity: 0;
}
60% {
transform: scale(1.1);
}
80% {
transform: scale(0.9);
opacity: 1;
}
100% {
transform: scale(1);
opacity: 1;
}
}
@-webkit-keyframes fadeIn {
0% {
-webkit-transform: scale(0);
opacity: 0;
}
60% {
-webkit-transform: scale(1.1);
}
80% {
-webkit-transform: scale(0.9);
opacity: 1;
}
100% {
-webkit-transform: scale(1);
opacity: 1;
}
}
.textShadow {
animation-name: textShadow;
-webkit-animation-name: textShadow;
animation-duration: 0.8s;
-webkit-animation-duration: 0.8s;
text-shadow: 4px 4px 0px rgba(150, 150, 150, 0.58);
}
@keyframes textShadow {
0% {
text-shadow: 0px 0px 0px rgba(150, 150, 150, 0);
}
50% {
text-shadow: 2px 2px 0px rgba(150, 150, 150, 0.25);
}
100% {
text-shadow: 4px 4px 0px rgba(150, 150, 150, 0.58);
}
}
@-webkit-keyframes textShadow {
0% {
text-shadow: 0px 0px 0px rgba(150, 150, 150, 0);
}
50% {
text-shadow: 2px 2px 0px rgba(150, 150, 150, 0.25);
}
100% {
text-shadow: 4px 4px 0px rgba(150, 150, 150, 0.58);
}
}
.moveOut {
animation-name: moveOut;
-webkit-animation-name: moveOut;
animation-duration: 0.8s;
-webkit-animation-duration: 0.8s;
animation-timing-function: ease-out;
-webkit-animation-timing-function: ease-out;
}
@keyframes moveOut {
0% {
top: 0;
}
99% {
top: 400px;
}
100% {
visibility: hidden;
}
}
@-webkit-keyframes moveOut {
0% {
top: 0;
}
99% {
top: 400px;
}
100% {
visibility: hidden;
}
}
.pullDown {
animation-name: pullDown;
-webkit-animation-name: pullDown;
animation-duration: 1.1s;
-webkit-animation-duration: 1.1s;
animation-timing-function: ease-out;
-webkit-animation-timing-function: ease-out;
transform-origin: 50% 0%;
-ms-transform-origin: 50% 0%;
-webkit-transform-origin: 50% 0%;
}
@keyframes pullDown {
0% {
transform: scaleY(0.1);
}
40% {
transform: scaleY(1.02);
}
60% {
transform: scaleY(0.98);
}
80% {
transform: scaleY(1.01);
}
100% {
transform: scaleY(0.98);
}
80% {
transform: scaleY(1.01);
}
100% {
transform: scaleY(1);
}
}
@-webkit-keyframes pullDown {
0% {
-webkit-transform: scaleY(0.1);
}
40% {
-webkit-transform: scaleY(1.02);
}
60% {
-webkit-transform: scaleY(0.98);
}
80% {
-webkit-transform: scaleY(1.01);
}
100% {
-webkit-transform: scaleY(0.98);
}
80% {
-webkit-transform: scaleY(1.01);
}
100% {
-webkit-transform: scaleY(1);
}
}
.stretchRight {
animation-name: stretchRight;
-webkit-animation-name: stretchRight;
animation-duration: 0.2s;
-webkit-animation-duration: 0.2s;
animation-timing-function: ease-out;
-webkit-animation-timing-function: ease-out;
transform-origin: 0% 0%;
-ms-transform-origin: 0% 0%;
-webkit-transform-origin: 0% 0%;
}
@keyframes stretchRight {
0% {
transform: scaleX(0);
}
100% {
transform: scaleX(1);
}
}
@-webkit-keyframes stretchRight {
0% {
-webkit-transform: scaleX(0);
}
100% {
-webkit-transform: scaleX(1);
}
}
.hidden {
display: none;
}
/* ------------------------------------------------------------ */
body {
margin: 0;
padding: 0;
}
#container {
position: relative;
width: 100%;
padding-top: 50px;
font-family: "Helvetica Neue", Helvetica, sans-serif;
}
.layer {
position: absolute;
}
/* ------------------------------------- BLACK BAR */
#black_bar {
position: absolute;
z-index: 200;
width: 100%;
margin-top: 310px;
height: 50px;
background: #000;
}
.black_bar {
position: relative;
width: 100%;
text-align: center;
color: #FFF;
font-weight: bold;
font-size: 40px;
}
/* ------------------------------------- STAR */
#star {
position: absolute;
z-index: 5;
left: 50%;
margin-left: -110px;
width: 220px;
color: #ffff99;
}
.star, .star:before, .star:after {
width: 200px;
height: 200px;
border-radius: 20px;
position: relative;
text-align: center;
}
.star:before, .star:after {
content: "";
position: absolute;
top: 0;
left: 0;
}
.star:before {
-webkit-transform: rotate(30deg);
-moz-transform: rotate(30deg);
-ms-transform: rotate(30deg);
-o-transform: rotate(30deg);
}
.star:after {
-webkit-transform: rotate(60deg);
-moz-transform: rotate(60deg);
-ms-transform: rotate(60deg);
-o-transform: rotate(60deg);
}
.star.outer, .outer.star:before, .outer.star:after {
background: #80cfe3;
padding: 10px;
}
.star.inner, .inner.star:before, .inner.star:after {
background: #3985a9;
margin-top: 10px;
margin-left: 10px;
}
.star.inner:before, .star.inner:after {
top: -10px;
left: -10px;
}
.star_text {
position: absolute;
width: 200px;
margin-left: 10px;
z-index: 10;
text-align: center;
margin-top: 50px;
font-size: 40px;
}
/* ------------------------------------- RIBBON */
#ribbon {
position: absolute;
width: 350px;
z-index: 100;
margin-top: 100px;
left: 50%;
margin-left: -175px;
color: #ffff99;
}
.ribbon {
width: 350px;
position: absolute;
text-align: center;
font-size: 20px !important;
background: #80cfe3;
}
.ribbon h1 {
font-size: 50px !important;
margin: 0px;
padding: 6px 10px;
}
.ribbon:before, .ribbon:after {
content: "";
position: absolute;
display: block;
bottom: -1em;
border: 1.5em solid #80cfe3;
z-index: -1;
}
.ribbon:before {
left: -2em;
border-right-width: 1.5em;
border-left-color: transparent;
}
.ribbon:after {
right: -2em;
border-left-width: 1.5em;
border-right-color: transparent;
}
.ribbon .ribbon-content:before, .ribbon .ribbon-content:after {
border-color: #248ba6 transparent transparent transparent;
position: absolute;
display: block;
border-style: solid;
bottom: -1em;
content: "";
}
.ribbon .ribbon-content:before {
left: 0;
border-width: 1em 0 0 1em;
}
.ribbon .ribbon-content:after {
right: 0;
border-width: 1em 1em 0 0;
}
/* ------------------------------------- FLAG */
#flag {
position: absolute;
margin-top: 10px;
width: 110px;
left: 50%;
margin-left: -55px;
}
.flag {
background: #fd8a4b;
width: 110px;
height: 450px;
padding-top: 15px;
position: relative;
color: white;
font-size: 11px;
letter-spacing: 0.2em;
text-align: center;
text-transform: uppercase;
border-bottom: 25px solid #ffff99;
}
.flag:after {
content: "";
position: absolute;
z-index: 1;
left: 0;
bottom: 0;
width: 0;
height: 0;
border-bottom: 40px solid #ffff99;
border-left: 55px solid transparent;
border-right: 55px solid transparent;
}
.flag.under {
background: #febf3d;
}
.flag.under:before {
content: "";
position: absolute;
z-index: 10;
top: 450px;
left: 0;
bottom: 0;
width: 0;
height: 0;
border-bottom: 40px solid #FFF;
border-left: 55px solid transparent;
border-right: 55px solid transparent;
}
#flag_end {
position: absolute;
z-index: 150;
background: #fd8a4b;
width: 110px;
height: 95px;
margin-top: 398px;
}
#flag_end:before {
content: "";
position: absolute;
background: #fd8a4b;
margin-top: -20px;
height: 40px;
width: 110px;
-moz-transform: skewY(-10deg);
-webkit-transform: skewY(-10deg);
-o-transform: skewY(-10deg);
-ms-transform: skewY(-10deg);
transform: skewY(-10deg);
}
#flag_end:after {
content: "";
position: absolute;
z-index: 1;
left: 0;
bottom: 0;
width: 0;
height: 0;
border-bottom: 40px solid #fff;
border-left: 55px solid transparent;
border-right: 55px solid transparent;
}
#flag_end.border-top:before {
border-top: 1px solid #000;
}
.flag_over {
background: #fd8a4b;
width: 110px;
height: 380px;
-moz-transform: skewY(-10deg);
-webkit-transform: skewY(-10deg);
-o-transform: skewY(-10deg);
-ms-transform: skewY(-10deg);
transform: skewY(-10deg);
}
.flag_text_top {
text-align: center;
width: 110px;
margin-top: 250px;
color: #FFF;
font-size: 30px;
font-weight: bold;
}
.flag_text_bottom {
text-align: center;
width: 110px;
margin-top: 390px;
font-size: 22px;
color: #000;
}
</style>
</head>
<body>
<div id="container">
<div id="black_bar" class="hidden">
<div class="black_bar hidden">โข SERIOUSLY โข</div>
</div>
<div id="ribbon" class="hidden">
<div class="ribbon">
<strong class="ribbon-content">
<h1>
<span class="spacer"> </span>
<span class="hidden">B</span>
<span class="hidden">O</span>
<span class="hidden">R</span>
<span class="hidden">E</span>
<span class="hidden">D</span>
</h1>
</strong>
</div>
</div>
<div id="star" class="hidden">
<div class="layer"><div class="star_text">I AM SO</div></div>
<div class="layer"><div class="star outer rotate"></div></div>
<div class="layer"><div class="star inner rotate"></div></div>
</div>
<div id="flag" class="hidden">
<div class="layer"><div id="flag_end"></div></div>
<div class="layer"><div class="flag under"></div></div>
<div class="layer"><div class="flag_over"></div></div>
<div class="layer"><div class="flag_text_top">LIKE,</div></div>
<div class="layer"><div class="flag_text_bottom">LOL</div></div>
</div>
</div>
<script src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
setTimeout("$('#star').removeClass('hidden').addClass('fadeIn');", 100);
setTimeout("$('#ribbon').removeClass('hidden').addClass('slideExpandUp');", 700);
setTimeout("$('.ribbon-content .spacer').addClass('hidden');", 1500);
setTimeout("$('.ribbon-content span').slice(1, 2).removeClass('hidden').addClass('fadeIn');", 1500);
setTimeout("$('.ribbon-content span').slice(2, 3).removeClass('hidden').addClass('fadeIn');", 1600);
setTimeout("$('.ribbon-content span').slice(3, 4).removeClass('hidden').addClass('fadeIn');", 1700);
setTimeout("$('.ribbon-content span').slice(4, 5).removeClass('hidden').addClass('fadeIn');", 1800);
setTimeout("$('.ribbon-content span').slice(5, 6).removeClass('hidden').addClass('fadeIn');", 1900);
setTimeout("$('.ribbon-content').addClass('textShadow');", 3000);
setTimeout("$('#flag').removeClass('hidden').addClass('pullDown');", 3600);
setTimeout("$('#black_bar').removeClass('hidden').addClass('stretchRight');", 4700);
setTimeout("$('.black_bar').removeClass('hidden').addClass('fadeIn');", 4900);
setTimeout("$('#flag_end').addClass('border-top');", 6900);setTimeout("$('#flag_end').removeClass('border-top').addClass('moveOut').delay(300).fadeOut(300);", 7100);
</script>
</body>
</html>
3. Corner ribbon
Made by Kitty Giraudel. Source
<!DOCTYPE html>
<html lang="en" >
<head>
<title></title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<style>
/**
* 1. Positioning context for the ribbon.
* 2. Prevent the edges of the ribbon from being visible outside the
* box.
*/
.container {
position: relative; /* 1 */
overflow: hidden; /* 2 */
/* Demo styles */
width: 20em;
height: 10em;
border-radius: 0.25em;
margin: 8em auto 2em;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
}
.ribbon {
position: absolute; /* 1 */
top: 0; /* 1 */
right: 0; /* 1 */
padding: 0 2em; /* 2 */
text-align: center; /* 3 */
transform:
translateY(-100%)
rotate(90deg)
translateX(70.71067811865476%)
rotate(-45deg); /* 4 */
transform-origin: bottom right; /* 4 */
/* Demo styles */
text-transform: uppercase;
font-weight: 500;
font-size: 75%;
letter-spacing: 1px;
background-color: #d3f5f6;
color: rgba(0, 0, 0, 0.7);
}
/* Demo styles */
* {
box-sizing: border-box;
}
body {
font: 125% / 1.5 sans-serif;
}
.controls {
width: 21em;
margin: auto;
display: flex;
}
.controls > * {
padding: 0.5em;
flex: 1 1 50%;
}
input {
width: 100%;
padding: 0.25em;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
}
label {
font-size: 75%;
text-transform: uppercase;
color: darken(#d3f5f6, 55%);
}
</style>
</head>
<body>
<div class="container"><div class="ribbon" id="ribbon">Express</div></div>
<div class="controls">
<div>
<label for="content">Content</label>
<input type="text" id="content" value="Express" />
</div>
<div>
<label for="padding">Padding (em)</label>
<input type="number" step="0.1" min="0" max="5" value="2" id="padding" />
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const ribbon = document.querySelector('#ribbon');
document.querySelector('#content').addEventListener('change', event => {
console.log(event.target.value);
ribbon.innerText = event.target.value;
}, false);
document.querySelector('#padding').addEventListener('change', event => {
ribbon.style.paddingLeft = event.target.value + 'em';
ribbon.style.paddingRight = event.target.value + 'em';
});
});
</script>
</body>
</html>
4. CSS Animated Ribbon with JavaScript
Made by John Graham. Source
<!DOCTYPE html>
<html lang="en" >
<head>
<title></title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<style>
@import "https://fonts.googleapis.com/css?family=Oswald:400,700";
body {
font-family: "Oswald", sans-serif;
letter-spacing: 1px;
}
* {
box-sizing: border-box;
}
.ribbon {
position: absolute;
top: 0;
left: 0;
margin: 0 auto;
right: 0;
}
.ribbon [class*=ribbon-] {
margin: 74px auto 0;
transform-origin: 50% 50%;
transform: rotate(-8.5deg);
position: relative;
z-index: 4;
width: 287px;
height: 56px;
}
.ribbon [class*=ribbon-] .inner {
background: #003468;
color: #fff;
text-transform: uppercase;
text-align: center;
display: block;
width: 0;
height: 100%;
padding: 11px 0;
font-size: 1.5em;
text-shadow: 3px 3px 1px #001b47;
position: relative;
z-index: 2;
transform: skewX(-9deg);
transition: width 0.12s ease-in-out;
}
.ribbon [class*=ribbon-]:before {
content: "";
transform-origin: 0 0;
transform: rotate(-17.25deg) skewX(-9deg) translateX(158px);
display: block;
width: 0;
height: 100%;
position: absolute;
top: 0;
left: 4px;
background: #001b47;
z-index: -1;
transition: all 0.12s ease-in-out 0.7s;
}
.ribbon .ribbon-1 .inner {
letter-spacing: 19px;
font-weight: 700;
}
.ribbon.active .inner {
width: 100%;
}
.ribbon.active .ribbon-1 .inner {
transition-delay: 0.82s;
}
.ribbon.active .ribbon-1:before {
width: 158px;
transform: rotate(-17.25deg) skewX(-9deg) translateX(0);
}
.ribbon .ribbon-2 {
z-index: 3;
font-size: 45px;
width: 451px;
height: 137px;
margin-top: 22px;
}
.ribbon .ribbon-2 .inner {
padding: 19px 0;
}
.ribbon .ribbon-2 .inner:before, .ribbon .ribbon-2 .inner:after {
content: "";
position: absolute;
top: 14px;
left: 14px;
right: 14px;
bottom: 14px;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeYAAAALCAYAAACqPi4nAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjEyM0FFRTU0NUUzMTFFNTlDMjdDMEJDMDFCNjlGNDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjEyM0FFRTY0NUUzMTFFNTlDMjdDMEJDMDFCNjlGNDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEOUZEM0I5NDQ1QkQxMUU1OUMyN0MwQkMwMUI2OUY0OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2MTIzQUVFNDQ1RTMxMUU1OUMyN0MwQkMwMUI2OUY0OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pm3y348AAAIOSURBVHja7JvhboIwEMfbOZgyQF9h2cPtrfZ8+7APU0RQt7FrciQ3QqHodFT+v+RCc9ikHtX/tUe1GjFVVc3okij/0GRL5ScrT8edkt15OG4zv2cejvuRLPBw3BFZ6OG452y+8UC28HDcAc/xa/FN9k72RvaqSfzMH/EL2RPZMwcyFRMh4YkcKwAAAGC6GAHNyHZke7I1Wcm2Zp+5t+F2Trbltku/TGv9pQeuYGuxTjmjSISAS99CCHwt6l2+JfeNOaMN8PwBAAAMkSgWxIKF7oOvRYdQ5tx26kei+XmNL6JHG+Gqaop1yAIe8hZD7VuJbYc2X73ltuJ7kfAtMZcBAOAqWFeJ3N62CGXp2o9E83grgdJTnymUAEixluIfcVIQdPjq+knM91PhS/hztW+O3yUAYMSi2be6PHn7lkTzgBBDmMeaBEixbtbwkx6frVTQ5sNzBeB22DiuLvu2b8u2fiSae4QYwgwunwDcK3sN31bXt5UKusoHEaINJk524urSafuWRLNEiCHMAAxNAmQNv6+u3ywV9JUPZKlghmiDgeS2VaJyfznIJrBGNAuEGECYwZQTAHNGOVXudX1ZFnApH6RiBwFcnp0QynNWl60CS6KZI8QAwgzA7SQBlzgCGCp/jgUWLUJ5zuryl8CSaG4xywCAMAMw1iTgr44AmutBnfdykBHNDE8FgP/lR4ABABGzGigi55YSAAAAAElFTkSuQmCC") center bottom no-repeat;
background-size: 100%;
opacity: 0;
transition: opacity 0.3s ease-in-out 1.86s;
}
.ribbon .ribbon-2 .inner:before {
transform-origin: 50% 50%;
transform: rotate(180deg);
}
.ribbon .ribbon-2:before {
width: 0;
left: 11px;
transform: rotate(-10.25deg) skewX(-9deg) translateX(451px);
height: 47px;
transition-delay: 0.94s;
}
.ribbon.active .ribbon-2 .inner {
transition-delay: 1.06s;
}
.ribbon.active .ribbon-2 .inner:before, .ribbon.active .ribbon-2 .inner:after {
opacity: 1;
}
.ribbon.active .ribbon-2:before {
width: 376px;
transform: rotate(-10.25deg) skewX(-9deg) translateX(0);
}
.ribbon .ribbon-3 {
z-index: 2;
font-size: 9px;
width: 326px;
height: 55px;
margin-top: 24px;
}
.ribbon .ribbon-3 .inner {
color: #e8a713;
padding: 19px 0;
}
.ribbon .ribbon-3:before {
width: 0;
height: 47px;
left: 11px;
transform: rotate(-10.25deg) skewX(-9deg) translateX(387px);
transition-delay: 1.18s;
}
.ribbon .ribbon-3:after {
content: "";
transform-origin: 100% 100%;
transform: rotate(-15.3deg) skewX(9deg) translateX(72px);
display: block;
width: 0;
height: 45px;
position: absolute;
bottom: 0;
right: 4px;
background: #001b47;
z-index: -1;
transition-delay: 1.42s;
}
.ribbon.active .ribbon-3 .inner {
transition-delay: 1.3s;
}
.ribbon.active .ribbon-3:before {
width: 387px;
transform: rotate(-10.25deg) skewX(-9deg) translateX(0);
}
.ribbon.active .ribbon-3:after {
width: 56px;
transform: rotate(-15.3deg) skewX(9deg) translateX(0);
}
.ribbon .ball {
width: 190px;
height: 190px;
background: #e8a713;
border-radius: 95px;
padding: 85px 20px 0;
text-align: center;
color: #001b47;
border: 10px solid #001b47;
margin: -87px auto 0;
position: relative;
left: 18px;
z-index: 1;
transform-origin: 50% 50%;
transform: rotate(-8.5deg);
}
.ribbon .ball .ball-text {
font-size: 12px;
line-height: 1.2;
text-align: right;
display: block;
width: 119px;
}
.ribbon .ball .ball-text strong {
font-size: 39px;
font-style: italic;
display: block;
margin: 0 auto;
}
.ribbon .fadeLeft {
opacity: 0;
transform: translateX(-100%);
transition: all 0.3s ease-in-out 1.56s;
display: block;
}
.ribbon .fadeRight {
opacity: 0;
transform: translateX(100%);
transition: all 0.3s ease-in-out 1.56s;
display: block;
}
.ribbon .fadeIn {
opacity: 0;
transition: all 0.3s ease-in-out 1.42s;
display: block;
}
.ribbon.active .fadeLeft,
.ribbon.active .fadeRight {
opacity: 1;
transform: translateX(0);
}
.ribbon.active .fadeIn {
opacity: 1;
}
</style>
</head>
<body>
<div class="ribbon">
<div class="medallion"></div>
<div class="ribbon-1">
<span class="inner">
<span class="fadeLeft">Funtime</span>
</span>
</div>
<div class="ribbon-2">
<span class="inner">
<span class="fadeRight">Extravaganza</span>
</span>
</div>
<div class="ribbon-3">
<span class="inner">
<span class="fadeLeft">Each Funtime Purchase = One Chance to Win</span>
</span>
</div>
<div class="ball fadeIn">
<span class="ball-text">
<strong>$1,000</strong>
Daily Prize
</span>
</div>
</div>
<script src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script>
$(document).ready(function () {
setTimeout(function () {
$('.ribbon').addClass('active');
}, 500);
});
</script>
</body>
</html>