Reputation: 11
My glitch animation is left justified and stays with the left side of the browser window if the window is resized, leaving the normal WELCOME text in the center. The before and after animation is offset by 2px to give it a glitch look. How can I center the glitch "WELCOME" over the normal "WELCOME" text, and still keep the before and after animations offset from each other by 2px?
body {
background-color: #4b4b4b;
font-family: arial;
}
.glitch {
color: white;
font-size: 100px;
}
.glitch {
position: relative;
}
.glitch:after {
animation: glitch-animation 2s infinite linear alternate-reverse;
background: #4b4b4b;
clip: rect( 0, 900px, 0, 0);
color: white;
content: attr( data-text);
left: 2px;
overflow: hidden;
position: absolute;
text-shadow: -1px 0 red;
top: 0;
}
.glitch:before {
animation: glitch-animation-2 3s infinite linear alternate-reverse;
background: #4b4b4b;
clip: rect( 0, 900px, 0, 0);
color: white;
content: attr( data-text);
left: -2px;
overflow: hidden;
position: absolute;
text-shadow: 1px 0 blue;
top: 0;
}
@keyframes glitch-animation {
0% {
clip: rect(42px, 9999px, 44px, 0);
}
5% {
clip: rect(12px, 9999px, 59px, 0);
}
10% {
clip: rect(48px, 9999px, 29px, 0);
}
15.0% {
clip: rect(42px, 9999px, 73px, 0);
}
20% {
clip: rect(63px, 9999px, 27px, 0);
}
25% {
clip: rect(34px, 9999px, 55px, 0);
}
30.0% {
clip: rect(86px, 9999px, 73px, 0);
}
35% {
clip: rect(20px, 9999px, 20px, 0);
}
40% {
clip: rect(26px, 9999px, 60px, 0);
}
45% {
clip: rect(25px, 9999px, 66px, 0);
}
50% {
clip: rect(57px, 9999px, 98px, 0);
}
55.0% {
clip: rect(5px, 9999px, 46px, 0);
}
60.0% {
clip: rect(82px, 9999px, 31px, 0);
}
65% {
clip: rect(54px, 9999px, 27px, 0);
}
70% {
clip: rect(28px, 9999px, 99px, 0);
}
75% {
clip: rect(45px, 9999px, 69px, 0);
}
80% {
clip: rect(23px, 9999px, 85px, 0);
}
85.0% {
clip: rect(54px, 9999px, 84px, 0);
}
90% {
clip: rect(45px, 9999px, 47px, 0);
}
95% {
clip: rect(37px, 9999px, 20px, 0);
}
100% {
clip: rect(4px, 9999px, 91px, 0);
}
}
@keyframes glitch-animation-2 {
0% {
clip: rect(65px, 9999px, 100px, 0);
}
5% {
clip: rect(52px, 9999px, 74px, 0);
}
10% {
clip: rect(79px, 9999px, 85px, 0);
}
15.0% {
clip: rect(75px, 9999px, 5px, 0);
}
20% {
clip: rect(67px, 9999px, 61px, 0);
}
25% {
clip: rect(14px, 9999px, 79px, 0);
}
30.0% {
clip: rect(1px, 9999px, 66px, 0);
}
35% {
clip: rect(86px, 9999px, 30px, 0);
}
40% {
clip: rect(23px, 9999px, 98px, 0);
}
45% {
clip: rect(85px, 9999px, 72px, 0);
}
50% {
clip: rect(71px, 9999px, 75px, 0);
}
55.0% {
clip: rect(2px, 9999px, 48px, 0);
}
60.0% {
clip: rect(30px, 9999px, 16px, 0);
}
65% {
clip: rect(59px, 9999px, 50px, 0);
}
70% {
clip: rect(41px, 9999px, 62px, 0);
}
75% {
clip: rect(2px, 9999px, 82px, 0);
}
80% {
clip: rect(47px, 9999px, 73px, 0);
}
85.0% {
clip: rect(3px, 9999px, 27px, 0);
}
90% {
clip: rect(26px, 9999px, 55px, 0);
}
95% {
clip: rect(42px, 9999px, 97px, 0);
}
100% {
clip: rect(38px, 9999px, 49px, 0);
}
}
<div class="glitch" data-text="WELCOME" align="center">WELCOME</div>
Upvotes: 1
Views: 37
Reputation: 2443
https://jsfiddle.net/j4fa7xnr/
Check this out. Basically, your div had a 100% width. When you then position your after and before pseudo elements, they would be aligned to the left of the div, not the left of the "welcome" text.
What I did is, I added a container around your "glitch" div, made the container display:flex
and added display:inline-block
to the glitch div, so it only has the width of the text. If it has the width of the text, then if you position your :after and :before elements, they will be positioned correctly as the .glitch
div no longer has a 100% width.
EDIT: Here is another version, without flex and instead text-align:center;
.
https://jsfiddle.net/j4fa7xnr/1/
Thanks @Showdev
Upvotes: 1
Reputation: 206048
body {background-color: #4b4b4b;font-family: arial;}
.glitch {
color: white;
font-size: 100px;
position: relative;
}
.glitch:before,
.glitch:after{
animation: glitch-animation 2s infinite linear alternate-reverse;
background: #4b4b4b;
clip: rect( 0, 900px, 0, 0);
color: white;
content: attr( data-text);
position: absolute;
top: 0;
width: 100%; /* JUST ATT THIS */
}
.glitch:after {
left: 2px;
text-shadow: -1px 0 red;
}
.glitch:before {
left: -2px;
text-shadow: 1px 0 blue;
}
@keyframes glitch-animation {
0% {
clip: rect(42px, 9999px, 44px, 0);
}
5% {
clip: rect(12px, 9999px, 59px, 0);
}
10% {
clip: rect(48px, 9999px, 29px, 0);
}
15.0% {
clip: rect(42px, 9999px, 73px, 0);
}
20% {
clip: rect(63px, 9999px, 27px, 0);
}
25% {
clip: rect(34px, 9999px, 55px, 0);
}
30.0% {
clip: rect(86px, 9999px, 73px, 0);
}
35% {
clip: rect(20px, 9999px, 20px, 0);
}
40% {
clip: rect(26px, 9999px, 60px, 0);
}
45% {
clip: rect(25px, 9999px, 66px, 0);
}
50% {
clip: rect(57px, 9999px, 98px, 0);
}
55.0% {
clip: rect(5px, 9999px, 46px, 0);
}
60.0% {
clip: rect(82px, 9999px, 31px, 0);
}
65% {
clip: rect(54px, 9999px, 27px, 0);
}
70% {
clip: rect(28px, 9999px, 99px, 0);
}
75% {
clip: rect(45px, 9999px, 69px, 0);
}
80% {
clip: rect(23px, 9999px, 85px, 0);
}
85.0% {
clip: rect(54px, 9999px, 84px, 0);
}
90% {
clip: rect(45px, 9999px, 47px, 0);
}
95% {
clip: rect(37px, 9999px, 20px, 0);
}
100% {
clip: rect(4px, 9999px, 91px, 0);
}
}
@keyframes glitch-animation-2 {
0% {
clip: rect(65px, 9999px, 100px, 0);
}
5% {
clip: rect(52px, 9999px, 74px, 0);
}
10% {
clip: rect(79px, 9999px, 85px, 0);
}
15.0% {
clip: rect(75px, 9999px, 5px, 0);
}
20% {
clip: rect(67px, 9999px, 61px, 0);
}
25% {
clip: rect(14px, 9999px, 79px, 0);
}
30.0% {
clip: rect(1px, 9999px, 66px, 0);
}
35% {
clip: rect(86px, 9999px, 30px, 0);
}
40% {
clip: rect(23px, 9999px, 98px, 0);
}
45% {
clip: rect(85px, 9999px, 72px, 0);
}
50% {
clip: rect(71px, 9999px, 75px, 0);
}
55.0% {
clip: rect(2px, 9999px, 48px, 0);
}
60.0% {
clip: rect(30px, 9999px, 16px, 0);
}
65% {
clip: rect(59px, 9999px, 50px, 0);
}
70% {
clip: rect(41px, 9999px, 62px, 0);
}
75% {
clip: rect(2px, 9999px, 82px, 0);
}
80% {
clip: rect(47px, 9999px, 73px, 0);
}
85.0% {
clip: rect(3px, 9999px, 27px, 0);
}
90% {
clip: rect(26px, 9999px, 55px, 0);
}
95% {
clip: rect(42px, 9999px, 97px, 0);
}
100% {
clip: rect(38px, 9999px, 49px, 0);
}
}
<div class="glitch" data-text="WELCOME" align="center">WELCOME</div>
Upvotes: 0