Proyecto: landing page responsiva
💡 🎯 Al terminar esta lección podrás…
- Aplicar todo el curso en un proyecto completo.
- Construir una página responsiva mobile-first con un sistema de variables.
- Incluir modo oscuro, animaciones sutiles y accesibilidad.
- Revisar y depurar un diseño antes de publicarlo.
1.Qué vas a construir
Vas a darle estilo completo a la página de inicio de una cafetería. Recibirás el HTML ya escrito (con buena semántica) y tu trabajo es el CSS: que se vea profesional, se adapte desde 320px hasta pantallas grandes, tenga modo oscuro, pequeñas animaciones y buena accesibilidad.
| Parte | Lo que aplicas | Lección |
|---|---|---|
| Variables y sistema de diseño | :root, tokens de color, espacio y radio | 11 |
| Tipografía y color | rem, clamp(), legibilidad, HSL | 3 |
| Cabecera fija | position: sticky, Flexbox | 5 y 6 |
| Sección principal (hero) | Fondos, degradados, min-height | 9 |
| Tarjetas de ventajas | Grid, sombras, transiciones | 7, 9 y 10 |
| Galería | auto-fit + minmax(), aspect-ratio | 7 y 4 |
| Formulario y pie | Grid/Flex, foco accesible | 6, 7 |
| Adaptación | min-width, mobile-first | 8 |
| Modo oscuro y movimiento reducido | Variables, prefers-color-scheme, prefers-reduced-motion | 10 y 11 |
💡 Consejo · Trabaja por capas
No intentes hacer todo a la vez. Primero la base (variables, tipografía), luego el móvil, después escritorio, al final detalles (sombras, animaciones, modo oscuro). Así cada paso se ve y se corrige fácil.
2.Plan antes de escribir
- Lee el HTML. Identifica los bloques: cabecera, hero, ventajas, galería, contacto, pie.
- Dibuja un boceto móvil (una sola columna, todo apilado) y luego uno de escritorio (3 columnas de ventajas, galería en cuadrícula).
- Elige tu paleta: un acento (el color del café, un naranja o marrón), un fondo claro y texto oscuro. Comprueba el contraste (mínimo 4.5:1).
- Define los espacios: una escala (0.5, 1, 2, 4 rem) y un radio.
- Decide tus puntos de ruptura a partir de donde el diseño se rompe.
📌 Nota · El HTML no se toca
En un proyecto real puedes modificar el HTML, pero aquí el objetivo es practicar CSS: todo lo logras solo con estilos. Los nombres de clase siguen BEM (.hero__titulo) para que los selectores sean simples.
3.Estructura de tu hoja de estilos
/* 1. Variables y tema */
:root { … }
:root[data-tema="oscuro"] { … }
/* 2. Reseteo y base */
*, *::before, *::after { box-sizing: border-box; }
body { … }
/* 3. Componentes (móvil primero) */
.cabecera { … } .menu { … } .boton { … }
.hero { … } .ventajas { … } .galeria { … } .contacto { … } .pie { … }
/* 4. Escritorio */
@media (min-width: 700px) { … }
@media (min-width: 1000px) { … }
/* 5. Preferencias del usuario */
@media (prefers-reduced-motion: reduce) { … }
4.Paso a paso
Paso 1: variables y base
:root {
--fondo: #fffaf5; --superficie: #ffffff;
--texto: #2b1d14; --texto-suave: #6b5648;
--acento: #b45309; --borde: #ecdccc;
--radio: 14px; --espacio: 1rem;
--sombra: 0 1px 2px rgb(0 0 0 / .06), 0 10px 28px rgb(43 29 20 / .12);
}
*, *::before, *::after { box-sizing: border-box; }
body { margin: 0; background: var(--fondo); color: var(--texto); font: 1.0625rem/1.65 system-ui, sans-serif; }
Paso 2: cabecera pegajosa y menú
Una cabecera con la marca a la izquierda y el menú a la derecha (Flexbox), que se queda arriba al desplazar (position: sticky; top: 0; z-index: 10) y con un fondo para que el contenido no se vea debajo.
Paso 3: hero
Una sección alta (min-height) con un fondo en capas (un degradado y, encima, una capa oscura) y el texto centrado. El título con clamp() y el botón con transición.
Paso 4: ventajas y galería
En móvil, una columna con gap. A partir de 700px, tres columnas (repeat(3, 1fr)). La galería con repeat(auto-fit, minmax(150px, 1fr)) y cada .foto con aspect-ratio: 1 y un degradado.
Paso 5: contacto y pie
El formulario como cuadrícula vertical con gap y campos que ocupan todo el ancho. El pie con display: flex; justify-content: space-between; flex-wrap: wrap.
Paso 6: detalles de calidad
:focus-visiblecon un contorno claro en enlaces, botones y campos.- Transiciones suaves en el botón y las tarjetas (
transform,box-shadow). - Tema oscuro con
[data-tema="oscuro"]y@media (prefers-color-scheme: dark). @media (prefers-reduced-motion: reduce)para quitar el movimiento.- El enlace «Saltar al contenido» oculto fuera de pantalla hasta recibir el foco.
5.Revisión de calidad
| Revisión | Cómo comprobarlo |
|---|---|
| Responsivo | Modo dispositivo de F12: 320, 375, 768, 1024 y 1440px. Sin desplazamiento horizontal. |
| Contraste | Texto normal ≥ 4.5:1, tanto en tema claro como oscuro. |
| Teclado | Con Tab todo se alcanza y se ve dónde está el foco. El enlace para saltar aparece. |
| Zoom | Al 200% nada se superpone ni se corta. |
| Movimiento | Con «reducir movimiento» activado, no hay animaciones. |
| Rendimiento | Sin imágenes enormes; sin transition: all; animaciones con transform/opacity. |
| Código | Sin valores repetidos (usa variables), sin !important, selectores cortos. |
💡 Consejo · Pásale Lighthouse
En F12 → Lighthouse obtienes una puntuación de rendimiento, accesibilidad y buenas prácticas. Apunta a 90+ en accesibilidad.
6.Publicación y siguientes pasos
Cuando tu landing esté lista, tienes dos caminos para mostrarla:
- Publicarla con GitHub Pages, como se explica en la lección 11 de HTML.
- Ponerla en tu portafolio con una captura y el enlace al sitio.
Y para seguir avanzando, el siguiente paso natural es el curso de JavaScript: darle comportamiento a esta misma página (un menú móvil que se abre, un botón de tema claro/oscuro, validación del formulario).
🔍 Ejemplo · Retos para ir más allá
Una vez que cumplas todos los puntos: añade una sección de testimonios con una cuadrícula asimétrica, un efecto de cristal en la cabecera (backdrop-filter), una animación de entrada escalonada en las ventajas, o rediseña todo con otra paleta cambiando solo las variables.
7.Errores frecuentes en proyectos completos
- Empezar por escritorio y luego sufrir para adaptar a móvil.
- Escribir los colores a mano en cada regla en lugar de usar variables.
- Usar
pxfijos en anchos de contenedores. - Olvidar el estado
:focus-visible. - No probar entre los puntos de ruptura (por ejemplo, a 800px).
- Animar
width/topen vez detransform. - Dejar selectores gigantes como
.contenedor .seccion .caja ul li a.
📒 Apuntes para llevar
- Un proyecto CSS se trabaja por capas: variables → base → móvil → escritorio → detalles.
- Un sistema de variables (
:root) hace que cambiar la paleta o el espaciado sea cuestión de una línea. - El enfoque mobile-first escribe la base para móvil y añade
@media (min-width: …). - Combina Flexbox (cabecera, pie), Grid (ventajas, galería) y
position: stickypara el layout. - La accesibilidad también es CSS: foco visible, contraste, enlace para saltar y
prefers-reduced-motion. - El modo oscuro se logra redefiniendo variables, con
prefers-color-schemey un atributo para elegir a mano. - Revisa con el modo dispositivo, el zoom al 200% y Lighthouse antes de publicar.
- El siguiente paso es JavaScript: dar comportamiento a la página.
8.Glosario
| Término | Significado |
|---|---|
| Landing page | Página de aterrizaje: una página pensada para presentar y convertir. |
| Hero | Sección principal y más visible en la parte superior de la página. |
| Mobile-first | Diseñar primero para el móvil y mejorar al crecer la pantalla. |
| Sistema de diseño | Conjunto de decisiones visuales reutilizables (colores, espacios, tipografías). |
| Punto de ruptura | Ancho donde el diseño cambia. |
| Lighthouse | Herramienta del navegador que audita rendimiento, accesibilidad y buenas prácticas. |
| BEM | Convención de nombres de clases: Bloque__Elemento--Modificador. |
| Foco visible | Indicación clara de qué elemento recibe las pulsaciones del teclado. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿En qué orden conviene construir el CSS de una landing?
Mobile-first es más simple: añades columnas y espacio al crecer la pantalla.
¿Para qué sirven las variables en un proyecto grande?
Un cambio en :root se refleja en todo el sitio.
¿Qué es lo mínimo que debes hacer por la accesibilidad en CSS?
Sin foco visible, quien usa teclado no sabe dónde está.
¿Cuál es la mejor forma de comprobar tu diseño en pantallas pequeñas mientras desarrollas?
Con F12 puedes simular cualquier ancho al instante.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.