WhatsApp

  

Entendiendo las unidades de viewport en CSS: vw, vh, vmin y vmax

Guía completa sobre las unidades de viewport (vw, vh, vmin, vmax) en CSS, con ejemplos prácticos, comparativas, buenas prácticas y trucos de rendimiento.

Entendiendo las unidades de viewport en CSS: vw, vh, vmin y vmax

¿Qué son las unidades de viewport?

Las viewport units son unidades relativas al tamaño del área visible del navegador (el viewport). A diferencia de px, em o rem, se adaptan automáticamente cuando el usuario cambia el tamaño de la ventana, la orientación del dispositivo o la densidad de píxeles.

  • 1vw = 1 % del ancho del viewport.
  • 1vh = 1 % de la altura del viewport.
  • 1vmin = 1 % del menor entre ancho y altura del viewport.
  • 1vmax = 1 % del mayor entre ancho y altura del viewport.

Uso práctico de cada unidad

vw – Ancho del viewport

Ideal para tipografía fluida, márgenes horizontales y componentes que deben escalar con el ancho de la pantalla.

h1 {
  font-size: 5vw; /* 5 % del ancho del viewport */
  margin-left: 2vw;
}

vh – Altura del viewport

Se usa para hero sections, modales a pantalla completa o cualquier elemento que dependa de la altura visible.

.hero {
  height: 100vh; /* ocupa todo el alto de la ventana */
  background: linear-gradient(to bottom, #1e90ff, #fff);
}

vmin – El menor entre ancho y alto

Perfecto para crear elementos cuadrados que siempre mantengan la proporción, sin importar la orientación.

.square {
  width: 30vmin;
  height: 30vmin;
  background: #ff6f61;
}

vmax – El mayor entre ancho y alto

Útil para tipografía grande en pantallas ultra‑anchas o para efectos que deben llenar el eje dominante.

.big-text {
  font-size: 8vmax;
  text-align: center;
}

Comparativa visual (dos columnas)

Ventajas

  • Responsive por naturaleza, sin media queries.
  • Facilitan diseños fluidos y tipografía adaptable.
  • Menor dependencia de breakpoints.

Desventajas / Consideraciones

  • Problemas de overflow en navegadores móviles antiguos.
  • El vh puede incluir la barra de direcciones en móviles, generando tamaños inesperados.
  • Necesario combinar con min‑max() o clamp() para evitar textos demasiado pequeños o gigantes.

Mejores prácticas y trucos avanzados

  • Combinar con clamp(): font-size: clamp(1rem, 2.5vw, 2rem); garantiza un rango aceptable.
  • Fallback para navegadores sin soporte: declarar una unidad px antes de la regla vw/vh.
    h2 { font-size: 24px; font-size: 5vw; }
  • Uso en calc(): mezclar unidades para diseños híbridos.
    .sidebar { width: calc(20vw + 200px); }
  • Accesibilidad: evitar que el texto sea menor de 12 px en dispositivos con alto zoom, usando min‑font‑size o clamp().

Depuración y troubleshooting

Al trabajar con vh en móviles, la barra de direcciones del navegador puede causar que el valor cambie al hacer scroll. Solución:

/* iOS Safari */
html, body { height: 100%; }
section.fullscreen { min-height: -webkit-fill-available; }

En navegadores antiguos (IE 11, Android 4.x) las unidades vmin/vmax pueden no estar soportadas. Se recomienda usar polyfills como viewport-units-buggyfill.

Rendimiento y escalabilidad

Las unidades de viewport son procesadas por el motor de renderizado sin coste adicional significativo. Sin embargo, combinarlas con animaciones transform o opacity garantiza una composición GPU‑friendly.

.slide-in {
  transform: translateY(100vh);
  transition: transform 0.4s ease-out;
}

Para grandes aplicaciones SPA, reutiliza variables CSS para centralizar los valores:

:root {
  --vh: 1vh; /* se actualiza vía JS en dispositivos móviles */
}
.full-height { height: calc(var(--vh) * 100); }

Compatibilidad

NavegadorSoporte vw/vhSoporte vmin/vmax
Chrome (desde 29)
Firefox (desde 19)
Safari (desde 9)
Edge (Chromium)
IE 11✖ (solo vw/vh)
Android WebView (4.4)

Para garantizar una experiencia homogénea, siempre provee fallback en px y verifica con @supports (width: 1vw).

Ejemplo completo: Landing page responsive con solo viewport units

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Demo Viewport Units</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
  <style>
    :root { --vh: 1vh; }
    @media (orientation: portrait) { :root { --vh: 1vh; } }
    .hero { height: calc(var(--vh) * 100); background: #1e90ff; color: #fff; display:flex; align-items:center; justify-content:center; }
    h1 { font-size: clamp(2rem, 10vw, 5rem); }
    .features { padding: 5vmin 0; }
    .feature { width: 30vmin; height: 30vmin; background:#ff6f61; margin:auto; display:flex; align-items:center; justify-content:center; font-size:2vmin; color:#fff; border-radius:0.5rem; }
  </style>
</head>
<body>
  <section class="hero">    <h1>¡Bienvenido!</h1>  </section>
  <section class="features container text-center">
    <div class="row g-4">
      <div class="col-md-4"><div class="feature">UX</div></div>
      <div class="col-md-4"><div class="feature">Performance</div></div>
      <div class="col-md-4"><div class="feature">Accessibility</div></div>
    </div>
  </section>
</body>
</html>

Este código muestra cómo usar vh para la altura del hero, vmin para los bloques cuadrados y clamp() para tipografía adaptable, sin necesidad de breakpoints.



Entendiendo las unidades de viewport en CSS: vw, vh, vmin y vmax
ASIMOV Ingeniería S. de R.L. de C.V., Emiliano Nava 15 noviembre, 2025
Compartir
Iniciar sesión dejar un comentario

  
Algoritmo de Kruskal: Teoría, Implementación en Python y Casos Prácticos
Descubre en detalle el algoritmo de Kruskal para obtener árboles de expansión mínima, su complejidad, comparativas con Prim, ejemplos completos en Python y buenas prácticas de rendimiento.