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ón | Esfuerzo | Impacto inmediato |
|---|---|---|
| Container queries | Bajo | Componentes reutilizables limpios |
| :has() | Muy bajo | Elimina JS de toggle de clases |
| View Transitions | Bajo | UX premium, mejor CLS |
| Anchor positioning | Medio | Adiós a librerÃas de tooltip |
| Scroll-driven animations | Bajo | Animaciones sin JS |
| Cascade layers | Medio | Fin de la guerra de especificidad |
| CSS Nesting | Muy bajo | Lectura y mantenimiento |
| oklch + color-mix | Medio | Sistema 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.
- :has() y CSS Nesting: son la victoria fácil. Empieza por aquà esta misma semana.
- Container queries: sustituye un par de componentes problemáticos.
- View Transitions: añade transiciones de página en tu landing principal.
- Scroll-driven animations: reemplaza un script de scroll listener por CSS puro.
- Anchor positioning: migra el primer tooltip o popover que tengas con JS.
- 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.


