C贸mo crear un efecto de falla de Cyberpunk 2077 para una imagen usando CSS

Foto de Hyunwon Jang en Unsplash
Foto de Hyunwon Jang en Unsplash

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铆 .








All Articles