Los martes nos enfocamos en resolver problemas reales. Hoy analizamos los errores de CSS más frustrantes que pueden arruinar un layout y las técnicas probadas para debuggearlos efectivamente.
Error #1: El Misterioso Overflow Horizontal
Síntomas:
- Scroll horizontal inesperado
- Elementos que se salen del viewport
- Layout que “se rompe” en móviles
Debugging:
/* Añade temporalmente para identificar el culpable */
* {
outline: 1px solid red !important;
}
/* O usa este snippet más específico */
.debug-width {
box-sizing: border-box;
max-width: 100vw;
overflow-x: hidden;
}
Soluciones Comunes:
/* 1. Box-sizing global */
*, *::before, *::after {
box-sizing: border-box;
}
/* 2. Prevenir overflow en contenedores */
.container {
max-width: 100%;
overflow-x: hidden;
}
/* 3. Responsive images */
img {
max-width: 100%;
height: auto;
}
/* 4. Text overflow en elementos fijos */
.fixed-width {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Error #2: Flexbox Que No Se Comporta Como Esperamos
Problema Típico:
.flex-container {
display: flex;
/* Los elementos no se alinean como quiero */
}
.flex-item {
width: 33.33%; /* ¿Por qué no funciona? */
}
Debugging Sistemático:
/* Paso 1: Visualizar el flex container */
.flex-container {
display: flex;
border: 2px solid blue; /* Debugging temporal */
/* Propiedades más comunes que se olvidan */
flex-wrap: wrap; /* ¿Los elementos deben hacer wrap? */
align-items: center; /* Alineación vertical */
justify-content: space-between; /* Alineación horizontal */
}
/* Paso 2: Controlar flex items correctamente */
.flex-item {
border: 1px solid red; /* Ver el espacio real */
/* En lugar de width, usar flex */
flex: 1 1 33.33%; /* flex-grow, flex-shrink, flex-basis */
/* Para elementos que no deben crecer */
flex: 0 0 auto;
}
DevTools Trick: Usa el inspector de Flexbox en Chrome DevTools (icono “flex” junto al elemento) para visualizar espacios y alineaciones.
Error #3: Media Queries Que No Funcionan
Signos de Problemas:
/* Orden incorrecto - más específico primero */
@media (min-width: 768px) {
.element { font-size: 18px; }
}
@media (min-width: 480px) {
.element { font-size: 16px; } /* Nunca se aplica */
}
Debugging y Solución:
/* 1. Siempre incluir viewport meta tag en HTML */
/* <meta name="viewport" content="width=device-width, initial-scale=1"> */
/* 2. Orden correcto: mobile first */
.element {
font-size: 14px; /* Base mobile */
}
@media (min-width: 480px) {
.element { font-size: 16px; }
}
@media (min-width: 768px) {
.element { font-size: 18px; }
}
@media (min-width: 1024px) {
.element { font-size: 20px; }
}
/* 3. Debugging: media query temporal */
@media (min-width: 768px) {
body { background: red !important; } /* ¿Se activa? */
}
Error #4: Z-index Wars (Elementos Que Desaparecen)
El Problema:
.modal {
z-index: 9999; /* "Más alto = siempre encima" ❌ */
}
.dropdown {
z-index: 999999; /* Escalation warfare ❌ */
}
Solución Sistemática:
/* Sistema de z-index organizado */
:root {
--z-dropdown: 1000;
--z-sticky: 1020;
--z-fixed: 1030;
--z-modal-backdrop: 1040;
--z-modal: 1050;
--z-popover: 1060;
--z-tooltip: 1070;
}
/* Debugging: verificar stacking context */
.debug-stacking {
/* Elementos que crean nuevo stacking context */
position: relative; /* o absolute, fixed */
z-index: 1;
opacity: 0.99; /* También crea stacking context */
}
Debugging Tips:
- Un elemento con
z-indexdebe tenerposition(relative, absolute, fixed) - Elementos hijos nunca pueden aparecer detrás de elementos padre en el DOM
- Usa DevTools → Elements → Computed → busca “z-index”
Error #5: El Temido “Margin Collapse”
Comportamiento Inesperado:
.card {
margin-top: 20px;
margin-bottom: 20px;
}
/* ¿Por qué hay solo 20px entre cards, no 40px? */
Entender y Controlar:
/* Margin collapse ocurre entre elementos block adyacentes */
/* Solución 1: Usar padding en lugar de margin */
.card {
padding-top: 20px;
padding-bottom: 20px;
}
/* Solución 2: Flexbox previene margin collapse */
.card-container {
display: flex;
flex-direction: column;
gap: 20px; /* Mucho más predecible */
}
/* Solución 3: BFC (Block Formatting Context) */
.card {
overflow: hidden; /* Crea BFC */
margin: 20px 0;
}
/* Debugging: identificar margin collapse */
.debug-margins {
outline: 1px solid blue;
background: rgba(255, 0, 0, 0.1);
}
Herramientas Pro de CSS Debugging
Chrome DevTools:
// Console snippet para debugging rápido
$('*').forEach(el => {
const computed = getComputedStyle(el);
if (computed.overflow === 'visible' && el.scrollWidth > el.clientWidth) {
console.log('Overflow horizontal encontrado:', el);
}
});
CSS Debugging Classes:
/* Añadir temporalmente para debugging */
.debug * { outline: 1px solid red !important; }
.debug-grid { background-image: linear-gradient(rgba(255,0,0,.1) 1px, transparent 1px); }
.debug-flex { background: rgba(255, 0, 0, 0.1) !important; }
Extensiones Recomendadas:
- CSS Peeper: Inspeccionar estilos rápidamente
- WhatFont: Identificar tipografías
- Responsive Web Design Tester: Probar breakpoints
Checklist Rápido de CSS Debugging
Layout Issues:
- ¿Está aplicado
box-sizing: border-box? - ¿Los containers tienen
max-width: 100%? - ¿Las imágenes tienen
max-width: 100%?
Flexbox Issues:
- ¿El container tiene
display: flex? - ¿Usé
flexen lugar dewidthpara items? - ¿Necesito
flex-wrap: wrap?
Media Queries:
- ¿Viewport meta tag incluido?
- ¿Orden mobile-first?
- ¿Breakpoints lógicos?
Z-index Issues:
- ¿El elemento tiene
position? - ¿Estoy creando stacking context sin querer?
- ¿Sistema de z-index organizado?
Tu Experiencia de Debugging
¿Cuál de estos errores de CSS te ha dado más dolores de cabeza? ¿Tienes algún truco de debugging que no mencioné?
El CSS debugging puede ser frustrante, pero con metodología y las herramientas correctas, cualquier problema tiene solución. La clave está en entender cómo funciona el layout engine del navegador.
Comparte tu caso más complicado de CSS debugging - todos aprendemos de las experiencias ajenas.
Próximo martes: Troubleshooting de Performance en aplicaciones React ![]()
#TroubleshootingTuesday css webdev debugging FrontEnd #ResponsiveDesign