🎯 Objetivo del tema
El administrador aún no ha insertado un video para esta sección.
🗺️ Mapa del tema
HTML define la estructura y el significado; CSS define la presentación visual. Sin CSS, la web sería un muro de texto negro sobre fondo blanco. Con CSS, la web se vuelve legible, atractiva, y adaptable a cada dispositivo. En este tema vas a aprender las reglas del lenguaje: selectores, propiedades, valores, y el famoso Box Model que determina cómo se posiciona cada elemento.
Las 3 formas de aplicar CSS: inline, interno, externo. Cuál usar y por qué.
Por elemento, clase, id, atributo, descendiente, hijo, pseudo-clases.
Content, padding, border, margin: cómo se calcula el tamaño real de cada caja.
Cuándo usar cada una: relativas, absolutas, del viewport, del elemento padre.
Cómo especificar color de forma legible, mantenible y accesible.
font-family, font-size, font-weight, line-height, letter-spacing: cómo hacer texto que se lee bien.
1.5.1 Qué es CSS y cómo se conecta con HTML
CSS (Cascading Style Sheets) es el lenguaje de estilo de la web. Define CÓMO se ven los elementos HTML: colores, tamaños, posiciones, animaciones, tipografía. La regla CSS más simple tiene dos partes: un selector (a quién aplica) y un bloque de declaraciones (qué le hace).
Anatomía de una regla CSS
/* Esto es un comentario CSS */
selector {
propiedad: valor;
otra-propiedad: otro-valor;
}
/* Ejemplo real: */
h1 {
color: #333;
font-size: 2.5rem;
text-align: center;
}Anatomía de una regla CSS
Las 3 formas de aplicar CSS
| Forma | Sintaxis | Cuándo usar | Problema |
|---|---|---|---|
| Inline (en línea) | <h1 style="color: red;"> | NUNCA en producción. Solo para pruebas rápidas. | Mezcla estructura con estilo. Imposible de mantener. |
| Interno (en <style>) | <style>h1 { color: red; }</style> | Solo para páginas únicas o demos pequeñas. | No se reutiliza entre páginas. Ensucia el HTML. |
| Externo (archivo .css) | <link rel="stylesheet" href="estilos.css"> | SIEMPRE en producción. La forma profesional. | Ninguno real. Es la forma correcta. |
Cómo se carga: la cascada
CSS es 'Cascading' (en cascada) porque cuando hay reglas en conflicto, se aplica un orden de prioridad. De mayor a menor importancia:
- !important (úsalo solo en emergencias; es una bomba atómica).
- Estilos inline (style='...') en el propio elemento.
- Selectores por ID (#mi-id).
- Selectores por clase (.mi-clase) y por atributo ([type='text']).
- Selectores por etiqueta (h1, p, div).
- Reglas que aparecen MÁS TARDE en el archivo (ganan a las anteriores con igual especificidad).
El administrador aún no ha insertado un video para esta sección.
1.5.2 Selectores: hablarle a los elementos correctos
Un selector es la parte de la regla CSS que dice a qué elemento(s) aplicar el estilo. Mientras más preciso seas, menos CSS innecesario escribes y menos bugs introduces. Vamos de menor a mayor especificidad.
| Selector | Sintaxis | Aplica a | Ejemplo |
|---|---|---|---|
| Universal | * | Todos los elementos. | * { box-sizing: border-box; } |
| Por etiqueta | h1 | Todos los <h1>. | h1 { color: blue; } |
| Por clase | .mi-clase | Cualquier elemento con class='mi-clase'. | .boton { padding: 10px; } |
| Por id | #mi-id | El ÚNICO elemento con id='mi-id'. | #menu-principal { display: flex; } |
| Por atributo | [type='text'] | Elementos con ese atributo. | input[type='text'] { border: 1px solid; } |
| Descendiente | div p | Todo <p> dentro de un <div>. | article p { line-height: 1.6; } |
| Hijo directo | div > p | Solo <p> que sea hijo directo de <div>. | ul > li { margin: 4px 0; } |
| Hermano adyacente | h1 + p | El <p> inmediatamente después de <h1>. | h1 + p { font-size: 1.1em; } |
Pseudo-clases: estilo según estado
Las pseudo-clases te permiten aplicar estilo según el ESTADO o POSICIÓN del elemento. Son vitales para interactividad y accesibilidad.
/* Estilo del enlace en sus 4 estados */
a:link { color: blue; } /* enlace no visitado */
a:visited { color: purple; } /* enlace visitado */
a:hover { color: red; text-decoration: underline; } /* mouse encima */
a:active { color: orange; } /* en el momento del clic */
a:focus-visible { outline: 2px solid orange; } /* foco por teclado */
/* Estilo del primer/último hijo */
li:first-child { font-weight: bold; }
li:last-child { border-bottom: none; }
/* Estilo de campos de formulario */
input:disabled { background: #eee; cursor: not-allowed; }
input:required { border-left: 3px solid red; }
input:valid { border-color: green; }
input:invalid { border-color: red; }Pseudo-clases comunes
El administrador aún no ha insertado un video para esta sección.
1.5.3 El Box Model: el corazón de CSS
Todo elemento HTML es una CAJA rectangular. Aunque sea un círculo (con border-radius: 50%) o un texto, internamente se calcula como una caja. Entender el Box Model es entender cómo se posiciona, dimensiona y separa cada elemento del resto.
Las 4 capas del Box Model
- CONTENT: el contenido real (texto, imagen, etc.).
- PADDING: espacio INTERNO entre el contenido y el borde. 'Respira' el contenido dentro de su caja.
- BORDER: la línea que rodea la caja (puede ser invisible si border: 0).
- MARGIN: espacio EXTERNO entre esta caja y las demás.
El ejemplo clásico del padding
.caja {
width: 200px; /* ancho del CONTENIDO */
padding: 20px; /* +40px al ancho total (20 izq + 20 der) */
border: 5px solid; /* +10px al ancho total (5 izq + 5 der) */
margin: 10px; /* espacio hacia afuera, no afecta el tamaño de la caja */
}
/* Anchura total real: 200 + 40 + 10 = 250px */
/* Esto confunde a MUCHOS principiantes. */Box Model estándar (content-box)
/* Reset moderno: TODOS los elementos usan border-box */
*, *::before, *::after {
box-sizing: border-box;
}
/* Ahora esto SÍ mide 200px de ancho total */
.caja {
width: 200px;
padding: 20px;
border: 5px solid;
}Reset box-sizing
margin vs padding: la duda eterna
| Usa PADDING cuando... | Usa MARGIN cuando... |
|---|---|
| Quieres espacio DENTRO de la caja, entre el contenido y el borde. | Quieres espacio ENTRE esta caja y otras. |
| El fondo del elemento debe cubrir esa zona. | El fondo NO debe llegar a esa zona. |
| Necesitas que el área sea 'tocable' (botones grandes). | No necesitas que el área sea interactiva. |
El administrador aún no ha insertado un video para esta sección.
1.5.4 Unidades: px, %, em, rem, vw, vh
Elegir la unidad correcta es la diferencia entre un diseño que se ve bien en tu pantalla y un diseño que se ve bien en TODAS las pantallas. Hay dos familias: absolutas (no escalan) y relativas (escalan según un contexto).
| Unidad | Tipo | Relativa a | Cuándo usarla |
|---|---|---|---|
| px | Absoluta | El píxel físico (o del dispositivo). | Bordes, sombras, detalles pequeños. Cosas que NO deben escalar. |
| % | Relativa | El tamaño del elemento padre. | Anchos de columnas, alturas de imágenes. Cuando quieres 'el 50% del espacio disponible'. |
| em | Relativa | El font-size del elemento PADRE. | Cosas que escalan con el texto del contexto. (Cuidado: se anida y se vuelve confusa). |
| rem | Relativa | El font-size del elemento RAÍZ (<html>). | Tipografía y espacios en general. La más predecible. |
| vw | Relativa | El 1% del ANCHO del viewport. | Cosas que escalan con el ancho de pantalla: tipografía fluida, hero sections. |
| vh | Relativa | El 1% del ALTO del viewport. | Pantallas completas (height: 100vh), secciones a página completa. |
El ejemplo: tipografía fluida
/* html por defecto: 1rem = 16px */
/* h1 fijo a 32px: no escala con el dispositivo */
h1 { font-size: 32px; }
/* h1 relativo: escala con la raíz, mejor para accesibilidad */
h1 { font-size: 2rem; } /* = 32px por defecto */
/* h1 fluido: escala entre 24px (móvil) y 48px (escritorio) */
h1 {
font-size: clamp(1.5rem, 4vw, 3rem);
/* mínimo: 24px, ideal: 4% del viewport, máximo: 48px */
}Tipografía: px vs rem vs clamp()
El administrador aún no ha insertado un video para esta sección.
1.5.5 Colores: hex, rgb, hsl y cuándo usar cada uno
CSS ofrece 4 formas principales de especificar colores. Cada una tiene ventajas y desventajas. La elección correcta hace que tu paleta sea fácil de mantener, ajustar y hacer accesible.
| Formato | Ejemplo | Ventaja | Cuándo usarlo |
|---|---|---|---|
| Nombre | red, blue, transparent | Fácil de leer. | Solo para colores básicos y la palabra 'transparent'. |
| Hex | #FF6B00 | Corto y compacto. Soportado en todo. | Paleta fija. Cuando el color no cambia en el sitio. |
| rgb() / rgba() | rgb(255, 107, 0) | Permite alpha (transparencia) fácil. | Cuando necesitas transparencia sobre imágenes. |
| hsl() / hsla() | hsl(24, 100%, 50%) | INTUITIVO: H es el color, S la intensidad, L la claridad. | Cuando creas VARIACIONES de un color (hover, active, dark mode). |
Por qué hsl es el futuro
/* Generar variaciones de un naranja con hsl es trivial: */
:root {
--color-primario: hsl(24, 100%, 50%); /* naranja puro */
--color-hover: hsl(24, 100%, 40%); /* más oscuro */
--color-activo: hsl(24, 100%, 30%); /* aún más oscuro */
--color-fondo: hsl(24, 100%, 95%); /* casi blanco anaranjado */
--color-texto: hsl(24, 50%, 20%); /* gris anaranjado oscuro */
}
/* Cambiar TODO el sitio a azul: cambia UN número */
:root {
--color-primario: hsl(220, 100%, 50%); /* azul */
/* el resto se ajusta automáticamente */
}Por qué hsl es poderoso
El administrador aún no ha insertado un video para esta sección.
1.5.6 Tipografía: legibilidad primero
El 95% de la web es texto. Una buena tipografía hace que tu contenido se lea cómodo, rápido, y sin esfuerzo. Una mala tipografía hace que el usuario huya a los 5 segundos, independiente de lo bueno que sea tu contenido.
Las 5 propiedades clave
/* Familia tipográfica: incluye SIEMPRE fallbacks */
body {
font-family: 'Inter', 'Helvetica Neue', Arial, sans-serif;
}
/* Tamaño: usa rem, no px */
body { font-size: 1rem; } /* 16px por defecto */
h1 { font-size: 2.5rem; } /* 40px */
h2 { font-size: 1.875rem; } /* 30px */
small { font-size: 0.875rem; } /* 14px */
/* Peso: 100-900, usa los que la fuente tenga */
h1 { font-weight: 700; } /* bold */
p { font-weight: 400; } /* normal */
/* Altura de línea: 1.5 a 1.7 para texto corrido */
body { line-height: 1.6; }
h1 { line-height: 1.2; } /* títulos más compactos */
/* Espaciado entre letras: sutil pero importante */
h1 { letter-spacing: -0.02em; } /* títulos grandes: un poco menos */
p { letter-spacing: 0; }
small { letter-spacing: 0.02em; } /* texto pequeño: un poco más */Las 5 propiedades de tipografía
Google Fonts: tipografías gratis y legales
No uses Comic Sans en un sitio profesional. Pero tampoco te limites a 'Times New Roman' y 'Arial'. Google Fonts ofrece más de 1500 familias tipográficas gratuitas y optimizadas para la web. Las más populares en 2024-2025:
| Familia | Estilo | Ideal para |
|---|---|---|
| Inter | Sans-serif moderna y muy legible. | Cuerpo de texto en sitios profesionales. |
| Roboto | Sans-serif geométrica (Google). | Apps, dashboards, interfaces. |
| Poppins | Sans-serif geométrica con personalidad. | Títulos, landing pages, branding moderno. |
| Merriweather | Serif diseñada para pantalla. | Blog posts, lecturas largas, contenido editorial. |
| JetBrains Mono | Monoespaciada para programadores. | Bloques de código, datos tabulares. |
El administrador aún no ha insertado un video para esta sección.
📚 Contenido ampliado
Material adicional, referencias externas verificadas y ejemplos extendidos.
🤖 AI Mission
La IA sugiere, tú decides. El estilo es identidad, no autocompletado.
Misión: Toma la página 'Sobre mí' del Tema 1.3 (sin estilos, o con los estilos básicos que le pusiste). Pídele a la IA que te sugiera una paleta de colores y tipografía coherente con un tema (ej: 'minimalista y profesional', 'juvenil y creativa', 'editorial y seria'). Después implementa SOLO lo que TÚ entiendas y te guste. Modifica al menos 2 cosas de lo que sugirió la IA. El estilo es tuyo, no de la herramienta.
Pasos sugeridos
- Abre tu página 'Sobre mí' sin estilos o con estilos mínimos.
- Piensa 5 minutos: ¿qué personalidad quieres? (minimalista, juvenil, editorial, técnica). Anota 3 adjetivos en tu cuaderno.
- Pídele a la IA: 'Sugiere una paleta de 3 colores y 2 familias tipográficas para una página personal con personalidad [tus adjetivos]. Justifica cada elección. Dame los valores en hex y los nombres de Google Fonts.'
- Revisa las sugerencias. ¿Te gustan? ¿Hay algo que cambiarías?
- Implementa en tu CSS: define custom properties en :root, aplica la paleta y tipografía.
- Modifica AL MENOS 2 cosas de lo que sugirió la IA (un color, una fuente, un tamaño). Es tu firma personal.
- Verifica accesibilidad: el contraste texto/fondo debe ser 4.5:1 mínimo. Usa WebAIM Contrast Checker.
- Anota en tu cuaderno, bajo 'Estilo personal vs IA': qué tomaste, qué cambiaste, por qué.
📓 Entregable: Captura de tu página 'Sobre mí' con la nueva paleta + tipografía, captura del WebAIM Contrast Checker mostrando el contraste de tu combinación principal, y media página de cuaderno justificando tus elecciones de estilo.
🚫 Errores típicos de razonamiento
Por qué: Parece 'más fácil' al inicio, pero destruye la separación entre estructura y presentación. Cambiar el color de los 50 botones de tu sitio requiere tocar 50 archivos HTML en vez de 1 línea de CSS. Además, los estilos inline tienen MAYOR especificidad que cualquier selector CSS, así que sobreescribirlos después se vuelve un infierno.
Por qué: El Box Model estándar (content-box) hace que un elemento con width:200px + padding:20px + border:5px mida 250px de ancho real, no 200. Esto confunde a casi todos los principiantes. El reset universal (* { box-sizing: border-box; }) hace que el width sea LO QUE PIDES, y se acabó el conflicto. Es uno de los primeros resets que debes aplicar.
Por qué: Los IDs tienen MUY alta especificidad: una clase no puede sobreescribir un estilo aplicado por ID. Terminas con !important por todos lados intentando 'ganar' al ID. Reserva los IDs para anclas (href='#menu') y para JavaScript (getElementById). Para estilos, usa SIEMPRE clases.
Por qué: Tu pantalla puede estar calibrada distinta a la del usuario. Ese gris que 'se ve bien' para ti puede ser INVISIBLE para alguien con luz solar en la pantalla o baja visión. WCAG exige 4.5:1 para texto normal. Herramientas gratuitas: WebAIM Contrast Checker, axe DevTools, Lighthouse Accessibility. Verifica SIEMPRE antes de dar por bueno un color.
Por qué: Cada familia de Google Fonts pesa entre 50 y 200 KB. Si cargas 5 familias en 4 pesos cada una, son 10 peticiones HTTP y ~1 MB extra que el usuario paga en tiempo de carga. Carga solo lo que uses. Si solo usas Inter Regular y Bold, no cargues Inter Light, Medium y Black. Y considera self-hosting las fuentes en producción.
🧪 Laboratorio práctico
Estilo es identidad. Define la tuya antes de pedirla a la IA.
Laboratorio: Estilizar la página 'Sobre mí' con CSS3 profesional
Objetivo: Tomar la página 'Sobre mí' del Tema 1.3 y darle estilo profesional con CSS3 externo: paleta coherente, tipografía legible, espaciado consistente, y que pase la auditoría de accesibilidad.
Pasos
- Crea una carpeta css/ y dentro un archivo estilos.css.
- Enlaza el CSS en tu HTML con <link rel='stylesheet' href='css/estilos.css'> en el <head>.
- Aplica el reset universal (* { box-sizing: border-box; margin: 0; padding: 0; } y font: inherit).
- Define tu paleta en :root usando custom properties (--color-primario, --color-fondo, --color-texto, etc.). Usa hsl() para que las variaciones sean fáciles.
- Carga UNA o DOS familias de Google Fonts (con <link rel='preconnect'> y <link rel='stylesheet'>). Solo los pesos que uses.
- Aplica la tipografía al body (font-family, font-size: 1rem, line-height: 1.6).
- Estiliza los encabezados (h1, h2, h3) con tamaños en rem y colores de tu paleta.
- Estiliza los enlaces con los 4 estados (:link, :visited, :hover, :focus-visible) y focus visible SIEMPRE.
- Dale un ancho máximo al main (max-width: 70ch; margin: 0 auto) para que el texto no se estire en pantallas grandes.
- Estiliza las imágenes: max-width: 100%; height: auto; para que sean responsive.
- Estiliza las <figure> y <figcaption> con tipografía más pequeña e italic.
- Verifica contraste con WebAIM Contrast Checker: tu combinación texto/fondo debe dar 4.5:1 mínimo.
- Ejecuta Lighthouse > Accessibility. Debe dar 95+.
- Prueba la página en móvil con DevTools (Toggle device toolbar). El texto debe ser legible sin hacer zoom.
- Haz commit: 'style: aplico CSS3 profesional con paleta y tipografía'.
📓 Entregable: Capturas de: (1) tu página con el nuevo estilo, (2) el archivo CSS mostrando las custom properties, (3) WebAIM Contrast Checker, (4) Lighthouse Accessibility 95+, (5) vista en móvil en DevTools, (6) commit final en Git.