JSFiddle - React, Tailwind, and code Playground
Animation to Explain CSS Triangles
by Jennifer Perrin
October 04, 2013
HTML
<h1>How a CSS Triangle is Made</h1>
<div id="whole-thing">
<div class="steps">
<div class="step-0">Imagine a box.</div>
<div class="step-1">The box has a border-top.</div>
<div class="step-2">It also has the other borders.</div>
<div class="step-5">Notice how the borders meet each other at angles.</div>
<div class="step-6">The background of the box is transparent.</div>
<div class="step-7">The box is actually zero width and zero height.</div>
<div class="step-8">Three of the borders are actually transparent in color.</div>
<div class="step-11">That's how a CSS triangle is made!</div>
</div>
<div class="triangle-demo"></div>
<div class="triangle-title">
<button id="re-run">Run Again</button>
</div>
</div>
CSS
@import url(http://fonts.googleapis.com/css?family=Andika);
.triangle-demo {
width: 100px;
height: 100px;
margin: 0 auto;
background: tan;
border-top: 0 solid #EE7C31;
border-left: 0 solid #F5D97B;
border-bottom: 0 solid #D94948;
border-right: 0 solid #8DB434;
transition: 0.8s 0.2s;
}
.step-1 .triangle-demo {
border-top-width: 10px;
}
.step-2 .triangle-demo {
border-left-width: 10px;
}
.step-3 .triangle-demo {
border-right-width: 10px;
}
.step-4 .triangle-demo {
border-bottom-width: 10px;
}
.step-6 .triangle-demo {
background: transparent;
}
.step-7 .triangle-demo {
width: 0;
height: 0;
}
.step-8 .triangle-demo {
border-left-color: transparent;
}
.step-9 .triangle-demo {
border-right-color: transparent;
}
.step-10 .triangle-demo {
border-top-color: transparent;
}
.triangle-title {
width: 300px;
padding: 1rem;
color: white;
background: #D94948;
border-radius: 20px;
margin: auto;
opacity: 0;
transition: 0.8s 0.2s;
}
.step-11 .triangle-title {
opacity: 1;
}
body {
background: #333;
font-family: 'Andika', sans-serif;
color: white;
text-align: center;
font-size: large;
transform: translateZ(0);
}
.steps {
position: relative;
height: 45px;
}
.steps > div {
position: absolute;
top: 0;
left: 0;
width: 100%;
opacity: 0;
background: #333;
transition: 0.3s;
}
.steps .step-0 {
opacity: 1;
}
.step-1 .steps .step-1 {
opacity: 1;
}
.step-2 .steps .step-2 {
opacity: 1;
}
.step-5 .steps .step-5 {
opacity: 1;
}
.step-6 .steps .step-6 {
opacity: 1;
}
.step-7 .steps .step-7 {
opacity: 1;
}
.step-8 .steps .step-8 {
opacity: 1;
}
.step-11 .steps .step-11 {
opacity: 1;
}
h1 {
text-transform: uppercase;
letter-spacing: 1px;
font-size: 1.5rem;
border-bottom: 1px solid #555;
color: #999;
}
JavaScript
(function() {
var demo, run;
demo = $("#whole-thing");
run = function() {
setTimeout(function() {
return demo.addClass("step-1");
}, 2500);
setTimeout(function() {
return demo.addClass("step-2");
}, 5000);
setTimeout(function() {
return demo.addClass("step-3");
}, 5500);
setTimeout(function() {
return demo.addClass("step-4");
}, 6000);
setTimeout(function() {
return demo.addClass("step-5");
}, 7500);
setTimeout(function() {
return demo.addClass("step-6");
}, 10000);
setTimeout(function() {
return demo.addClass("step-7");
}, 12000);
setTimeout(function() {
return demo.addClass("step-8");
}, 14000);
setTimeout(function() {
return demo.addClass("step-9");
}, 14500);
setTimeout(function() {
return demo.addClass("step-10");
}, 15000);
return setTimeout(function() {
return demo.addClass("step-11");
}, 18000);
};
run();
$("#re-run").on('click', function() {
$("#whole-thing").removeClass();
return run();
});
}).call(this);