16 puntos por GN⁺ 2025-09-30 | 3 comentarios | Compartir por WhatsApp
  • Una lista, desde una perspectiva práctica, de funciones de CSS/HTML agregadas recientemente o con soporte ampliado este año, que abarca desde transiciones de UI, formularios y tipografía hasta CSS funcional
  • Las novedades clave incluyen transiciones de tamaño hacia palabras clave como auto, HTML popover/invoker y CSS @function·if(); muchas tienen soporte prioritario en Chrome, por lo que se necesita una estrategia de mejora progresiva
  • Entradas con expansión automática mediante field-sizing, Select personalizado, text-wrap: balance/pretty, easing linear() y rutas shape() permiten elevar fácilmente la calidad visual y de usabilidad
  • Están aumentando herramientas de control de valores y flujo como attr() mejorado, control del orden de lectura con reading-flow y calc-size(), ampliando el rango de diseño que puede resolverse solo con CSS
  • Conviene seguir de cerca Masonry, random(), margin-trim y las ampliaciones de View Transitions, que aún están en proceso de estandarización y soporte, mientras que Container Queries, :has(), dvh, etc. ya se consolidaron como base del trabajo diario

Animate to Auto

  • Función que permite transiciones suaves entre un valor fijo ↔︎ auto en elementos con una altura de contenido variable
    • Si declaras interpolate-size: allow-keywords globalmente, se permiten transiciones como height: 0 → auto
    • O bien, sin interpolate-size, puedes usar calc-size() para hacer la transición con height: calc-size(auto, size)
  • La ventaja es que elimina alternativas frágiles como el truco de max-height o la medición fuera de pantalla + animación con JS, manteniendo el layout original
  • El estado de soporte hoy está centrado en Chrome; como la animación es algo deseable pero no esencial, PE (Progressive Enhancement) encaja bien

Popovers & Invokers

  • El atributo popover es una función de HTML que otorga a cualquier elemento comportamiento de abrir/cerrar y la API de JS correspondiente; pertenece a la categoría de overlay ligero distinto de un modal
    • Con el atributo Invoker se puede lograr control declarativo sin JS
  • Su importancia está en que ofrece accesibilidad, teclado y manejo de foco de forma predeterminada a nivel HTML, reduciendo el riesgo de omisiones en la implementación
  • En cuanto al soporte, Popover es amplio, Invoker va primero en Chrome y existen diferencias en funciones puntuales como popover="hint"
    • Hay polyfill, así que puede adoptarse incluso en UX esenciales

@function

  • Introduce funciones definidas por el usuario en el sistema de funciones de valores de CSS; con una forma como @function --foo(--x) { result: ... } se puede abstraer lógica común
  • Ofrece mejoras en legibilidad y mantenimiento al eliminar duplicación (DRY) y simplificar declaraciones
  • El soporte va primero en Chrome; si es razonable, puedes usar fallback elegante con property: fallback y en la siguiente línea property: --func()
    • Ojo: no es compatible con funciones de Sass

if()

  • La primera función de bifurcación a nivel de valor en CSS; permite listar condiciones media(), supports() y style() como si fuera un switch para devolver el primer valor coincidente
    • Ejemplo: describir grid-template-columns según breakpoints en una sola declaración
  • Su efecto es mejorar la legibilidad y eliminar repeticiones, y además combina bien con @function personalizado
  • El soporte va primero en Chrome, por lo que se recomienda declarar primero un valor de fallback y aplicar el patrón de PE

field-sizing

  • Presenta la propiedad field-sizing, que hace que los elementos de entrada/edición crezcan automáticamente según su contenido
    • El caso más representativo es la expansión automática en altura de <textarea>, aunque también puede aplicarse a UX de redimensionado inline inmediato
  • El soporte está en Chrome y Safari lo incorporará próximamente; si hace falta, puede sustituirse con JS ligero
    • Como es una mejora de UX y no una función esencial, es adecuada para adopción progresiva

Custom Selects

  • Permite, tras un opt-in explícito, no solo estilizar la apariencia de select, sino personalizar por completo la propia UI del selector abierto
  • Tiene una PE excelente: en entornos sin soporte hace fallback de forma segura al <select> nativo
  • El soporte va primero en Chrome y el área de control puede ampliarse con appearance: base-select y ::picker(select)

text-wrap

  • text-wrap: balance equilibra la longitud de líneas en textos grandes como títulos, y text-wrap: pretty mejora líneas huérfanas y estética también en texto corrido
  • Su efecto es mejorar la legibilidad y la calidad tipográfica, con beneficios que se perciben de inmediato sin costo extra
  • En soporte, balance es amplio, mientras que pretty va antes en Chrome y Safari; es ideal para PE

linear() easing

  • A diferencia de la palabra clave linear, la función linear() define curvas de easing precisas con cualquier cantidad de puntos, lo que favorece comportamientos complejos como rebotes
  • Mientras que cubic-bezier() tiene limitaciones, linear() ofrece control fino del timing y ya tiene soporte completo
  • Si hace falta, puede hacerse fallback con easing con nombre o cubic-bezier()

shape()

  • La función shape() complementa a path(), cuyo uso estaba limitado a píxeles y una sintaxis compleja, permitiendo describir rutas arbitrarias con unidades responsivas y propiedades personalizadas
  • Con clip-path se pueden crear máscaras de forma arbitraria, y con offset-path lograr posicionamiento/animación sobre una ruta; más adelante se prevé su combinación con shape-outside
  • El soporte está en Chrome y Safari, Firefox lo lleva bajo flag, y en desarrollo real se recomienda diseñar fallbacks cuidados

More Powerful attr()

  • attr() ahora admite tipado, por lo que puede leer directamente desde atributos HTML valores no textuales como números o colores y usarlos como valores CSS
  • Su significado está en ampliar patrones para inyectar desde el marcado cosas como colores de tema, contadores o tamaños
  • El soporte va primero en Chrome, y se recomienda introducirlo progresivamente empezando por refuerzos visuales más que por dependencias del layout crítico

Reading Flow

  • Se introduce la propiedad reading-flow, que corrige lógicamente el orden de tabulación incluso en layouts donde el orden visual y el orden del código no coinciden
    • Al reorganizar grids, puedes indicar un flujo de foco acorde al tipo de layout con algo como reading-flow: grid-rows
  • Reduce riesgos de accesibilidad con una sola línea de CSS, dando mayor libertad de layout
  • Como el soporte va primero en Chrome, se recomienda evitar reordenamientos excesivos hasta que haya soporte más general

Stuff to Keep an Eye On

  • El layout Masonry sigue en ajuste de especificación, y la propuesta item-flow podría ampliar las posibilidades de distribución más allá del grid
  • La función random() ya está disponible en Safari y resulta útil para diseños con variaciones expresivas
  • margin-trim es útil pero sigue centrado en Safari, mientras que sibling-index()/count() está en Chrome y viene bien para animaciones escalonadas
  • Existen señales positivas para compatibilidad cruzada, como view-transition-name: match-element; en View Transitions y el desarrollo en Firefox
  • La racionalización de multiplicación/división en calc() con mezcla de unidades está cerca de superar la fase experimental, lo que podría reducir la necesidad de antiguos hacks de conversión de tipos
  • También se plantea el problema de no contar con un nombre de versión como “CSS4” y se presenta una lista de referencia con novedades de los últimos 5 años

Great Stuff to Remember

  • Container Queries y sus unidades siguen siendo una mejora de productividad enorme desde las media queries y mantienen su lugar como base esencial
  • :has() permite selección basada en padre y estado, ofreciendo un uso muy amplio para resolver selectores combinados complejos solo con CSS
  • View Transitions, Anchor Positioning y Scroll-Driven Animations ya llegaron a Safari, bajando la barrera para adopción en trabajo real
  • Las unidades de viewport adicionales como dvh ya forman parte de Baseline, mejorando la estabilidad del viewport en móviles

Puntos destacados de código/uso

  • Transición de tamaño: interpolate-size: allow-keywords global, o durante un cambio de estado height: calc-size(auto, size) para animar la altura según el contenido
  • Bifurcación de grid: con el patrón if(media(...): valor; ... else: valor;) puedes concentrar las columnas de plantilla por breakpoint en una sola declaración
  • Custom Select: select, ::picker(select) { appearance: base-select } activa un picker definido por el usuario
  • Easing con rebote: animation-timing-function: linear( ... múltiples puntos ... ) permite una curva detallada de rebote/amortiguación
  • Ruta de recorte: clip-path: shape( ... ) sirve para crear una máscara con forma responsiva basada en proporciones

Guía de aplicación práctica

  • En elementos con gran variación de soporte entre navegadores, conviene introducirlos según fallback primero y según la relación entre costo de entrada y beneficio
    • Animación, tipografía y efectos visuales son buenos candidatos para PE, mientras que elementos críticos de accesibilidad como foco/orden de tabulación conviene adoptarlos tras lograr soporte amplio
  • Las funciones propias y bifurcaciones maximizan su ROI cuando se convierten en patrones compartidos del equipo mediante documentación de reglas de diseño y su combinación con tokens y propiedades personalizadas
  • Las mejoras de UX en formularios (field-sizing, Custom Select) tienen un beneficio especialmente perceptible en escenarios mobile-first

Conclusión

  • El CSS moderno en su edición 2025 amplía funciones de valor, bifurcación lógica y control de formas, haciendo de este un año en el que “se puede hacer más con CSS”, con gran valor para una adopción gradual junto con una estrategia de PE
  • Una hoja de ruta realista consiste en apoyarse en lo básico (Container Queries, :has(), unidades de viewport) y priorizar elementos de alta eficiencia como animate-to-auto, if() y shape()

3 comentarios

 
shakespeares 2025-10-06

CSS ya casi se ha vuelto un lenguaje. Ahora permite implementaciones lógicas hasta cierto punto... Ya hasta me pregunto si de verdad sigue siendo una hoja de estilos.

 
chl11wq12 2025-10-01

Parece que va a haber un montón de funciones buenísimas, cosas que hasta ahora había que implementar con JavaScript.

 
addons 2025-09-30

El CSS realmente ha mejorado muchísimo.