Flexbox, CSS Grid, variables CSS, animaciones, responsive design y buenas prácticas. Ideal para frontend moderno y preparación para Full Stack Open.
HTML5 introduce etiquetas semánticas que mejoran accesibilidad y SEO. Olvida los <div> sin sentido.
<header>Cabecera de la página</header> <nav>Menú de navegación</nav> <main>Contenido principal único</main> <article>Artículo independiente</article> <section>Agrupación temática</section> <aside>Contenido lateral (sidebar)</aside> <footer>Pie de página</footer>
<meta charset="UTF-8">, viewport para móviles, y atributos alt en imágenes.
🔹 ¿Por qué usar HTML semántico? Mejora la accesibilidad (screen readers), SEO y hace el código más mantenible. Las etiquetas semánticas definen propósito: <header> para la cabecera, <nav> para navegación, <main> para el contenido principal, <article> para contenidos independientes y <aside> para información complementaria.
🔹 Encabezados y estructura: Usa jerarquía correcta (<h1> → <h2> → <h3>) para ayudar a motores de búsqueda y lectores de pantalla. No saltes niveles y mantén títulos descriptivos.
🔹 Formularios accesibles: Etiqueta cada campo con <label for="id">, usa atributos type, required y aria-* cuando sea necesario. Valida en cliente y servidor.
🔹 Buenas prácticas: Evita atributos inline para estilos, usa archivos separados cuando el proyecto crezca, y añade metadatos (description, viewport, lang) en el <head>.
<!DOCTYPE html>
<html>
<head><title>Mi Blog</title></head>
<body>
<header><h1>Blog semántico</h1></header>
<nav><a href="#">Inicio</a> <a href="#">Artículos</a> <a href="#">Contacto</a></nav>
<main>
<article><h2>Mi primer post</h2><p>Contenido del artículo...</p></article>
</main>
<footer>© 2025 Mi Blog</footer>
</body>
</html><header role="banner">...</header> <nav role="navigation">...</nav> <main role="main" lang="es">...</main>
<form>
<label>Nombre<input required></label>
<label>Email<input type="email" required></label>
<button type="submit">Enviar</button>
</form><article>
<h1>Título</h1>
<h2>Subtítulo</h2>
<figure><img src="#" alt=""><figcaption>Pie</figcaption></figure>
<ul><li>Punto 1</li><li>Punto 2</li></ul>
</article>Las variables CSS (custom properties) permiten temas dinámicos y código reutilizable.
:root {
--primary: #2563eb;
--spacing: 1rem;
}
.btn {
background: var(--primary);
padding: var(--spacing);
}* { margin:0; padding:0; box-sizing: border-box; }🔹 Variables CSS: Las custom properties (`--nombre`) permiten cambiar temas en cascada y definir valores reutilizables. Son dinámicas y se pueden actualizar desde JS o mediante clases.
🔹 Box model y tamaño: Entiende `content`, `padding`, `border` y `margin`. Usa `box-sizing: border-box` para que el padding no aumente el ancho total del elemento.
🔹 Especificidad y mantenimiento: Evita reglas demasiado específicas; prefiere clases reutilizables. Usa un sistema de nomenclatura (BEM o similar) para componentes grandes.
🔹 Rendimiento: evita selectores costosos (como `div > *`) a gran escala; prefiere clases y reduce repaints usando transform/opacity para animaciones.
:root { --bg: white; --text: black; }
.dark { --bg: #1e293b; --text: #f1f5f9; }
body { background: var(--bg); color: var(--text); }:root{--space:1rem;--fs:16px}
.header{padding:var(--space);font-size:calc(var(--fs)*1.5)}@media (prefers-color-scheme: dark){:root{--bg:#0f172a;--text:#f1f5f9}}.card{--bg:#fff;background:var(--bg);padding:1rem;border-radius:8px}<!-- Estructura base: header, hero, services, footer -->
<header class="site-header">
<nav class="nav"><a href="#">Inicio</a> <a href="#">Servicios</a> <a href="#">Contacto</a></nav>
</header>
<section class="hero">
<h1>Título de la landing</h1>
<p>Subtítulo y llamada a la acción</p>
</section>
<section class="services">
<div class="card">Servicio 1</div>
<div class="card">Servicio 2</div>
<div class="card">Servicio 3</div>
</section>
<footer class="site-footer">Pie de página</footer>
<!-- CSS sugerido: .nav {display:flex;gap:16px} .hero {display:grid;place-items:center} .services {display:grid;grid-template-columns:repeat(3,1fr);gap:16px} -->