Advertisement
  1. Web Design
  2. HTML/CSS
  3. Animation

Realza la manera en que se carga una página web con animaciones CSS

Scroll to top
Read Time: 5 min

() translation by (you can also view the original English article)

En un tutorial previo, creamos una página responsiva a pantalla completa con flexbox. Hoy, haremos que esta página sea más atractiva agregándole algunas animaciones de CSS.

Aquí está lo que vamos a crear:


1. El archivo HTML

Para añadir las animaciones deseadas, actualizaremos ligeramente el marcado (markup) de la página inicial. En el tutorial anterior, el marcado de nuestro elemento main se veía así:

1
<main class="page-main">
2
  <div>
3
    <h1>...</h1>
4
    <p>...</p>
5
    <p>...</p>
6
  </div>
7
</main>

Para los fines de este tutorial, añadiremos algunas envolturas (wrappers) adicionales, cambiándolo a esto:

1
<main class="page-main">
2
  <div>
3
    <div class="text-wrapper">
4
      <h1>...</h1>
5
    </div>
6
    <div class="text-wrapper p-wrapper">
7
      <p>...</p>
8
    </div>
9
    <div class="text-wrapper p-wrapper">
10
      <p>...</p>
11
    </div>
12
  </div>
13
</main>

Abajo se muestra el marcado general de la página después de esta modificación:

1
<div class="wrapper">
2
  <header class="page-header">
3
    <nav>
4
      <h2>...</h2>
5
      <ul>...</ul>
6
      <button class="cta-contact">...</button>
7
    </nav>
8
  </header>
9
  <main class="page-main">
10
    <div>
11
      <div class="text-wrapper">
12
        <h1>...</h1>
13
      </div>
14
      <div class="text-wrapper p-wrapper">
15
        <p>...</p>
16
      </div>
17
      <div class="text-wrapper p-wrapper">
18
        <p>...</p>
19
      </div>
20
    </div> 
21
  </main>
22
  <footer class="page-footer">
23
    <small>...</small>
24
    <ul>...</ul>
25
  </footer>
26
</div>

2. Añadiendo los estilos CSS iniciales

Con el HTML colocado, concentremos nuestra atención en las cosas importantes: el CSS.

Para iniciar haremos cuatro cosas:

  1. Ocultamos todos los elementos de la página.
  2. Ajustamos los estilos para los elementos header y footer y sus subelementos.
  3. Definimos los estilos para ::after del pseudo-elemento del header.
  4. Especificamos lo estilos para las envolturas del texto y sus subelementos dentro de main.

Aquí están los estilos asociados:

1
/* variables */
2
:root {
3
  --main-purple-color: #9e89b8;
4
}
5
6
.page-header nav > *,
7
.page-main,
8
.page-footer > * {
9
  opacity: 0;
10
}
11
12
.page-header,
13
.page-footer,
14
.page-main .text-wrapper {
15
  overflow: hidden;
16
}
17
18
.page-header nav > * {
19
  transform: translateY(-30px);
20
}
21
22
.page-footer > * {
23
  transform: translateY(30px);
24
}
25
26
.page-header {
27
  position: relative;
28
}
29
30
.page-header::after {
31
  content: '';
32
  position: absolute;
33
  bottom: 0;
34
  left: 0;
35
  width: 100%;
36
  height: 2px;
37
  background: var(--main-purple-color);
38
  z-index: 99999;
39
  transform: scaleX(0);
40
}
41
42
.page-main .text-wrapper + .text-wrapper {
43
  margin-top: 10px;
44
}
45
46
.page-main .text-wrapper * {
47
  transform: translateY(120%);
48
}
49
50
.page-main .p-wrapper * {
51
  transform: translateY(-120%);
52
}

3. Iniciando las animaciones CSS

Con HTML y CSS básico preparados, ahora podemos concentrarnos en las animaciones de la página.

No obstante, antes de hacer eso, asegurémonos de que entendemos cuándo deberían ejecutarse: idealmente, tan pronto como la página esté completamente cargada. Esto asegura que todos los recursos de la página estarán listos, colocados en la posición correcta, y no perderemos ninguno de los efectos de animación.

Teniendo en cuenta eso, primero esperamos que se cargue la página, y cuando eso ocurra, usamos JavaScript para añadir una clase loaded al body.

Aquí está el código JavaScript relacionado:

1
window.addEventListener("load", () => {
2
 document.querySelector("body").classList.add("loaded"); 
3
});

Cualquier animación que apliquemos se hará a los descendientes de la clase loaded.

Así que, nuestra primera animación de escalado se dirige al pseudoelemento ::after del header:

1
.loaded .page-header::after {
2
  animation: scaleIn 1.3s ease-in 0.2s forwards;
3
}
4
5
@keyframes scaleIn {
6
  100% {
7
    transform: scaleX(1);
8
  }
9
}

Sugerencia: De forma predeterminada, el origen de transformación de un elemento es su centro, por lo que la animación del pseudo-elemento comienza desde su centro. Si quieres que la animación inicie desde otra posición, solo cambia el valor de la propiedad transform-origin del elemento de destino.

A continuación puedes ver cómo cambia nuestra animación cuando aplicamos un transform-origin diferente:

Luego, utilizamos un efecto de aparición gradual para mostrar los elementos de la página. Además de esta animación, también utilizamos una animación deslizable para mostrar el contenido de header y de footer:

1
.loaded .page-main {
2
  animation: fadeIn 1s ease-in 0.7s forwards;
3
}
4
5
.loaded .page-header nav > *,
6
.loaded .page-footer > * {
7
  animation: fadeIn 1s ease-in 0.7s forwards, slideIn 0.8s ease-in 0.9s forwards;
8
}
9
10
@keyframes fadeIn {
11
  60% {
12
    opacity: 0;
13
  }
14
  
15
  100% {
16
    opacity: 1;
17
  }
18
}
19
20
@keyframes slideIn {
21
  100% {
22
    transform: translateY(0);
23
  }
24
}

Finalmente, los elementos de main se hacen visibles a través de un efecto deslizante:

1
.loaded .page-main .text-wrapper * {
2
  animation: slideIn 0.6s cubic-bezier(0.54, 0.46, 0.54, 0.94) 2s forwards;
3
}
4
5
@keyframes slideIn {
6
  100% {
7
    transform: translateY(0);
8
  }
9
}

Ahora veamos nuevamente lo que acabamos de crear:

Conclusión

En este breve tutorial, logramos animar una página HTML de flexbox aprovechando las animaciones CSS.

Unas cuantas notas antes de cerrar:

  • En vez de animaciones CSS, también podríamos haber utilizado transiciones CSS (casi todas nuestras animaciones van desde un estado inicial hasta un estado final). La animación de aparición gradual es la más complicada porque incluye tres pasos de animación (0%, 60%, 100%).
  • En lugar de transformaciones 2d, podríamos haber utilizado igualmente transformaciones 3d.
  • Experimenta con los valores de las propiedades animation-duration y animation-delay para modificar las animaciones según tus necesidades.
  • Es probable que en las pantallas de dispositivos móviles quieras limitar el número de animaciones que se producen (por ejemplo, eliminar las animaciones de pie de página). Las animaciones de demostración funcionan bien, especialmente en las pantallas donde todos los contenidos de la página son visibles.

Aprende más sobre animación CSS

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.