Doplax.Dev
  • Inicio
  • Conóceme
  • Blog
  • Experiencia
  • Contacto
  • Inicio
  • Conóceme
  • Blog
  • Experiencia
  • Contacto

¿Tienes un proyecto en mente o quieres saludar?

Contáctame

© 2026 Doplax.Dev — Todos los derechos reservados.

June 9, 2023

Loading Skeleton: Que son y porque deberías usarlos

  • Tutorial

Vivimos en la época de la inmediatez, queremos tenerlo todo aquí, ahora y ya, si es posible. Y, por supuesto, esto se refleja directamente en nuestra forma de relacionarnos con las aplicaciones.

Los usuarios odiamos esperar, eso es algo que todos sabemos. ¿Cuántas veces te has salido de una página cuando tardaba demasiado en cargar?


De hecho, un estudio realizado por Google nos da una idea aproximada del tiempo que un usuario está dispuesto a esperar en una pantalla de carga:

Untitled.png

Como podemos ver, ¡el 32% de los usuarios abandona la página cuando la web tarda entre 1 y 3 segundos!

Así que aquí es donde nosotros, los desarrolladores, entramos en juego.

Hay cosas que no podemos cambiar, como el tiempo que tarda nuestra página en hacer fetch a la API que nos proporciona la información que se cargará en la web. Pero hay técnicas que podemos utilizar para agilizar los tiempos de carga o, en su defecto, hacer más ameno el tiempo de carga.

Aquí es donde aparecen los Loading Skeletons (Esqueletos de carga). Probablemente hayas visto esto en muchos sitios, pero es posible que nunca les hayas prestado atención.


Ejemplo

Untitled.png

Youtube

Untitled.png

Si te fijas, hay elementos grises que simulan el contenido que debería aparecer cuando la página carga.

A estos elementos se les llama Skeleton Loader, y se utilizan para mostrar contenido en la página mientras los datos se cargan, evitando así tener una página en blanco mientras se cargan los datos. Esto brinda una sensación de tranquilidad al usuario, indicándole que el contenido está casi terminado de cargar.


Como se implementa?

Para ello, vamos a utilizar como ejemplo una aplicación que estoy construyendo. Es una web que se conecta a la API de IMDB para cargar las portadas de películas, como si se tratara de una web de streaming como Netflix o HBO.



Veamos un ejemplo de cada caso:

Untitled.png

Como podemos ver, al usar los Skeletons, la espera se vuelve más amena, no solo porque la web no se ve vacía, sino también porque con los efectos de movimiento con CSS, el usuario entiende que la información está cargando y que la página no se ha quedado "pillada”

Pasando a la acción

Para hacer esto, implementaremos la siguiente lógica:


Halconearemos los skeletons en los contenedores donde cargaremos la información, como las portadas de las películas.

<article class="trendingPreview-movieList">
      <div class="movie-container movie-container--loading "></div>
      <div class="movie-container movie-container--loading "></div>
      <div class="movie-container movie-container--loading "></div>
      <!--<div class="movie-container">
        <img
          src="https://image.tmdb.org/t/p/w300/adOzdWS35KAo21r9R4BuFCkLer6.jpg"
          class="movie-img"
          alt="Nombre de la película"
        />
      </div>

      <div class="movie-container">
        <img
          src="https://image.tmdb.org/t/p/w300/adOzdWS35KAo21r9R4BuFCkLer6.jpg"
          class="movie-img"
          alt="Nombre de la película"
        />
      </div>-->
    </article>

Les aplicaremos una clase con una animación CSS para que los skeletons se muevan, dando así un efecto un poco más dinámico.

.movie-container--loading { 
  background: var(--grey);
  border-radius: 8px; 
  height: 225px; 
  min-height: 225px; 
  max-height: 225px;
  width: 15px; 
  min-width: 150px; 
  max-width: 150px; 
  margin-bottom: 15px; 
  animation: loading-skeleton infinite 1.5s 
}

/* Animation */
@keyframes loading-skeleton {
  0%, 100% {
    opacity: 100%;
  }
  50% {
    opacity: 0%;
  }
}

Cuando cargue el contenido, sobrescribiremos los skeletons con la información que realmente queremos mostrar, es decir, las portadas de las películas en este caso.


function createMovies(movies, container) {
    container.innerHTML = ''  // <-- Borraremos el contenido del contenedor que enviemos como parámetro

    movies.forEach(movie => {
        const movieContainer = document.createElement('div');
        movieContainer.classList.add('movie-container')
        movieContainer.addEventListener("click",() => {
            location.hash = "#movie=" + movie.id 
        })

        const movieImg = document.createElement('img')
        movieImg.classList.add('movie-img')
        movieImg.alt = movie.title
        movieImg.src = 'https://image.tmdb.org/t/p/w300' + movie.poster_path

        movieContainer.appendChild(movieImg);
        container.appendChild(movieContainer);
    });
}




AnteriorCómo importar archivos CSS en Next.js: Guía completa para principiantesSiguienteEntendiendo los Namespaces en JavaScript Nativo: Organizando tus Eventos

Posts relacionados

  • Como instalar OhmyPoshTutorial
  • Cómo Activar el Portapapeles Compartido en una Máquina Virtual con UbuntuTutorial
  • Como crear un proyecto de C en Visual StudioTutorial · C
  • Como utilizar ReactPyTutorial · Python · React

Escrito por Pol Valle

Escrito por Pol Valle

Me interesa especialmente desarrollar aplicaciones que no solo sean funcionales, sino también atractivas y fáciles de usar. Lo consigo aplicando principios SOLID, arquitectura limpia y testing para garantizar la calidad.