Al ir al sitio web de Cyberpunk 2077 en la secci贸n de noticias , encontr茅 el "mismo" efecto. Apareci贸 al pasar el cursor sobre la imagen de la publicaci贸n. Lo encontr茅 interesante y decid铆 ver c贸mo funciona. En esta publicaci贸n, me gustar铆a compartir lo que encontr茅.
Para lograr este efecto, necesitamos mostrar la imagen 2 veces, superponi茅ndolas una encima de la otra. El efecto en s铆 aparecer谩 en la imagen que se encuentra en la parte superior.
, . .
<div class="container">
<div class="img"></div>
<div class="glitch"></div>
</div>
.
.img,
.glitch {
display: block;
background-image: url('https://images.unsplash.com/photo-1551771685-c367c9127a03?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1000&q=80');
background-repeat: no-repeat;
background-size: cover;
width: 564px;
height: 376px;
}
2 . , . .
.glitch {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.container {
position: relative;
}
. . .
.glitch:hover {
-webkit-animation-duration:2s;
animation-duration:2s;
-webkit-animation-timing-function:linear;
animation-timing-function:linear;
-webkit-animation-iteration-count:infinite;
animation-iteration-count:infinite;
-webkit-animation-name:glitch-anim;
animation-name:glitch-anim;
-webkit-animation-direction:alternate;
animation-direction:alternate
}
:
animation-duration - , 2 ;
animation-timing-function - , ;
animation-iteration-count - ;
animation-name - , ;
animation-direction : la direcci贸n de la animaci贸n, con el valor alternativo, la animaci贸n va de principio a fin y luego regresa.
Queda el 煤ltimo detalle: describir la animaci贸n en s铆. Para hacer esto, usaremos la regla @keyframes
.
Revelaci贸n
@keyframes glitch-anim {
0% {
opacity:1;
-webkit-transform:translateZ(0);
transform:translateZ(0);
-webkit-clip-path:polygon(0 2%,100% 2%,100% 5%,0 5%);
clip-path:polygon(0 2%,100% 2%,100% 5%,0 5%)
}
2% {
-webkit-clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
-webkit-transform:translate(-5px);
transform:translate(-5px)
}
6% {
-webkit-clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
-webkit-transform:translate(5px);
transform:translate(5px)
}
8% {
-webkit-clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
-webkit-transform:translate(-5px);
transform:translate(-5px)
}
9% {
-webkit-clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
clip-path:polygon(0 78%,100% 78%,100% 100%,0 100%);
-webkit-transform:translate(0);
transform:translate(0)
}
10% {
-webkit-clip-path:polygon(0 54%,100% 54%,100% 44%,0 44%);
clip-path:polygon(0 54%,100% 54%,100% 44%,0 44%);
-webkit-transform:translate3d(5px,0,0);
transform:translate3d(5px,0,0)
}
13% {
-webkit-clip-path:polygon(0 54%,100% 54%,100% 44%,0 44%);
clip-path:polygon(0 54%,100% 54%,100% 44%,0 44%);
-webkit-transform:translateZ(0);
transform:translateZ(0)
}
13.1% {
-webkit-clip-path:polygon(0 0,0 0,0 0,0 0);
clip-path:polygon(0 0,0 0,0 0,0 0);
-webkit-transform:translate3d(5px,0,0);
transform:translate3d(5px,0,0)
}
15% {
-webkit-clip-path:polygon(0 60%,100% 60%,100% 40%,0 40%);
clip-path:polygon(0 60%,100% 60%,100% 40%,0 40%);
-webkit-transform:translate3d(5px,0,0);
transform:translate3d(5px,0,0)
}
20% {
-webkit-clip-path:polygon(0 60%,100% 60%,100% 40%,0 40%);
clip-path:polygon(0 60%,100% 60%,100% 40%,0 40%);
-webkit-transform:translate3d(-5px,0,0);
transform:translate3d(-5px,0,0)
}
20.1% {
-webkit-clip-path:polygon(0 0,0 0,0 0,0 0);
clip-path:polygon(0 0,0 0,0 0,0 0);
-webkit-transform:translate3d(5px,0,0);
transform:translate3d(5px,0,0)
}
25% {
-webkit-clip-path:polygon(0 85%,100% 85%,100% 40%,0 40%);
clip-path:polygon(0 85%,100% 85%,100% 40%,0 40%);
-webkit-transform:translate3d(5px,0,0);
transform:translate3d(5px,0,0)
}
30% {
-webkit-clip-path:polygon(0 85%,100% 85%,100% 40%,0 40%);
clip-path:polygon(0 85%,100% 85%,100% 40%,0 40%);
-webkit-transform:translate3d(-5px,0,0);
transform:translate3d(-5px,0,0)
}
30.1% {
-webkit-clip-path:polygon(0 0,0 0,0 0,0 0);
clip-path:polygon(0 0,0 0,0 0,0 0)
}
35% {
-webkit-clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
-webkit-transform:translate(-5px);
transform:translate(-5px)
}
40% {
-webkit-clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
-webkit-transform:translate(5px);
transform:translate(5px)
}
45% {
-webkit-clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
-webkit-transform:translate(-5px);
transform:translate(-5px)
}
50% {
-webkit-clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
clip-path:polygon(0 63%,100% 63%,100% 80%,0 80%);
-webkit-transform:translate(0);
transform:translate(0)
}
55% {
-webkit-clip-path:polygon(0 10%,100% 10%,100% 0,0 0);
clip-path:polygon(0 10%,100% 10%,100% 0,0 0);
-webkit-transform:translate3d(5px,0,0);
transform:translate3d(5px,0,0)
}
60% {
-webkit-clip-path:polygon(0 10%,100% 10%,100% 0,0 0);
clip-path:polygon(0 10%,100% 10%,100% 0,0 0);
-webkit-transform:translateZ(0);
transform:translateZ(0);
opacity:1
}
60.1% {
-webkit-clip-path:polygon(0 0,0 0,0 0,0 0);
clip-path:polygon(0 0,0 0,0 0,0 0);
opacity:1
}
to {
-webkit-clip-path:polygon(0 0,0 0,0 0,0 0);
clip-path:polygon(0 0,0 0,0 0,0 0);
opacity:1
}
}
Explicaciones del c贸digo.
La animaci贸n se divide en partes por porcentaje. Se producen ciertos cambios en cada parte.
La propiedad clip-path
corta un pol铆gono de la imagen y le aplica varios efectos. Por ejemplo, transform: translate(-5px)
- desplaza el pol铆gono hacia la izquierda y hacia arriba.
Puedes ver lo que pas贸 aqu铆 .