edubun
Español

Dale estilo a una página pequeña

La página de la panadería del curso de HTML toma sus colores, espacios y maquetación de unas 40 líneas de CSS, y el HTML no cambia en absoluto.

Empieza por las decisiones, no por las reglas

Antes de escribir reglas, toma unas cuantas decisiones: un color de acento, un color de texto y un fondo con suficiente contraste, una lista de fuentes, un tamaño base y un paso de espaciado que se repita en todas partes (por ejemplo 8, 16 y 24 píxeles). Una página que reutiliza pocos valores se ve tranquila e intencional; una página donde cada caja tiene su propio margen un poco distinto se ve desordenada aunque nadie sepa decir por qué. CSS tiene una función hecha para esto: las propiedades personalizadas.

Propiedades personalizadas

Una propiedad personalizada es un nombre que tú inventas, que empieza con dos guiones y guarda un valor: --accent: #1a5fb4;. Define tus decisiones una vez en :root, que es el elemento html, y úsalas donde quieras con var(): background: var(--accent);. Las propiedades personalizadas se heredan como las propiedades de texto, así que todos los elementos pueden leer las que se definen en la raíz. Ahora, cambiar el color de acento de todo el sitio significa editar una sola línea. También puedes redefinir una propiedad dentro de una media query, por ejemplo para cambiar los colores con prefers-color-scheme: dark.

:root {
  --accent: #1a5fb4;     /* 6.29:1 on white */
  --ink: #222;
  --paper: #fffdf8;
  --space: 16px;
}
body {
  margin: 0;
  font-family: system-ui, sans-serif;
  line-height: 1.6;
  color: var(--ink);
  background: var(--paper);
}
header { display: flex; justify-content: space-between; align-items: center;
         flex-wrap: wrap; gap: var(--space); padding: var(--space); }
nav ul { display: flex; gap: var(--space); list-style: none; margin: 0; padding: 0; }
main { max-width: 60rem; margin: 0 auto; padding: var(--space); }
.cards { display: grid; gap: var(--space);
         grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.card { padding: var(--space); border: 1px solid #ddd; border-radius: 8px; }
img { max-width: 100%; height: auto; }
.btn { background: var(--accent); color: white; border: 0;
       padding: 8px var(--space); border-radius: 6px; font: inherit; }
.btn:hover { background: #154c90; }
.btn:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
Una hoja de estilos pequeña y completa para la página de la panadería. #154c90 es un tono un poco más oscuro del acento.

Leer la hoja de estilos de arriba abajo

La hoja de estilos de arriba usa algo de casi todas las unidades. La raíz guarda las decisiones. body fija una sola vez la fuente, el interlineado y los colores, y la herencia los lleva a cada párrafo. El encabezado es una fila flex con salto de línea, así que en un celular angosto el menú baja debajo del nombre en lugar de quedar apretado. main tiene un max-width y margin: 0 auto, lo que mantiene las líneas legibles y centra el contenido en pantallas anchas. Las tarjetas usan el patrón de grid con auto-fill, así que se reacomodan de una columna a varias sin media query, y las imágenes son fluidas. El botón recibe un color al pasar el puntero y, igual de importante, un contorno de foco visible para quienes usan el teclado.

Compruébalo en pantallas reales

Probar CSS significa mirar. Abre la página en una ventana angosta (320 píxeles para la prueba de reflujo de WCAG) y en una ancha, y busca desplazamiento lateral y texto que toque los bordes. Haz zoom al 200 por ciento. Recorre la página con Tab y asegúrate de que siempre ves dónde está el foco. Revisa el contraste del texto y de los botones en las herramientas para desarrolladores. Activa el modo oscuro o la opción de reducir movimiento de tu sistema si les diste estilo. Las herramientas para desarrolladores del navegador te permiten cambiar cualquier valor en vivo y ver el modelo de caja de cualquier elemento, que es la forma más rápida de responder por qué algo está donde está.

A partir de aquí, las mismas piezas sirven para cualquier sitio. Los proyectos más grandes dividen la hoja de estilos en archivos, nombran las clases según lo que es un componente (tarjeta, botón, encabezado del sitio) y mantienen una lista corta de propiedades personalizadas compartidas, pero las reglas de fondo son las de estas nueve unidades.

propiedad personalizada--nombre: valor; se lee con var(--nombre)
:rootEl elemento html; donde viven los valores compartidos
var()Usa el valor de una propiedad personalizada
:hoverEl puntero está sobre el elemento
:focus-visibleFoco de teclado visible; nunca lo dejes sin estilo después de quitar el contorno
escala de espaciadoUnos pocos valores de espaciado repetidos, como 8, 16, 24
  1. ¿Cómo empieza el nombre de una propiedad personalizada?
    • Con dos guiones
    • Con un signo de dólar
    • Con una arroba
  2. ¿Cómo usas el valor de --accent?
    • var(--accent)
    • get(--accent)
    • $accent
  3. ¿Por qué definir los valores compartidos en :root?
    • Las propiedades personalizadas se heredan, así que todos los elementos pueden leerlas
    • Solo :root acepta propiedades personalizadas
    • Las hace más rápidas
  4. ¿Cuál es la relación de contraste de #1a5fb4 sobre blanco, redondeada a dos decimales?
  5. ¿Por qué el encabezado usa flex-wrap: wrap?
    • En pantallas angostas el menú pasa debajo del nombre en lugar de quedar apretado
    • Para ocultar el menú
    • Para poner el texto en negrita
  6. ¿Qué debe tener siempre un botón para quienes usan el teclado?
    • Un estilo de foco visible
    • Una animación al pasar el puntero
    • Una sombra
  7. ¿Qué maquetación permite que las tarjetas pasen de una columna a muchas sin media query?
    • repeat(auto-fill, minmax(180px, 1fr))
    • grid-template-columns: 180px
    • display: block
  8. --space es 16px. ¿Cuántos píxeles es calc(var(--space) * 1.5)?
  9. ¿Por qué reutilizar unos pocos valores de espaciado en todas partes?
    • La página se ve coherente y es más fácil de cambiar
    • Los navegadores lo exigen
    • Mejora el contraste
Ideas clave
  • Decide primero los colores, las fuentes y una escala de espaciado; guárdalos como propiedades personalizadas en :root.
  • body fija una vez los estilos de texto; flex para el encabezado, grid para las tarjetas, imágenes fluidas.
  • Prueba a 320px, con zoom al 200%, con Tab y en las herramientas para desarrolladores.
Fuentes de este curso (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Fecha de consulta: 2026-10-17