<!-- extracted from (and improved upon) http://www.theverge.com/a/anatomy-of-a-hack -->
<h2 class="glitch heading" data-text="CSS GLITCH">CSS GLITCH</h2>
.glitch {
position: relative;
display: inline-block;
text-transform: uppercase;
}
.glitch:after {
clip: rect(0, 9999px, 0, 0);
content: attr(data-text);
left: 0; /* Was 1px */
overflow: hidden;
position: absolute;
text-shadow: -1px 0 #ab77a9;
top: 0;
-webkit-animation: noise-anim 2s infinite linear alternate-reverse;
animation: noise-anim 2s infinite linear alternate-reverse;
}
.glitch:before {
clip: rect(0, 9999px, 0, 0);
content: attr(data-text);
top: 0;
left: 0;
overflow: hidden;
position: absolute;
text-shadow: 2px 0 #05d003;
-webkit-animation: noise-anim-2 3s infinite linear alternate-reverse;
animation: noise-anim-2 3s infinite linear alternate-reverse;
}
.heading:before {
transform: translateX(-1px);
text-shadow: 1px 0 #a10897;
}
.heading:after {
transform: translateX(1px);
text-shadow: -1px 0 #05d003;
}
body {
font-size: 5vw;
white-space: nowrap;
text-align: center;
}
@keyframes noise-anim {
0% {
clip: rect(21px, 9999px, 57px, 0);
}
5% {
clip: rect(21px, 9999px, 80px, 0);
}
10% {
clip: rect(55px, 9999px, 69px, 0);
}
15.0% {
clip: rect(22px, 9999px, 55px, 0);
}
20% {
clip: rect(38px, 9999px, 69px, 0);
}
25% {
clip: rect(31px, 9999px, 84px, 0);
}
30.0% {
clip: rect(15px, 9999px, 28px, 0);
}
35% {
clip: rect(16px, 9999px, 100px, 0);
}
40% {
clip: rect(25px, 9999px, 10px, 0);
}
45% {
clip: rect(19px, 9999px, 19px, 0);
}
50% {
clip: rect(71px, 9999px, 35px, 0);
}
55.0% {
clip: rect(89px, 9999px, 21px, 0);
}
60.0% {
clip: rect(20px, 9999px, 34px, 0);
}
65% {
clip: rect(22px, 9999px, 61px, 0);
}
70% {
clip: rect(65px, 9999px, 28px, 0);
}
75% {
clip: rect(82px, 9999px, 47px, 0);
}
80% {
clip: rect(64px, 9999px, 11px, 0);
}
85.0% {
clip: rect(63px, 9999px, 28px, 0);
}
90% {
clip: rect(60px, 9999px, 60px, 0);
}
95% {
clip: rect(9px, 9999px, 90px, 0);
}
100% {
clip: rect(40px, 9999px, 62px, 0);
}
}
@-webkit-keyframes noise-anim {
0% {
clip: rect(21px, 9999px, 57px, 0);
}
5% {
clip: rect(21px, 9999px, 80px, 0);
}
10% {
clip: rect(55px, 9999px, 69px, 0);
}
15.0% {
clip: rect(22px, 9999px, 55px, 0);
}
20% {
clip: rect(38px, 9999px, 69px, 0);
}
25% {
clip: rect(31px, 9999px, 84px, 0);
}
30.0% {
clip: rect(15px, 9999px, 28px, 0);
}
35% {
clip: rect(16px, 9999px, 100px, 0);
}
40% {
clip: rect(25px, 9999px, 10px, 0);
}
45% {
clip: rect(19px, 9999px, 19px, 0);
}
50% {
clip: rect(71px, 9999px, 35px, 0);
}
55.0% {
clip: rect(89px, 9999px, 21px, 0);
}
60.0% {
clip: rect(20px, 9999px, 34px, 0);
}
65% {
clip: rect(22px, 9999px, 61px, 0);
}
70% {
clip: rect(65px, 9999px, 28px, 0);
}
75% {
clip: rect(82px, 9999px, 47px, 0);
}
80% {
clip: rect(64px, 9999px, 11px, 0);
}
85.0% {
clip: rect(63px, 9999px, 28px, 0);
}
90% {
clip: rect(60px, 9999px, 60px, 0);
}
95% {
clip: rect(9px, 9999px, 90px, 0);
}
100% {
clip: rect(40px, 9999px, 62px, 0);
}
}
@keyframes noise-anim-2 {
0% {
clip: rect(77px, 9999px, 63px, 0);
}
5% {
clip: rect(7px, 9999px, 6px, 0);
}
10% {
clip: rect(82px, 9999px, 78px, 0);
}
15.0% {
clip: rect(85px, 9999px, 25px, 0);
}
20% {
clip: rect(93px, 9999px, 38px, 0);
}
25% {
clip: rect(70px, 9999px, 96px, 0);
}
30.0% {
clip: rect(41px, 9999px, 72px, 0);
}
35% {
clip: rect(39px, 9999px, 65px, 0);
}
40% {
clip: rect(36px, 9999px, 34px, 0);
}
45% {
clip: rect(84px, 9999px, 96px, 0);
}
50% {
clip: rect(99px, 9999px, 45px, 0);
}
55.0% {
clip: rect(37px, 9999px, 73px, 0);
}
60.0% {
clip: rect(63px, 9999px, 20px, 0);
}
65% {
clip: rect(55px, 9999px, 44px, 0);
}
70% {
clip: rect(58px, 9999px, 11px, 0);
}
75% {
clip: rect(61px, 9999px, 82px, 0);
}
80% {
clip: rect(60px, 9999px, 9px, 0);
}
85.0% {
clip: rect(37px, 9999px, 69px, 0);
}
90% {
clip: rect(32px, 9999px, 64px, 0);
}
95% {
clip: rect(63px, 9999px, 16px, 0);
}
100% {
clip: rect(47px, 9999px, 34px, 0);
}
}
@-webkit-keyframes noise-anim-2 {
0% {
clip: rect(77px, 9999px, 63px, 0);
}
5% {
clip: rect(7px, 9999px, 6px, 0);
}
10% {
clip: rect(82px, 9999px, 78px, 0);
}
15.0% {
clip: rect(85px, 9999px, 25px, 0);
}
20% {
clip: rect(93px, 9999px, 38px, 0);
}
25% {
clip: rect(70px, 9999px, 96px, 0);
}
30.0% {
clip: rect(41px, 9999px, 72px, 0);
}
35% {
clip: rect(39px, 9999px, 65px, 0);
}
40% {
clip: rect(36px, 9999px, 34px, 0);
}
45% {
clip: rect(84px, 9999px, 96px, 0);
}
50% {
clip: rect(99px, 9999px, 45px, 0);
}
55.0% {
clip: rect(37px, 9999px, 73px, 0);
}
60.0% {
clip: rect(63px, 9999px, 20px, 0);
}
65% {
clip: rect(55px, 9999px, 44px, 0);
}
70% {
clip: rect(58px, 9999px, 11px, 0);
}
75% {
clip: rect(61px, 9999px, 82px, 0);
}
80% {
clip: rect(60px, 9999px, 9px, 0);
}
85.0% {
clip: rect(37px, 9999px, 69px, 0);
}
90% {
clip: rect(32px, 9999px, 64px, 0);
}
95% {
clip: rect(63px, 9999px, 16px, 0);
}
100% {
clip: rect(47px, 9999px, 34px, 0);
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.