Una receta que se lee bien en el móvil y en el ordenador: HTML semántico, una rejilla de dos columnas en pantallas anchas e ingredientes que se tachan al marcarlos.
5 pasos
50 minutos aproximadamente
153 líneas de código
Editor en vivo
Lo que vas a construir
Una receta es un ejemplo perfecto de diseño adaptable: en el móvil se lee de arriba abajo y en una pantalla ancha conviene tener los ingredientes siempre a la vista. Vas a construirla con HTML semántico y CSS Grid, sin una sola línea de JavaScript.
Lo que vas a practicar
HTML semántico: article, header y section
Un ancho de lectura cómodo
Rejillas con grid-template-areas
Casillas que tachan el texto con :has()
Estilos para imprimir
Resultado final
Antes de empezar, conviene haber hecho estas lecciones
Usa las etiquetas que describen cada parte: <article> para la receta entera, <header> para el título y los datos, y una <section> para los ingredientes y otra para la preparación. Los pasos van en una lista numerada (<ol>), porque el orden importa.
aria-labelledby asocia cada sección con su título, así los lectores de pantalla las anuncian por su nombre.
index.html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tortilla de patatas</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<article class="receta">
<header>
<h1>Tortilla de patatas</h1>
<p class="entradilla">Jugosa por dentro y dorada por fuera, con cebolla.</p>
<ul class="datos">
<li><strong>45 min</strong> en total</li>
<li><strong>4</strong> raciones</li>
<li><strong>Fácil</strong></li>
</ul>
</header>
<section class="ingredientes" aria-labelledby="titulo-ingredientes">
<h2 id="titulo-ingredientes">Ingredientes</h2>
<ul>
<li>6 huevos</li>
<li>700 g de patatas</li>
<li>1 cebolla</li>
<li>200 ml de aceite de oliva</li>
<li>Sal</li>
</ul>
</section>
<section class="pasos" aria-labelledby="titulo-pasos">
<h2 id="titulo-pasos">Preparación</h2>
<ol>
<li>Pela y corta las patatas en láminas finas y la cebolla en tiras.</li>
<li>Fríelas a fuego medio en el aceite unos 20 minutos, hasta que estén tiernas.</li>
<li>Escúrrelas y mézclalas con los huevos batidos y la sal. Deja reposar 5 minutos.</li>
<li>Cuaja la mezcla en una sartén con un poco de aceite, 3 minutos por cada lado.</li>
</ol>
</section>
</article>
</body>
</html>
estilos.css
/* Los estilos llegan en el paso 2 */
2
Paso 2 de 5
Un texto cómodo de leer
Las líneas demasiado largas cansan: max-width: 70ch limita el texto a unos 70 caracteres por línea. margin: 0 auto lo centra.
clamp(2rem, 6vw, 3rem) hace que el título crezca con el ancho de la pantalla, pero sin bajar de 2rem ni pasar de 3rem.
Solo a partir de 800 px de ancho, la receta pasa a ser una rejilla de dos columnas. Con grid-template-areas se «dibuja» el reparto: la cabecera arriba ocupando todo y, debajo, los ingredientes a la izquierda y los pasos a la derecha.
position: sticky deja los ingredientes fijos al hacer scroll por los pasos, para tenerlos siempre a la vista.
Cada ingrediente pasa a ser una casilla con su <label>: al pulsar el texto también se marca. El selector label:has(input:checked) tacha el texto del ingrediente marcado, sin JavaScript.
@media print ajusta la página al imprimirla: fondo blanco, bordes en lugar de sombras y los ingredientes en su sitio normal.
index.htmlLo nuevo, resaltado
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tortilla de patatas</title>
<link rel="stylesheet" href="estilos.css">
</head>
<body>
<article class="receta">
<header>
<h1>Tortilla de patatas</h1>
<p class="entradilla">Jugosa por dentro y dorada por fuera, con cebolla.</p>
<ul class="datos">
<li><strong>45 min</strong> en total</li>
<li><strong>4</strong> raciones</li>
<li><strong>Fácil</strong></li>
</ul>
</header>
<section class="ingredientes" aria-labelledby="titulo-ingredientes">
<h2 id="titulo-ingredientes">Ingredientes</h2>
<ul class="lista-compra">
<li><label><input type="checkbox"> 6 huevos</label></li>
<li><label><input type="checkbox"> 700 g de patatas</label></li>
<li><label><input type="checkbox"> 1 cebolla</label></li>
<li><label><input type="checkbox"> 200 ml de aceite de oliva</label></li>
<li><label><input type="checkbox"> Sal</label></li>
</ul>
</section>
<section class="pasos" aria-labelledby="titulo-pasos">
<h2 id="titulo-pasos">Preparación</h2>
<ol>
<li>Pela y corta las patatas en láminas finas y la cebolla en tiras.</li>
<li>Fríelas a fuego medio en el aceite unos 20 minutos, hasta que estén tiernas.</li>
<li>Escúrrelas y mézclalas con los huevos batidos y la sal. Deja reposar 5 minutos.</li>
<li>Cuaja la mezcla en una sartén con un poco de aceite, 3 minutos por cada lado.</li>
</ol>
</section>
</article>
</body>
</html>
Con tu permiso usamos Google Analytics, que guarda cookies, para saber cuántas personas visitan la web y qué páginas les resultan útiles. No usamos cookies de publicidad y tus archivos nunca salen de tu navegador. Puedes cambiar de opinión cuando quieras en «Configurar cookies», al pie de la página. Más información.