El examen de "darle vida al DOM": una landing que se SIENTE moderna. Sus
secciones aparecen al bajar, su navbar se transforma al hacer scroll, y un
botón abre un modal accesible. Son los tres patrones que verás en casi toda
página profesional — y al integrarlos tú, en una sola página, demuestras
que ya sabes hacer que una web cobre vida.
Reto
La landing que respira
Media60 min60 XP(×2 sin mirar la solución)
Qué debes construir
Una página de una sección con estos tres comportamientos vivos:
Scroll reveals: las secciones entran con un fade-up al aparecer en
pantalla (IntersectionObserver), respetando prefers-reduced-motion.
Navbar inteligente: la barra superior se vuelve .compacta (más
baja, con sombra) cuando el usuario deja atrás el hero, y vuelve a su
estado grande arriba del todo.
Modal accesible: un botón (ej. "Suscríbete") abre un modal que
gestiona el foco (entra al abrir, vuelve al cerrar) y cierra con el
botón, con Escape y con clic en el fondo.
Reglas
HTML + CSS + JavaScript, sin librerías.
Reutiliza lo aprendido: IntersectionObserver (lección 6) para reveals y
navbar; el patrón de modal accesible (lección 7).
Regla de oro en todo: JS cambia clases/estado, el CSS pinta. Y
prefers-reduced-motion respetado en las animaciones.
60:00
Cuando estés listo, arranca el reloj.
El razonamiento — tres comportamientos independientes, un mismo principio:
Cada efecto es "observar y togglear una clase". Reveals y navbar son
el MISMO patrón (IntersectionObserver → classList) apuntando a cosas
distintas. Una vez lo ves así, no son tres problemas: es uno aplicado
tres veces. El modal añade la gestión de foco, pero también termina en
"toggle de una clase".
JS decide cuándo; CSS decide cómo. Ni una animación en JavaScript:
el fade-up, la sombra del navbar y el fundido del modal viven en CSS. JS
solo pone .visible, .compacta, .abierto. Por eso todo es fácil de
ajustar y de hacer accesible.
La empatía va incorporada, no pegada al final.prefers-reduced-motion
se consulta al construir los observers y vive en el @media del CSS —
parte del diseño, no un parche.
La página viva completa:
<header class="navbar" id="navbar"><span class="logo">Forge</span><button class="btn" id="abrir">Suscríbete</button></header><section class="hero" id="hero"><h1>Construimos webs que se sienten vivas</h1><p>Baja para ver los efectos. Toca "Suscríbete" para el modal.</p></section><section class="bloque revelar"><h2>Scroll reveal</h2><p>Aparezco al entrar en pantalla, con un fade-up suave.</p></section><section class="bloque revelar"><h2>Navbar inteligente</h2><p>Mira la barra de arriba: se volvió compacta al dejar el hero.</p></section><section class="bloque revelar"><h2>Todo con clases</h2><p>JavaScript solo alterna clases; el CSS hace la magia visual.</p></section><div class="modal" id="modal" role="dialog" aria-modal="true" aria-labelledby="mt" aria-hidden="true"><div class="dialogo"> <h2 id="mt">Suscríbete al boletín</h2> <p>Cierra con el botón, con Escape o tocando el fondo.</p> <button class="btn" id="cerrar">Listo</button></div></div>
Autoevaluación: ¿las secciones aparecen al bajar (y se ven de una con
reduced-motion activado)? ¿El navbar se compacta al dejar el hero y vuelve
arriba? ¿El modal abre, gestiona el foco y cierra de las tres formas, todo
con teclado? ¿Revisaste que JavaScript no pinte ni un color (solo alterna
clases)? Cuatro síes: tu página está viva y es accesible — el estándar
profesional.
Qué sigue
Módulo 14 cerrado: sabes darle vida al DOM — seleccionar, reaccionar,
renderizar desde datos, y montar los patrones de UI clásicos con
accesibilidad. Pero escribiste todo con JavaScript "a secas", y en apps
grandes eso se vuelve frágil: un typo en un nombre de propiedad no avisa
hasta que rompe en producción. El módulo 15 trae la red de seguridad —
TypeScript aplicado a la maquetación: los mismos patrones, ahora con el
editor avisándote de los errores ANTES de que ocurran.