Regresar

lectura estimada

Publicado en: 24 jul 2025

UI

Cambiar idioma:

Previniendo el desafase de UI en la Web

Una de las cosas que más odio en la web es el desfase de UI: ese movimiento molesto cuando el contenido salta inesperadamente, a menudo debido a imágenes que cargan tarde o contenido dinámico que se inyecta en el layout. Esto interrumpe el flow, afecta la percepción de rendimiento e incluso puede hacer que los usuarios hagan clic en el lugar equivocado.

Aunque esto sucede principalmente en aplicaciones web escritas con frameworks complejos de Javascript, también puede ocurrir en un sitio web simple hecho solo con HTML y CSS (si es que todavía existen).

En este post, exploraremos qué causa los desfases de layout, cómo prevenirlos con CSS puro y Tailwind CSS, y algunos consejos para mejorar la estabilidad de tu interfaz.


¿Qué causa el desfase de UI?

Las causas más comunes detrás de los saltos de layout incluyen:

  • Imágenes sin dimensiones: el navegador no sabe cuánto espacio reservar antes de que carguen.
  • Fuentes web: al intercambiar fuentes, el tamaño del texto puede cambiar.
  • Inyección de contenido asíncrono: actualizaciones del DOM o elementos cargados de forma diferida sin espacio reservado.
  • Widgets/ads de terceros: scripts externos que insertan elementos tarde en el ciclo de renderizado.

¿Cómo prevenir el desfase de UI? (Tips de CSS)

1. Reserva espacio para las imágenes

Especifica el “width” y “height” de las imágenes para que el navegador pueda asignar el espacio correcto.

img {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9; /* fallback if no explicit height */
}

O usa dimensiones estaticas cuando sea aplicable:

<img src="hero.webp" width="1200" height="600" alt="Hero image">

2. Usa contenedores que conserver un aspecto especifico como padres

Cuando los dimensiones son dinamicas, usar contenedores con cierto aspect ratio puede ayudar:

    .aspect-box {
        aspect-ratio: 16 / 9;
    }

3. Optimización de carga de fuentes

Previene el “flash de texto sin estilo” (FOUT) o saltos de layout así:

  1. Usa font-display: swap en tu regla @font-face.

  2. Precarga las fuentes con:

<link rel="preload" href="/fonts/custom.woff2" as="font" type="font/woff2" crossorigin>

Prevenir el desfase de UI con Tailwind CSS

Me encanta Tailwind , la mayoría de las cosas que hago usan Tailwind . De hecho, este sitio está hecho con Tailwind . Tailwind es vida. Así que veamos cómo podemos aplicar todo eso con Tailwind Tailwind .

1. Usa tamaños fijos o relaciones de aspecto

<!-- Fixed image container -->
<div class="w-full h-64 bg-gray-200">
  <img src="/image.jpg" class="w-full h-full object-cover" alt="Example">
</div>

2. Skeleton Loaders o Elementos Placeholder

Usa placeholders para evitar saltos bruscos de contenido:

<div class="w-full h-32 bg-gray-100 animate-pulse rounded"></div>

En el caso de este sitio, estoy usando skeleton loaders, elementos placeholder, así como estilos de tamaño fijo en los contenedores de las imágenes:


<!-- Esta es una file de Astro btw -->
<div
    class={`object-contain md:object-cover overflow-hidden  w-auto ${props.footer ? "md:rounded-t-xl" : "md:rounded-xl"}`}>
    <img
        class="aspect-auto md:rounded-t-xl"
            src={props.img_url}
            alt={props.alt}
    />
    <div
        class="absolute flex justify-center items-center w-full h-full top-0 left-0 -z-10 animate-pulse bg-dark/50 rounded-xl"
        >
        <i class="far fa-spinner text-light font-bold text-3xl animate-spin"></i>
     </div>
</div>

Esto reserva el espacio para un icono, e indica que el contenido está cargando.

Si inspeccionas elemento, verás que hay un spinner detrás de cada Img tag en cada post, haz lo que quieras con ese conocimiento maldito.

Conclusión

Layout estables hacen una excelente experiencia para el usuario, no seas flojo, ¡previene el desfase de UI!