DevPath · Aprende a programar ESPTEN

CSS moderno, accesibilidad y arquitectura

CSS moderno: clamp(), aspect-ratio, :has() y más

Funciones matemáticas: clamp(), min(), max()

El CSS moderno trae herramientas que antes pedían malabares (o JavaScript). Empezamos por las que más vas a usar.

clamp(min, ideal, max) produce un valor fluido que crece con la pantalla pero nunca baja del mínimo ni supera el máximo. Piensa en un guardia con dos límites. Es la forma moderna de hacer tipografía y espaciados responsive sin llenarlo todo de media queries:

h1 {
  /* nunca menos de 1.5rem, ni más de 3rem; crece con el ancho del viewport */
  font-size: clamp(1.5rem, 4vw, 3rem);
}

Proporciones con aspect-ratio

aspect-ratio fija la relación ancho/alto de una caja sin trucos de padding:

.video {
  width: 100%;
  aspect-ratio: 16 / 9; /* la altura se calcula sola */
}

El selector :has() — el "padre" que faltaba

Durante años pediste a gritos un "selector padre" y la respuesta era siempre la misma: no existe. Pues ya existe, y se llama :has().

:has() selecciona un elemento según su contenido o sus hermanos. Es el primer selector que mira "hacia abajo", algo que parecía imposible:

/* una tarjeta que contiene una imagen recibe otro layout */
.tarjeta:has(img) {
  display: grid;
  grid-template-columns: auto 1fr;
}

/* un label cuyo input es inválido se pinta de rojo */
label:has(+ input:invalid) {
  color: #b91c1c;
}

Container queries: responsive por contenedor

Las media queries miran el viewport; las container queries (@container) reaccionan al tamaño del contenedor padre. Así un mismo componente se adapta esté donde esté:

.panel { container-type: inline-size; }

@container (min-width: 400px) {
  .tarjeta { flex-direction: row; }
}

Nesting nativo

CSS ya permite anidar reglas como en Sass, sin compilar:

.menu {
  background: #fff;

  & a {
    color: var(--color-primario);

    &:hover { text-decoration: underline; }
  }
}

El & representa el selector padre. El nesting acerca el estilo a la estructura del componente y reduce la repetición. Eso sí: no te flipes anidando seis niveles, o volverás a crear el lío que veníamos a evitar.

Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Custom properties: las variables de CSSAccesibilidad y arquitectura del CSS →