CSS 2026: 8 funciones que ya puedes usar sin polyfill (con código y ejemplos)

El CSS de 2026 hace cosas que hace dos años exigían JavaScript, librerías externas o trucos infumables. Y lo mejor: lo hace con soporte cross-browser estable. Aquí tienes las 8 funciones que ya estoy usando en producción sin polyfill, con código copy-paste y un caso de uso real para cada una.

Si arrastras webs construidas hace un par de años, prepárate: muchas líneas de JavaScript van a sobrar. Eso es buena noticia para el rendimiento y para el Core Web Vitals.

Por qué 2026 es el año del CSS moderno

Interop 2026 (la iniciativa cross-vendor entre Apple, Google, Microsoft y Mozilla) cerró soporte estable de las funciones clave en abril. Eso significa que lo que antes funcionaba en Chrome y se rompía en Safari ahora corre idéntico en los cuatro navegadores principales.

El resultado práctico es brutal: en mis proyectos he eliminado más de 600 líneas de overrides media query y unas 300 de JavaScript que tocaba clases padre. CSS se ha vuelto consciente del estado, del contexto y del layout.

1. Container queries: el componente decide su tamaño

Container queries permiten que un componente reaccione al ancho de su contenedor, no al de la ventana. Es la diferencia entre tener un componente reutilizable de verdad y uno que se rompe cuando lo mueves a un sidebar.

.card-container { container-type: inline-size; }
@container (min-width: 400px) { .card { display: grid; grid-template-columns: 120px 1fr; } }

Caso de uso real: una tarjeta de producto que aparece en home (ancho 600px) y en sidebar (ancho 280px). Con container queries se reorganiza sola sin necesidad de dos componentes ni de breakpoints globales.

2. Selector :has(): el «padre selector» por fin nativo

El selector :has() permite estilar un elemento padre en función de los hijos que contiene. Ningún hack, ningún JavaScript. Soporte 100% cross-browser desde principios de 2026.

article:has(img) { padding: 0; }
label:has(input:invalid) { color: var(–error); }

Mi uso favorito: marcar visualmente formularios donde hay un error sin tocar JS, simplemente con form:has(input:invalid) button para desactivar visualmente el submit. Limpio y mantenible.

3. View Transitions API: animaciones nativas entre páginas

View Transitions añade animaciones suaves entre estados de la página (SPA) o entre páginas distintas (MPA). Lo que antes te obligaba a usar Framer Motion o GSAP ahora son tres líneas de CSS.

@view-transition { navigation: auto; }
::view-transition-old(root) { animation: fade-out 0.3s; }
::view-transition-new(root) { animation: fade-in 0.3s; }

Caso de uso real: un blog donde el thumbnail del post se «expande» suavemente al detalle al hacer clic. Sin librerías, sin saltos visuales, sin parpadeo. Mejora directa de CLS.

4. Anchor positioning: tooltips y popovers sin JS

Anchor positioning permite anclar un elemento a otro nativamente. Adiós a las librerías de tooltip y a los cálculos manuales con getBoundingClientRect.

.button { anchor-name: –my-anchor; }
.tooltip { position-anchor: –my-anchor; top: anchor(bottom); left: anchor(center); }

Para menús desplegables, popovers y tooltips, esta función ahorra horas de JavaScript y elimina problemas de scroll-offset y resize que daban dolor de cabeza.

5. Scroll-driven animations: animaciones sincronizadas al scroll

Las animaciones que avanzan con el scroll del usuario ahora se gestionan con propiedades CSS puras. Sin IntersectionObserver, sin scroll listeners que matan el rendimiento, sin GSAP ScrollTrigger.

.hero-title { animation: fadeOut linear; animation-timeline: scroll(); animation-range: 0% 50%; }

Caso de uso real: un título de hero que se desvanece a medida que el usuario baja por la página. Antes eran 40 líneas de JS y un listener; ahora son tres propiedades CSS.

6. Cascade layers: orden de prioridad explícito

Las capas de cascada permiten organizar tu CSS por prioridad sin recurrir a !important ni a guerras de especificidad. Es especialmente útil cuando combinas un framework (Tailwind, Bootstrap) con CSS propio.

@layer reset, base, components, utilities;
@layer components { .btn { padding: 0.5rem 1rem; } }

7. CSS Nesting nativo

El anidamiento que llevabas años haciendo con Sass o PostCSS ya es CSS nativo. Sin preprocesador, sin build step para el caso simple. Funciona idéntico a lo que esperas si vienes de Sass.

.card {
  padding: 1rem;
  &:hover { transform: translateY(-2px); }
  .title { font-size: 1.25rem; }
}

8. color-mix(), oklch() y la nueva paleta del web

color-mix() mezcla dos colores con un porcentaje. oklch() da acceso a espacios de color más amplios y consistentes que hsl() o rgb(). Combinados, generan paletas vivas con un puñado de variables.

–brand: oklch(70% 0.15 220);
–brand-hover: color-mix(in oklch, var(–brand), black 15%);

Con esto generas el hover, el activo y el deshabilitado sin tener que declarar cinco variables. El sistema de diseño se vuelve mantenible con una sola fuente de verdad.

Tabla resumen: qué función adoptar primero

FunciónEsfuerzoImpacto inmediato
Container queriesBajoComponentes reutilizables limpios
:has()Muy bajoElimina JS de toggle de clases
View TransitionsBajoUX premium, mejor CLS
Anchor positioningMedioAdiós a librerías de tooltip
Scroll-driven animationsBajoAnimaciones sin JS
Cascade layersMedioFin de la guerra de especificidad
CSS NestingMuy bajoLectura y mantenimiento
oklch + color-mixMedioSistema de color escalable

Mi orden recomendado para adoptarlas

Si nunca has tocado estas funciones, este es el orden que sigo cuando refactorizo un proyecto. Bajo riesgo, alto retorno.

  1. :has() y CSS Nesting: son la victoria fácil. Empieza por aquí esta misma semana.
  2. Container queries: sustituye un par de componentes problemáticos.
  3. View Transitions: añade transiciones de página en tu landing principal.
  4. Scroll-driven animations: reemplaza un script de scroll listener por CSS puro.
  5. Anchor positioning: migra el primer tooltip o popover que tengas con JS.
  6. Cascade layers + oklch: resérvalo para refactorización seria del sistema de diseño.

Preguntas frecuentes sobre CSS 2026

¿Qué es Interop 2026?

Es la iniciativa anual entre Apple, Google, Microsoft y Mozilla para asegurar que un grupo seleccionado de funciones CSS y HTML funcione idéntico en Safari, Chrome, Edge y Firefox antes de fin de año. En 2026 el foco ha sido animaciones, layout y compatibilidad cross-document.

¿Tengo que usar polyfills todavía?

Para las 8 funciones de este post, no. Todas tienen soporte estable cross-browser desde abril de 2026 con uso seguro en producción. Solo si tu base de usuarios incluye un porcentaje alto de navegadores antiguos conviene aplicar progressive enhancement.

¿Container queries reemplazan a las media queries?

No, las complementan. Las media queries siguen siendo útiles para layout global; las container queries son la opción correcta cuando un componente se reutiliza en contextos de ancho variable y necesita adaptarse al contenedor padre.

¿Funciona View Transitions API en SPAs y MPAs?

Sí. Las same-document transitions (dentro de la misma página) están en baseline desde 2025 y las cross-document transitions (entre páginas distintas) llegaron a soporte cross-browser en 2026. Ya puedes animar el salto entre URLs sin SPA.

¿:has() rompe el rendimiento?

No con el uso normal. Los navegadores han optimizado el selector y solo se nota impacto en árboles DOM muy grandes con selectores anidados profundamente. Para una landing o un blog medio, su coste es despreciable.

¿Qué proyecto pequeño me sirve para practicar?

Una landing personal con tarjetas en grid, un menú desplegable y una transición entre páginas cubre 5 de las 8 funciones del post. Una tarde de práctica es suficiente para interiorizarlas.

¿Estas funciones afectan al SEO?

Indirectamente sí. View Transitions mejora Core Web Vitals (sobre todo CLS) y un CSS más limpio sin JavaScript innecesario reduce LCP y TBT. Páginas más rápidas rankean mejor, así de simple.

¿Qué pasa con navegadores antiguos?

Aplica progressive enhancement: la web funciona sin estas funciones, simplemente sin las animaciones o ajustes finos. Ningún usuario verá errores, solo la versión base sin los floritos.

Tienes tres caminos según tu nivel

Si estás empezando: domina :has() y CSS Nesting esta semana. Son las dos funciones de mayor retorno con menos curva.

Si ya tienes nivel medio: sustituye un componente problemático por uno con container queries y añade View Transitions a tu blog. Notable mejora de UX.

Si vives del frontend: refactor de tu sistema de diseño con oklch, cascade layers y anchor positioning. Te ahorrará deuda técnica durante años.

¿Has migrado algún proyecto a CSS 2026? Cuéntame cuál fue tu mayor sorpresa en los comentarios. Disfrútalas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio