Saltar al contenido
Curso de CSS
Todos los cursos Ir al ejercicio →

Proyecto: landing page responsiva

  • ⏱ 120 minutos
  • 📶 Nivel: principiante
  • 🧩 Incluye ejercicio

💡 🎯 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.

ParteLo que aplicasLección
Variables y sistema de diseño:root, tokens de color, espacio y radio11
Tipografía y colorrem, clamp(), legibilidad, HSL3
Cabecera fijaposition: sticky, Flexbox5 y 6
Sección principal (hero)Fondos, degradados, min-height9
Tarjetas de ventajasGrid, sombras, transiciones7, 9 y 10
Galeríaauto-fit + minmax(), aspect-ratio7 y 4
Formulario y pieGrid/Flex, foco accesible6, 7
Adaptaciónmin-width, mobile-first8
Modo oscuro y movimiento reducidoVariables, prefers-color-scheme, prefers-reduced-motion10 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

  1. Lee el HTML. Identifica los bloques: cabecera, hero, ventajas, galería, contacto, pie.
  2. Dibuja un boceto móvil (una sola columna, todo apilado) y luego uno de escritorio (3 columnas de ventajas, galería en cuadrícula).
  3. 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).
  4. Define los espacios: una escala (0.5, 1, 2, 4 rem) y un radio.
  5. 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

Orden recomendado
/* 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

Tu punto de partida
: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

5.Revisión de calidad

RevisiónCómo comprobarlo
ResponsivoModo dispositivo de F12: 320, 375, 768, 1024 y 1440px. Sin desplazamiento horizontal.
ContrasteTexto normal ≥ 4.5:1, tanto en tema claro como oscuro.
TecladoCon Tab todo se alcanza y se ve dónde está el foco. El enlace para saltar aparece.
ZoomAl 200% nada se superpone ni se corta.
MovimientoCon «reducir movimiento» activado, no hay animaciones.
RendimientoSin imágenes enormes; sin transition: all; animaciones con transform/opacity.
CódigoSin 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:

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

📒 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: sticky para 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-scheme y 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érminoSignificado
Landing pagePágina de aterrizaje: una página pensada para presentar y convertir.
HeroSección principal y más visible en la parte superior de la página.
Mobile-firstDiseñar primero para el móvil y mejorar al crecer la pantalla.
Sistema de diseñoConjunto de decisiones visuales reutilizables (colores, espacios, tipografías).
Punto de rupturaAncho donde el diseño cambia.
LighthouseHerramienta del navegador que audita rendimiento, accesibilidad y buenas prácticas.
BEMConvención de nombres de clases: Bloque__Elemento--Modificador.
Foco visibleIndicació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?

¿Para qué sirven las variables en un proyecto grande?

¿Qué es lo mínimo que debes hacer por la accesibilidad en CSS?

¿Cuál es la mejor forma de comprobar tu diseño en pantallas pequeñas mientras desarrollas?

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.

Ir al ejercicio