Trucos de CSS y JavaScript para darle vida a su sitio estático

He estado trabajando en mi sitio durante las últimas semanas y quería darle algo de dinamismo. Este artículo no trata sobre la creación de una página web. Le mostraré fragmentos listos para usar con explicaciones.








Animación 3D en JS



El primer truco es un maravilloso efecto 3D en JS.





Como puede ver, cuando el puntero del ratón pasa sobre esta "tarjeta", los elementos que contiene adquieren una tridimensionalidad.



Cómo hacerlo



Primero se crea el div HTML:



<div class="card">
  <div class="header">
    <img src='image.png' alt="image">
  </div>
  <div class="info">
    <h1 class="title"><a href="https://hackerone.com/hensis">Hackerone</a></h1>
    <h3>Started on 6/20 Signal : 5.67 Reputation : 360 Impact : 26.25</h3>
  </div>
</div>

      
      





Aquí tenemos una clase principal (tarjeta) y otras dos clases dentro de la tarjeta (encabezado e información). El encabezado será la clase que contiene la imagen (en nuestro ejemplo, el logotipo de Medium), y la información contendrá el texto en la tarjeta. Ahora agreguemos algo de CSS para que el mapa se vea mejor.



.card {
    transform-style: preserve-3d;
    min-height: 64vh;
    width: 20vw;
    border-radius: 30px;
    padding: 0rem 5rem;
    box-shadow: 0 20px 20px rgba(0, 0, 0, 0.2), 0px 0px 50px rgba(0, 0, 0, 0.2);
}

      
      





Aquí he declarado alto, ancho, borde, relleno y sombra. Actualice la página y debería ver los resultados. El último paso es lograr un efecto 3D cuando pasa el mouse sobre el mapa. Para esto, usé JS:



// declaring variables

const card = document.querySelector(".card");
const title = document.querySelector(".title");
const header = document.querySelector(".header img");
const description = document.querySelector(".info h3");

// Animate In

card.addEventListener("mouseenter", (e) => {
  card.style.transition = "none";
  title.style.transform = "translateZ(3px)";
  header.style.transform = "translateZ(3px) rotateZ(0deg)";
  description.style.transform = "translateZ(3px)";
});

// Animate Out

card.addEventListener("mouseleave", (e) => {
  card.style.transition = "all 0.5s ease";
  card.style.transform = `rotateY(0deg) rotateX(0deg)`;
  title.style.transform = "translateZ(0px)";
  header.style.transform = "translateZ(0px) rotateZ(0deg)";
  description.style.transform = "translateZ(0px)";
});

      
      





  1. Declarar variables.
  2. Cree dos oyentes de eventos para la tarjeta.
  3. En mouseenter, traduzca Z a 3 píxeles para título, encabezado y descripción. También puede decidir si rotar estos elementos o no (rotateZ).
  4. Al salir del ratón, todo vuelve a la normalidad.


Eso es todo: tienes una hermosa animación en 3D. Por supuesto que ahora está crudo. Puede agregar CSS en todas partes para cambiar el ancho, el color, etc.



Descubra Vanta.js para la animación de fondo



¿Estás cansado de colores e imágenes estáticas en el fondo de tu página web? VantaJs está diseñado para dar vida al fondo:







Cómo se hace



Es bastante simple. Agregue el siguiente código a HTML:



<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r121/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
<script>
  VANTA.GLOBE({
  el: "#htmlid",
  mouseControls: true,
  touchControls: true,
  gyroControls: true,
  minHeight: 200.00,
  minWidth: 200.00,
  scale: 1.00,
  scaleMobile: 1.00
  })
</script>

      
      





Esto establecerá el fondo de Globo de Vanta.js en el htmlid.

Vanta.js tiene 13 fondos prediseñados




Para cambiar entre ellos, cambie VANTA.GLOBE a VANTA. [Backgroundname]. Por supuesto, debe agregar el cdn.jsdelivr.net/npm/vanta@latest/dist/vanta . [Backgroundname] .min.js correspondiente antes de eso.



ScrollReveal



Para aquellos que no conocían esta fantástica biblioteca JS, ScrollReveal puede mostrar elementos al desplazarse por una página web:







Cómo está hecho



  1. Agregue al encabezado de su HTML.
  2. En el archivo JS, escriba:


ScrollReveal().reveal('.htmlclass',{ delay: 400 })
      
      





El código mostrará un elemento con la clase .htmlclass con un retraso de 400ms en el desplazamiento de la página.



Cambiar el tamaño y el color de las letras



Este pequeño truco de CSS es realmente impresionante cuando se usa correctamente:







Cómo hacerlo



Cree algunos elementos HTML nuevos y especifique su clase:



<span class="change">T</span><span class="change">e</span><span class="change">s</span><span class="change">t</span>

      
      







3. Aplicando CSS: al pasar el cursor, cambiamos el tamaño de las letras y su color:




.blast:hover {
    color:#08fdd8;
    font-size: 30px;
}

      
      





Ahora, cuando pase el cursor sobre las letras, verá cómo cambian de tamaño y color. Para lograr un efecto aún más dinámico, sugiero crear una clase separada para cada letra con diferentes tamaños y colores. Alternativamente, puede aplicar CSS: desplazarse a cada tipo de elemento en HTML. Por ejemplo, también lo apliqué a mi formulario de contacto:







Propiedad de animación



Complementamos el material con una descripción de una propiedad de un artículo de Chris Coyer.



La propiedad de animación en CSS se puede utilizar para animar muchas otras propiedades de CSS, como color , color de fondo , alto o ancho . Cada animación debe definirse usando @keyframes, que luego se llama usando la propiedad de animación, por ejemplo:



.element {
  animation: pulse 5s infinite;
}

@keyframes pulse {
  0% {
    background-color: #001F3F;
  }
  100% {
    background-color: #FF4136;
  }
}
      
      







Cada regla @keyframes define lo que debería suceder en ciertos puntos de la animación. Por ejemplo, 0% es el inicio de la animación y 100% es el final. Estos fotogramas clave se pueden manipular con la propiedad abreviada de animación o sus ocho subpropiedades para proporcionar más control sobre los fotogramas clave.



Subpropiedades



  • animation-name: declara el nombre de la regla @keyframes a controlar.
  • animation-duration: duración de un ciclo de animación.
  • animation-time-function: establece curvas de aceleración predefinidas, como facilidad o lineal.
  • animation-delay: el tiempo entre la carga del elemento y el inicio de la secuencia de animación ( ejemplos interesantes ).
  • animation-direction: establece la dirección de la animación después del bucle. Su valor predeterminado se restablece en cada ciclo.
  • animation-iteration-count: cuántas veces se debe ejecutar la animación.
  • animation-fill-mode: establece qué valores se aplican antes / después de la animación.

    Por ejemplo, puede configurar el último estado de la animación para que permanezca en la pantalla, o puede configurarlo para que vuelva atrás cuando la animación haya comenzado.
  • animation-play-state: pausar / reproducir animación.


Entonces estas subpropiedades se pueden aplicar así:



@keyframes stretch {
  /* declare animation actions here */
}

.element {
  animation-name: stretch;
  animation-duration: 1.5s; 
  animation-timing-function: ease-out; 
  animation-delay: 0s;
  animation-direction: alternate;
  animation-iteration-count: infinite;
  animation-fill-mode: none;
  animation-play-state: running; 
}

/*
  is the same as:
*/

.element {
  animation: 
    stretch
    1.5s
    ease-out
    0s
    alternate
    infinite
    none
    running;
}

      
      







Aquí hay una lista completa de valores que puede tomar cada una de estas propiedades anidadas:



animation-timing-function



facilidad, facilidad de salida, facilidad de entrada, facilidad de entrada y salida, lineal, cúbico-bezier (x1, y1, x2, y2) (por ejemplo, cúbico-bezier (0,5, 0,2, 0,3, 1,0))
animation-duration



Xs o Xms
animation-delay



Xs o Xms
animation-iteration-count



X
animation-fill-mode



adelante, atrás, ambos, ninguno
animation-direction



normal, alterno
animation-play-state



en pausa, corriendo, corriendo




Pocos pasos



Si la animación tiene las mismas propiedades de inicio y final, es útil separar los valores 0 y 100% dentro de @keyframes con comas:



@keyframes pulse {
  0%, 100% {
    background-color: yellow;
  }
  50% {
    background-color: red;
  }
}
      
      







Varias animaciones



Puede separar los valores con comas para declarar también varias animaciones en el selector. En el siguiente ejemplo, queremos cambiar el color del círculo en @keyframe mientras lo movemos de lado a lado con una propiedad diferente.



.element {
  animation: 
    pulse 3s ease infinite alternate, 
    nudge 5s linear infinite alternate;
}
      
      







Actuación



La animación de la mayoría de las propiedades es un problema de rendimiento , por lo que debemos tener cuidado antes de animar cualquier propiedad. Sin embargo, hay ciertas combinaciones que se pueden animar de forma segura:



  • transformar: traducir ()

  • transformar: escala ()

  • transformar: rotar ()

  • opacidad



¿Qué propiedades puedes animar?



MDN tiene una lista de propiedades CSS que se pueden animar . Suelen ser colores y números. Un ejemplo de una propiedad no animada es background-image.



Más información
  • MDN.

  • CSS.

  • W3C.

  • Jank busting .

  • - .

  • .

  • , , .

  • CSS .



.



Soporte de navegador



Estos datos de soporte del navegador se toman del sitio web de Caniuse para obtener más información. El número significa que el navegador admite la función en esta versión y en versiones posteriores.



Mesa

Cromo

Firefox

ES DECIR

Borde

Safari

4 *

5 *

diez

12

5,1 *



Móvil

Android Chrome

Android Firefox

Androide

Safari de iOS

87

83

4 *

6.0-6.1 *



Prefijos



Si bien la compatibilidad con esta propiedad es suficientemente buena en los navegadores modernos, es posible que deseemos admitir la mayor cantidad posible de navegadores antiguos. En este caso, debe utilizar prefijos de proveedor:



.element {
  -webkit-animation: KEYFRAME-NAME 5s infinite;
  -moz-animation:    KEYFRAME-NAME 5s infinite;
  -o-animation:      KEYFRAME-NAME 5s infinite;
  animation:         KEYFRAME-NAME 5s infinite;
}

@-webkit-keyframes KEYFRAME-NAME {
  0%   { opacity: 0; }
  100% { opacity: 1; }
}
@-moz-keyframes KEYFRAME-NAME {
  0%   { opacity: 0; }
  100% { opacity: 1; }
}
@-o-keyframes KEYFRAME-NAME {
  0%   { opacity: 0; }
  100% { opacity: 1; }
}
@keyframes KEYFRAME-NAME {
  0%   { opacity: 0; }
  100% { opacity: 1; }
}
      
      







Estos trucos son excelentes para darle vida al sitio de su tarjeta de presentación o al sitio de un proyecto favorito en el que está trabajando. Si tienes algunos trucos propios, te animo a compartirlos en los comentarios. Y no te olvides del código de promoción HABR , que te da un 10% de descuento adicional al indicado en el banner.



imagen






Otras profesiones y cursos


















All Articles