1. Landing de una cafetería: Flexbox, Grid y diseño adaptable
Difícil · HTML y CSS · 90 minutos · apuntesdam.com/ejercicios/css/landing-de-una-cafeteria
Café Molino abre su web y el diseñador ya ha entregado el HTML de la página de inicio: una cabecera con el logo y el menú, una portada con el titular y el botón de reservas, y la carta con los platos. Falta todo el CSS, y el formulario de reservas lo hizo un becario sin pensar en la accesibilidad.
La mayoría de las visitas llegarán desde el móvil, así que el diseño se piensa primero para pantallas estrechas y se amplía con media queries (mobile first). Las pruebas de cada apartado comprueban la página a varios anchos, como lo haría un cliente al girar el móvil o abrirla en el ordenador.
Los apartados construyen la misma hoja de estilos poco a poco: cada uno empieza con lo hecho en el anterior y añade una parte nueva.
Requisitos
Cada apartado se corrige por separado con pruebas que se ejecutan dentro de la página (algunas a varios anchos de pantalla). Debajo del editor tienes el resultado en directo.
Los apartados de CSS empiezan con la solución del anterior ya escrita: así la página va creciendo. Puedes hacer los apartados en cualquier orden, pero conviene seguirlo.
Respeta los nombres de las clases del HTML y los valores que pide cada apartado (separaciones, colores, tamaños): las pruebas miden la página.
<header class="cabecera"> <a class="logo" href="#">Café Molino</a> <nav class="menu" aria-label="Principal"> <a href="#carta">Carta</a> <a href="#local">El local</a> <a href="#reservas">Reservas</a> </nav></header><main> <section class="hero"> <h1>Café de especialidad en el centro</h1> <p>Tostamos nuestro propio grano cada semana.</p> <a class="boton" href="#reservas">Reserva tu mesa</a> </section> <section id="carta" class="carta"> <article class="plato"><h2>Espresso</h2><p class="precio">1,80 €</p></article> <article class="plato"><h2>Flat white</h2><p class="precio">2,90 €</p></article> <article class="plato agotado"><h2>Cold brew</h2><p class="precio">3,20 €</p></article> <article class="plato"><h2>Tarta de queso</h2><p class="precio">4,50 €</p></article> <article class="plato"><h2>Croissant</h2><p class="precio">2,10 €</p></article> <article class="plato agotado"><h2>Bizcocho de limón</h2><p class="precio">3,00 €</p></article> </section></main>Apartados
La cabecera: con Flexbox, el logo a la izquierda y el menú a la derecha en la misma línea, centrados en vertical, con 16px de relleno arriba y abajo y 24px a los lados; los enlaces del menú en fila con 24px de separación. En pantallas de menos de 600px, el menú pasa debajo del logo.
La carta (
.carta): una rejilla con CSS Grid, 24px de relleno y 20px de separación entre platos; una columna en el móvil, dos columnas iguales a partir de 600px y tres a partir de 900px. Cada.platocon un borde de 1px, las esquinas redondeadas 8px y 16px de relleno.Colores y tipografía: define en
:rootlas variables--cafe: #6b3e26y--crema: #fff8f0, usa--cremacomo fondo de la página y haz que elh1crezca con la pantalla conclamp(1.75rem, 5vw, 3rem). El.botones una píldora:inline-block, relleno de 12px arriba y abajo y 20px a los lados, esquinas de 999px, fondo--cafe, texto blanco y sin subrayado.Los platos con la clase
agotadose ven al 60 % de opacidad y llevan una etiqueta «Agotado» en la esquina superior derecha, hecha solo con CSS mediante::after: posición absoluta a 8px del borde superior y del derecho (el plato tiene que ser su referencia), fondo#b00020y texto blanco.El formulario de reservas no es accesible: no tiene etiquetas, los tipos de campo no ayudan en el móvil y el botón es un
div. Rehaz su HTML: cada campo con su<label for>; nombre y correo obligatorios conautocomplete(nameyemail) y el correo de tipoemail; personas de tiponumberentre 1 y 8; fecha de tipodatey obligatoria; el turno con dos radios (comidaycena, cada uno con su id y sulabel) dentro de un<fieldset>con la<legend>«Turno»; y un<button type="submit">«Reservar». Conserva los idnombre,email,personasyfecha.