Ejercicio: Variables, temas y organización
Objetivo
Construir un sistema de diseño con variables CSS, un tema oscuro, color-mix() y clamp(), y comprobar que cambiando solo las variables se transforma todo el aspecto.
La página de partida
Este es el HTML de tu página. No lo modifiques: escribe solo el CSS.
<body class="app">
<header class="cabecera"><h1 class="titulo">Mi tienda</h1></header>
<main class="contenido">
<article class="tarjeta"><h2>Producto</h2><p>Descripción del producto.</p><button class="boton">Comprar</button></article>
<p class="nota">Tema configurable con variables CSS.</p>
</main>
</body>
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: mi variable no se aplica
Revisa que el nombre sea idéntico (incluidos los dos guiones) y que esté definida en :root o en un ancestro del elemento. Un error de escritura hace que se descarte la declaración.
💡 Pista 2: ¿cómo se prueba el tema oscuro?
En tu caja de pruebas, añade data-tema="oscuro" al <body>. Verás cómo cambian los colores sin tocar el resto del CSS.
🔎 Comprueba tu trabajo
Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista.
✅ Ver una solución de ejemplo
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
:root {
--fondo: #f7f8fc;
--superficie: #ffffff;
--texto: #1e2235;
--acento: #4f46e5;
--radio: 12px;
--espacio: 1rem;
}
:root[data-tema="oscuro"] {
--fondo: #0f1222;
--superficie: #181c33;
--texto: #e8eaf6;
color-scheme: dark;
}
*, *::before, *::after { box-sizing: border-box; }
body {
margin: 0;
background: var(--fondo);
color: var(--texto);
font-family: system-ui, sans-serif;
}
.titulo { font-size: clamp(1.5rem, 1rem + 2vw, 2.25rem); }
.tarjeta {
background: var(--superficie);
border: 1px solid color-mix(in srgb, var(--texto) 15%, transparent);
border-radius: var(--radio);
padding: var(--espacio);
}
.boton {
background: var(--acento);
color: #fff;
border: 0;
border-radius: var(--radio);
padding: .6rem 1.2rem;
}
.boton:hover { background: color-mix(in srgb, var(--acento) 85%, black); }
.nota { color: color-mix(in srgb, var(--texto) 65%, var(--fondo)); }
💡 🏁 Reto extra (opcional)
Añade @media (prefers-color-scheme: dark) que aplique el mismo tema oscuro automáticamente, salvo que la persona haya elegido data-tema="claro". Prueba cambiando el modo de tu sistema.