← CSS: diseño, maquetación y responsive

Sesión 17 · Semana 6

Depurar CSS

Hoy · Hoja de ruta

  1. 1. Aprende: El método para diagnosticar una página que se ve mal, en lugar de rehacerla.
  2. 2. Haz: Localiza y corrige los fallos de una hoja de estilos rota, explicando cada causa.
  3. 3. Comprueba: Puedes nombrar la causa de cada fallo, no solo la corrección.

Antes de empezar · 5 minutos, sin apuntes

  1. ¿Qué elegirías para una navegación, un catálogo y una página completa: flujo, Flexbox o Grid?
  2. ¿Qué hace que un componente sea realmente responsive?
  3. Predice por qué una regla puede aparecer tachada en DevTools.

Diagnosticar, no rehacer

Recibirás una página que se ve mal. La tentación es borrarlo todo y empezar de cero, y es exactamente lo que no vas a poder hacer en un trabajo: el CSS que te toque arreglar será de otro, tendrá años y funcionará en sitios que no puedes romper.

El método es el de la primera sesión:

Cómo se diagnostica
  1. ¿Qué esperaba ver y qué veo?
  2. Inspeccionar el elemento concreto que falla
  3. ¿Qué reglas le llegan? ¿Cuáles están tachadas?
  4. ¿Es un problema de selector, de cascada, de caja o de layout?
  5. Corregir la causa, no el síntoma

El paso 4 es el que ahorra tiempo. Los cuatro tipos de problema se buscan en sitios distintos:

Tipo Síntoma Dónde mirar
Selector La regla no aparece en Styles El nombre de la clase, la sintaxis, que el archivo cargue
Cascada La regla aparece tachada Especificidad y orden
Caja El tamaño no es el que escribiste Layout: box model, box-sizing, padding
Layout Los elementos no se colocan bien Los inspectores de Flexbox y de Grid

Las cuatro pestañas

Pestaña Para qué
Elements El árbol real, ya construido por el navegador
Styles Las reglas que llegan al elemento, en orden, con las derrotadas tachadas
Computed El valor final de cada propiedad, ya resuelto todo
Layout El box model dibujado, y los inspectores de Grid y Flexbox

Un procedimiento resuelve la mitad de los casos: en Styles, las casillas contiguas a cada declaración la desactivan en vivo. Desactivar propiedades una a una hasta que el problema desaparece te dice cuál era la culpable en veinte segundos, sin tocar el archivo.

Reto 4 · Quita el !important (10 min)

#main .listado div.card.producto {
    margin-left: 37px !important;
}

Esta regla funciona. Di tres cosas que están mal en ella, y cómo quedaría bien.

Ver respuesta del Reto 4

1 · El !important. Esconde un conflicto en vez de resolverlo, y obliga a que cualquier ajuste futuro sea otro !important.

2 · La especificidad. Un id, dos clases, dos elementos y una clase más: ese selector no se puede sobrescribir con nada razonable. Con .producto bastaría.

3 · El número mágico. 37px no sale de ninguna decisión: sale de mirar una pantalla. Colocar mediante margin-left es además síntoma de que falta un sistema de layout: si es separación entre elementos de una lista, es gap.

Quedaría en algo así como .producto { } sin margen, y un gap en el contenedor.

Tarea 17 · CSS forense

Recibirás una página cuya hoja de estilos contiene fallos deliberados de todos los tipos:

  • La hoja no carga en una de las páginas.
  • Un selector escrito con una errata, que no selecciona nada.
  • Una regla con especificidad innecesaria que impide ajustar nada.
  • Un !important puesto para tapar el problema anterior.
  • Un elemento que desborda horizontalmente.
  • Un width fijo en píxeles que rompe en móvil.
  • Un Grid con columnas fijas que genera pistas demasiado estrechas.
  • Un Flexbox sin flex-wrap cuyo contenido no cabe.
  • Una imagen deformada.
  • position: absolute usado para maquetar una zona entera.
  • El foco invisible por un outline: none.
  • Un color repetido catorce veces.
  • Dos media queries que se contradicen.

Tu trabajo:

  1. Localiza los problemas.
  2. Clasifica cada uno en selector, cascada, caja o layout. Esa columna es la que se evalúa.
  3. Corrígelos atacando la causa.
  4. Explica las tres correcciones más importantes.
Fallo Tipo Cómo lo detectaste Causa real Corrección
Estoy atascado · no sé por dónde empezar

Por lo que afecta a más cosas. Si la hoja no carga en una página, todo lo demás que veas ahí es ruido: arréglalo primero y vuelve a mirar.

Después, los desbordamientos, porque suelen tener una única causa que produce muchos síntomas. En último lugar, los detalles de cascada, que son locales.

Regla general de la sesión: si la regla no aparece en Styles es de selector; si aparece tachada es de cascada. Esa distinción te ahorra la mitad del trabajo.

Antes de cerrar · 2 minutos, sin mirar

  1. ¿Qué distingue un problema de selector de uno de cascada?
  2. ¿Para qué sirven las casillas junto a cada declaración en Styles?
  3. ¿Por qué no se arregla una página rota rehaciéndola de cero?
Ver respuestas

1 · Si la regla no aparece en Styles, no ha seleccionado nada: es de selector o de sintaxis. Si aparece tachada, sí seleccionó y perdió: es de cascada.

2 · Para desactivar propiedades en vivo y localizar cuál causa el problema sin tocar el archivo.

3 · Porque en un trabajo real el CSS es de otro, tiene años y funciona en sitios que no puedes romper. El segundo motivo es que rehacer el código no identifica dónde estaba el defecto.