El método
Ante cualquier problema de CSS, esta secuencia. No cambia con los años ni con las modas:
- ¿Qué tipo de problema es: tamaño, espacio, distribución o estado?
- Si es de distribución: ¿una dimensión o dos? Flexbox o Grid
- ¿Puede resolverse solo, con límites, en lugar de con un breakpoint?
- Si no se ve como esperabas: inspeccionar antes de escribir
La idea más importante
Si dentro de un año has olvidado las propiedades, que quede esta:
Cuando algo no se ve como esperabas, la respuesta no es añadir CSS. Es averiguar qué regla está actuando.
De ahí sale todo lo demás: por eso no usamos !important, por eso los selectores no se hacen más específicos «por si acaso», por eso DevTools está siempre abierto, y por eso distinguimos una regla tachada de una regla ausente.
Su propiedad complementaria, la que gobierna el layout:
Describe límites, no medidas
max-width en vez de width. minmax() en vez de un número de columnas. clamp() en vez de un tamaño fijo. Un diseño que declara límites se adapta solo; uno que declara medidas hay que arreglarlo en cada pantalla.
No memorices CSS
No necesitas recordar todas las propiedades. Tienes autocompletado, DevTools, documentación, buscadores e IA. Lo que necesitas es saber plantearte esto:
- ¿Qué quiero seleccionar exactamente?
- ¿Qué regla está actuando ahora, y por qué gana?
- ¿Es un problema de tamaño, de espacio, de distribución o de estado?
- ¿Una dimensión o dos?
- ¿Necesito de verdad una media query, o puede adaptarse solo?
- ¿Estoy usando un valor fijo sin una razón?
- ¿Qué pasará cuando el contenido cambie?
- ¿Y en una pantalla más pequeña?
- ¿Y para quien navega con teclado?
Al terminar deberías poder responder
- ¿Cómo se relacionan HTML y CSS?
- ¿Qué partes tiene una regla CSS?
- ¿Qué diferencia hay entre seleccionar por elemento, por clase y por
id? - ¿Qué significa que CSS sea «en cascada»?
- ¿Qué es la especificidad y en qué orden pesan los selectores?
- ¿Qué propiedades suelen heredarse y cuáles no?
- ¿Por qué
!importantno es una solución? - ¿Qué capas tiene el box model?
- ¿Qué cambia
box-sizing: border-box? - ¿Cuándo usarías
px,%orem? - ¿Qué problema resuelven las custom properties?
- ¿Qué hacen
min(),max()yclamp()? - ¿Qué es el flujo normal?
- ¿Qué diferencia hay entre
block,inlineeinline-block? - ¿Qué diferencia hay entre
relativeyabsoluterespecto al hueco? - ¿Cuándo usarías Flexbox?
- ¿Sobre qué eje actúan
justify-contentyalign-items? - ¿Cuándo usarías Grid?
- ¿Qué representa
fry por qué no es un porcentaje? - ¿Para qué sirven
repeat()yminmax()? - ¿Qué diferencia hay entre
auto-fityauto-fill? - ¿Qué significa diseño responsive, y qué mobile first?
- ¿Dónde debe colocarse un breakpoint, y por qué no en las medidas de un teléfono?
- ¿Qué problema resuelven
object-fityaspect-ratio? - ¿Por qué
:focus-visiblees importante y qué no debe hacerse conoutline? - ¿Qué diferencia hay entre una media query y una container query?
- ¿Cómo averiguas con DevTools qué regla está ganando, y cómo distingues eso de un selector que no encuentra nada?
Si puedes responderlas y construir un sitio responsive sin depender de Bootstrap ni de una plantilla, tienes una base sólida de CSS.
El vocabulario de la unidad
| Concepto | Significa |
|---|---|
| Regla | Un selector más su bloque de declaraciones |
| Declaración | Una propiedad con su valor |
| Cascada | El mecanismo que decide qué declaración se aplica cuando varias compiten |
| Especificidad | Cuán concreto es un selector: elemento < clase < id |
| Herencia | Que ciertas propiedades pasen de un elemento a sus descendientes |
| Pseudo-clase | Selector por estado o posición, como :hover o :first-child |
| Custom property | Variable de CSS, declarada con -- y leída con var() |
| Box model | Las capas de una caja: contenido, padding, borde y margen |
border-box |
Que width incluya el padding y el borde |
| Número mágico | Un valor escrito a pelo sin que nada explique de dónde sale |
| Flujo normal | La colocación por defecto, siguiendo el orden del documento |
| Eje principal | La dirección en que Flexbox coloca sus elementos |
| Eje transversal | El perpendicular al principal |
gap |
Separación entre elementos de un Flexbox o un Grid |
fr |
Una fracción del espacio libre, ya descontados los gap |
| Pista | Cada columna o fila de una cuadrícula |
| Área | Un grupo rectangular de celdas, que puede tener nombre |
| Breakpoint | La anchura a la que el diseño cambia de disposición |
| Mobile first | Escribir primero la disposición simple y añadir después las anchas |
| Media query | Consulta sobre el viewport o sobre una preferencia del usuario |
| Container query | Consulta sobre el espacio disponible del contenedor de un componente |
object-fit |
Cómo encaja una imagen en la caja que se le da |
:focus-visible |
El estado de foco cuando la indicación hace falta |
La siguiente unidad
Tu sitio ya puede mostrar información, adaptarse al dispositivo, recoger datos en un formulario y responder con estados visuales.
Lo que todavía no sabe es reaccionar con lógica.
- HTML · qué existe
- CSS · cómo se presenta
- JavaScript · qué ocurre
En la siguiente unidad empieza la programación, y lo hará, de forma deliberada, casi sin modificar la página: primero el lenguaje —datos, decisiones, funciones y estructuras— porque un filtro que no filtra casi nunca es un problema del botón, sino de una lógica que todavía no se sabe leer. La interfaz que reacciona llega justo después, en la UD4.
El trabajo de estas semanas demostrará entonces de nuevo su utilidad: sobre un documento semántico y un CSS que separa estructura de presentación, añadir comportamiento es añadir una capa. Sobre lo otro, es empezar de nuevo.
Ya deberías ser capaz de
- Enlazar una hoja de estilos y saber diagnosticar por qué una página no la está cargando.
- Elegir el selector que corresponde al problema en lugar del que casualmente funciona.
- Diagnosticar con DevTools qué regla gana un conflicto, y resolverlo sin recurrir a !important.
- Razonar el tamaño de un elemento con el box model y box-sizing.
- Construir un sistema visual mínimo con variables, una escala tipográfica y un espaciado consistente.
- Distribuir elementos con Flexbox cuando el problema es de una dimensión.
- Maquetar con Grid cuando el problema tiene filas y columnas a la vez.
- Conseguir que un diseño se adapte de forma fluida antes de escribir la primera media query.
- Colocar los breakpoints donde el contenido deja de funcionar, no donde está de moda un teléfono.
- Mantener visibles los estados de foco y respetar las preferencias de movimiento del usuario.
- Refactorizar una hoja de estilos frágil hacia un modelo de layout que aguante cambios de contenido.