Tema 8 · Unidades y Matemáticas

Unidades Relativas, Absolutas y clamp()

Aprende a elegir entre píxeles fijos (px), unidades relativas a fuentes (rem, em), porcentajes (%), viewport (vw, vh) y funciones matemáticas modernas como calc() y clamp().

Unidades Absolutas frente a Relativas

Elegir la unidad de medida correcta es indispensable para crear interfaces accesibles que respeten las preferencias del usuario y se adapten a diferentes densidades de pantalla.

Unidad Tipo Referencia de Cálculo Cuándo Utilizarla
px Absoluta 1 píxel de pantalla de referencia. Bordes delgados (1px, 2px), sombras sutiles y detalles fijos pequeños.
rem Relativa Relativo al font-size de la raíz (<html>, por defecto 16px). El estándar para tipografía, paddings y márgenes. Respeta el zoom y accesibilidad del navegador.
em Relativa Relativo al font-size del propio elemento o de su padre inmediato. Iconos o badges que deben escalar proporcionalmente con el texto que los acompaña.
% Relativa Porcentaje del tamaño del elemento contenedor padre. Anchuras de columnas y divisiones de rejilla.
vw / vh Viewport 1% del ancho (vw) o del alto (vh) de la ventana del navegador. Secciones hero a pantalla completa (height: 100vh).

Funciones Matemáticas en CSS: calc() y clamp()

CSS moderno incluye motores matemáticos nativos que evitan el uso de JavaScript para cálculos de diseño:

  • calc(): Permite mezclar unidades heterogéneas. Ej: width: calc(100% - 40px);. (Obligatorio dejar un espacio antes y después de los operadores + y -).
  • min() y max(): Eligen dinámicamente el valor menor o mayor entre varios candidatos.
  • clamp(mínimo, preferido, máximo): La técnica definitiva para tipografía fluida. La fuente crece con la pantalla entre dos límites infranqueables:
/* La fuente nunca será menor a 1.25rem ni mayor a 2.5rem; entre medias escala al 4vw */
h1 {
  font-size: clamp(1.25rem, 4vw, 2.5rem);
}

⚡ Tipografía Fluida con clamp() y Ancho Mixto con calc()

Observa cómo el título escala suavemente entre el móvil y la pantalla grande gracias a clamp(), y la barra lateral usa calc() para dejar espacio exacto:

index.html
Solo lectura
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Unidades CSS3 y clamp()</title>
  <style>
    body {
      font-family: Arial, Helvetica, sans-serif;
      background-color: #f8fafc;
      margin: 0;
      padding: 24px;
      color: #0f172a;
    }

    /* Tipografía fluida con clamp() */
    .titulo-fluido {
      font-size: clamp(1.4rem, 3.5vw, 2.4rem);
      font-weight: 800;
      color: #1e40af;
      margin-top: 0;
      margin-bottom: 12px;
      line-height: 1.2;
    }

    /* Caja con ancho calculado calc() */
    .caja-calculada {
      width: calc(100% - 32px); /* Ancho total menos 32px de margen lateral */
      max-width: 650px;
      background: #ffffff;
      border: 1px solid #cbd5e1;
      border-radius: 12px;
      padding: 1.5rem; /* Usando rems escalables */
      margin-bottom: 20px;
      box-shadow: 0 4px 6px -1px rgba(0,0,0,0.06);
    }

    .badge-em {
      font-size: 0.85em; /* Escala con la fuente del elemento */
      background-color: #fef3c7;
      color: #92400e;
      padding: 0.25em 0.6em;
      border-radius: 4px;
      font-weight: bold;
      vertical-align: middle;
    }

    .medidor-vw {
      background: linear-gradient(90deg, #3b82f6, #06b6d4);
      color: white;
      padding: 10px 16px;
      border-radius: 8px;
      font-size: 0.9rem;
      font-weight: 600;
    }
  </style>
</head>
<body>

  <div class="caja-calculada">
    <h1 class="titulo-fluido">Tipografía Fluida Inteligente</h1>
    <p style="font-size: 1rem; line-height: 1.6; color: #475569;">
      Este título usa <code>clamp(1.4rem, 3.5vw, 2.4rem)</code>. En pantallas pequeñas se mantiene legible a 1.4rem y en pantallas panorámicas nunca sobrepasa 2.4rem.
    </p>

    <p>
      Insignia con unidades relativas em: 
      <span class="badge-em">Unidad 0.85em</span>
    </p>

    <div class="medidor-vw">
      Contenedor con calc(100% - 32px) y paddings en rem
    </div>
  </div>

</body>
</html>
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de CSS3, Flexbox y Grid y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.