Debugging, @supports y compatibilidad en CSS | Nicolás Garzón
Inicio Wiki CSS Debugging, @supports y compatibilidad Volver a CSSCSS
Debugging, @supports y compatibilidad Métodos para depurar cascada, layout y rendering, aplicar feature queries con @supports y gestionar compatibilidad mediante progressive enhancement.
Última actualización Actualizada 24 de jul de 2026
Depurar CSS consiste en seguir el proceso real: coincidencia del selector, cascada, valor calculado, sizing, layout, paint y entorno.
Nota anteriorRendimiento, containment y content-visibility Nota siguiente Modelo mental completo de CSS Texto
Copiar ¿la regla coincide?
↓
¿la declaración es válida?
↓
¿gana la cascada?
↓
¿el valor se resuelve como esperas?
↓
¿el algoritmo de layout permite el resultado?
DOM final.
Classes y atributos reales.
Pseudo-clases forzadas.
Pseudo-elementos.
Styles matched.
Box model.
Layout overlays.
Accessibility tree.
El source del componente puede no coincidir con el DOM producido por el framework.
Una declaration puede perder por:
Propiedad posterior.
Specificity.
Layer.
Important.
Shorthand.
Style inline.
Animation o transition.
La regla tachada sí coincide; simplemente no gana.
Selector no coincide.
Media/container query inactiva.
Stylesheet no cargó.
Regla fue eliminada en build.
Selector o bloque quedó inválido.
Scope no incluye el elemento.
La pestaña computed muestra el valor calculado y permite rastrear su origen.
Puede aparecer todavía como porcentaje o resolverse según la herramienta y etapa. Compara también la geometría final.
Activa overlays de Grid, Flexbox, scroll containers y container queries. Permiten ver:
Tracks y líneas.
Gaps.
Item sizes.
Contenedores elegibles.
Scroll snap points.
Markup mínimo.
Regla sospechosa.
Contenido representativo.
Sin framework cuando sea posible.
Después añade restricciones hasta reproducir el fallo.
Un caso mínimo distingue bug del navegador, regla de CSS y comportamiento del framework.
CSS
Copiar * {
outline : 1px solid rgb ( 255 0 0 / 0.15) ;
} Útil localmente para cajas. No lo dejes en producción ni confundas outline con dimensiones reales.
CSS
Copiar .debug {
background : rgb ( 255 0 0 / 0.08) ;
} Busca el elemento que supera el viewport:
JavaScript
Copiar [ ... document. querySelectorAll ( '*' ) ] . filter (
element => element. getBoundingClientRect ( ) . right > document. documentElement. clientWidth
) ;
Min-content.
Width fija.
Transform.
Long strings.
Negative margin.
Absolute positioning.
100vw con scrollbar.
No resuelvas todo con overflow-x: hidden.
CSS
Copiar .card-list {
display : flex;
flex-wrap : wrap;
}
@supports ( display : grid) {
.card-list {
display : grid;
}
} Feature queries comprueban si el navegador acepta una declaración, no si la implementación carece de bugs o cubre todo el caso.
CSS
Copiar @supports selector ( :has(*) ) {
.field:has(:invalid) { ... }
} CSS
Copiar @supports
( display : grid) and
( container-type : inline-size) {
} También existen or y not. Usa paréntesis claros.
CSS
Copiar .card {
background : #6b46c1;
}
@supports ( background : oklch ( 50% 0.2 280) ) {
.card {
background : oklch ( 55% 0.2 285) ;
}
} El fallback debe ser funcional, no una versión rota que solo sirve para navegadores antiguos ignorados.
En muchos casos basta declarar lo antiguo antes:
CSS
Copiar color : rgb ( 105 70 193) ;
color : oklch ( 55% 0.2 295) ; Utiliza @supports cuando necesitas cambiar un conjunto de reglas o evitar una interpretación parcial.
Baseline ayuda a saber cuándo una feature está disponible de forma interoperable en navegadores principales.
Qué versiones usa tu audiencia.
Webviews antiguas.
Navegadores empresariales bloqueados.
Bugs de implementación.
Necesidades de accessibility tooling.
Combínalo con analytics, browserslist y pruebas.
Una configuración puede expresar el público objetivo para herramientas:
Texto
Copiar > 0.5%
last 2 versions
not deadNo copies una query sin conocer producto, países, dispositivos y políticas corporativas.
Añade prefijos necesarios según Browserslist. No polyfillea algoritmos de layout ni convierte una feature nueva en otra antigua.
No se vuelve compatible con cualquier navegador únicamente por prefijos.
Un transformador puede convertir sintaxis, pero debe preservar comportamiento.
Syntax transform.
Prefixing.
Runtime polyfill.
Fallback manual.
No toda feature puede transformarse de manera equivalente.
Herramientas pueden detectar:
Propiedades desconocidas.
Duplicados.
Orden inconsistente.
Specificity excesiva.
Invalid media queries.
Valores obsoletos.
Stylelint y reglas propias complementan revisión; no comprueban automáticamente el layout final.
Capturas automatizadas ayudan a detectar diferencias, pero necesitan:
Viewports representativos.
Fuentes estables.
Datos deterministas.
Estados interactivos.
Umbral de diferencia controlado.
Una captura correcta no demuestra teclado, reflow o semántica.
Navegadores objetivo.
Viewports intermedios.
Zoom.
Dark/light.
Reduced motion.
Forced colors.
Impresión.
Texto largo.
Idiomas RTL.
Error/loading/empty states.
Resultado esperado.
Resultado real.
Browser y versión.
OS.
Caso mínimo.
Screenshot/video si aporta.
Feature support consultado.
Workaround conocido.
Aumentar specificity antes de inspeccionar.
Depurar source en vez del DOM final.
Ocultar overflow globalmente.
Creer que @supports detecta bugs.
Asumir que Baseline representa a todos los usuarios.
Esperar que Autoprefixer polyfille Grid moderno.
Depender solo de screenshots.
No probar preferencias y zoom.
Sigue CSS desde selector hasta rendering.
Una regla tachada coincide pero pierde.
Computed y layout views explican el resultado.
Un caso mínimo separa responsabilidades.
@supports permite progressive enhancement.
Prefixing, transpilation y polyfill no son iguales.
Compatibilidad depende de la audiencia real.
Automatización necesita pruebas manuales.
¿Por qué @supports (display: grid) no garantiza que un layout Grid específico esté libre de bugs?
Respuesta Porque solo comprueba que el navegador reconoce la propiedad y el valor; no valida cada parte del algoritmo ni la combinación concreta del diseño.
Modelo mental completo de CSS conecta cascada, valores, layout, adaptación, movimiento y arquitectura.