🎨 Curso CSS · Nivel N1 Principiante total

Bloque 1: Fundamentos del estilo

Aquí empieza el diseño: descubrirás qué es CSS y cómo se conecta con tu HTML, dominarás los selectores, pintarás tus primeros colores y tipografías, y entenderás el modelo de caja, la base sobre la que se construye toda interfaz web.

⏱ ≈ 8 horas 📚 4 lecciones ✍️ 10 ejercicios guiados 📝 Examen final superable (≥ 70 %)
Lección 1 · Teoría

¿Qué es CSS y cómo se aplica?

CSS son las siglas de Cascading Style Sheets (Hojas de Estilo en Cascada). Es el lenguaje que controla la presentación de la web: colores, tamaños, tipografías, espaciados y posición. Si HTML es el esqueleto, CSS es la piel, la ropa y el maquillaje.

⚠️ Ojo: CSS tampoco es un lenguaje de programación (todavía no has visto variables ni lógica). Es un lenguaje de hojas de estilo: declarativo. Le dices al navegador «quiero esto así» y él decide cómo pintarlo.

1.1 · Anatomía de una regla CSS

Toda hoja de estilos está hecha de reglas. Cada regla tiene un selector (¿a quién le hablo?) y un bloque de declaraciones (¿qué le cambio?):

anatomía de una regla
p {
  color: #7c3aed;   /* propiedad : valor ; */
  font-size: 18px;
}

1.2 · Las tres formas de aplicar CSS

Inline, interno y externo
FormaCómo¿Cuándo usarla?
Inline <p style="color:red"> dentro de la etiqueta Solo para pruebas rápidas o emails. Evítala: mezcla estructura y estilo.
Interno Un <style> dentro del <head> Páginas sueltas o ejemplos de aprendizaje.
Externo <link rel="stylesheet" href="styles.css"> La forma profesional: un archivo compartido por todo el sitio.
index.html — interno
<head>
  <style>
    h1 { color: teal; }
  </style>
</head>
✅ index.html — externo (recomendado)
<head>
  <link rel="stylesheet"
        href="styles.css">
</head>

1.3 · La cascada: ¿quién gana cuando hay conflicto?

La «C» de CSS significa cascada. Cuando varias reglas tocan la misma propiedad del mismo elemento, el navegador decide así:

  1. Especificidad: gana la regla más concreta. Orden aproximado: id (#) > clase (.) > etiqueta (p).
  2. Orden: si empatan, gana la que aparece última en el código.
  3. Origen: lo inline pisa casi todo, y !important se salta la cola (¡úsalo solo en emergencias!).
💡 La herencia también ayuda: propiedades de texto como color, font-family o line-height pasan de padres a hijos sin que tengas que repetirlas.
Lección 2 · Teoría

Selectores básicos y combinados

2.1 · Los cinco selectores fundamentales

Si necesitas apuntar a…
SelectorNombreAfecta a…
pEtiqueta / tipoTodos los <p> de la página
.destacadoClaseTodo elemento con class="destacado" (el más usado)
#menuIDEl único elemento con id="menu"
*UniversalTodos los elementos
[type="email"]AtributoElementos con ese atributo y valor
⚠️ Un id debe ser único en la página y pesa mucho en la especificidad. Para estilos reutilizables, piensa en clases primero: .btn sirve para 50 botones, #btnEnviar solo para uno.

2.2 · Agrupar y combinar

selectores.html — ejemplos
/* Agrupación: misma regla para varios selectores */
h1, h2, h3 {
  font-family: "Sora", sans-serif;
}

/* Descendiente: cualquier p DENTRO de .card */
.card p { line-height: 1.6; }

/* Hijo directo: li colgados justo de ul.menu */
ul.menu > li { list-style: none; }

/* Hermano adyacente: el p justo después de un h2 */
h2 + p { margin-top: 0; }
Combinadores
CombinadorLecturaEjemplo
A BB descendiente de A (cualquier profundidad).card p
A > BB hijo directo de Aul > li
A + BB inmediatamente después de Ah2 + p
A ~ BB hermano posterior de A (no obligatorio adyacente)img ~ figcaption
💡 Puedes encadenar condiciones sobre el mismo elemento sin espacios: a.boton.destacado:hover = un <a> con esas dos clases al pasar el ratón.
Lección 3 · Teoría

Colores, tipografías y unidades

3.1 · Cuatro maneras de decir un color

colores.css
.a { color: violet; }              /* nombre */
.b { color: #7c3aed; }           /* hexadecimal (el estándar) */
.c { color: rgb(124, 58, 237); }   /* rojo, verde, azul (0–255) */
.d { color: rgba(124, 58, 237, .5); } /* con transparencia */
  • Hex abreviado: si sus pares se repiten puedes acortarlo: #ffffff → #fff.
  • HSL (tono, saturación, luminosidad) es ideal para crear paletas: hsl(262, 83%, 58%).
  • Herramienta imprescindible: el cuentagotas de las DevTools (F12) para robar colores a cualquier web.

3.2 · Tipografías web

tipografia.css
body {
  font-family: "Inter", "Segoe UI", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.6;       /* sin unidad = multiplicador */
}

h1 {
  font-weight: 800;       /* 100 fino … 900 negro */
  text-align: center;
  letter-spacing: -.02em;
  text-transform: uppercase;
}
💡 Termina siempre la lista con una familia genérica (sans-serif, serif, monospace): es el plan B si ninguna fuente está disponible. Y para fuentes de marca usa servicios como Google Fonts.

3.3 · Unidades: absolutas vs relativas

UnidadSignificadoIdeal para…
pxPíxel fijo (absoluta)Bordes, sombras, detalles finos
%Porcentaje del contenedorAnchos fluidos
emMultiplica la fuente del propio elementoEspaciados ligados al texto local
remMultiplica la fuente de la raíz (16px por defecto)Fuentes, paddings, márgenes
vw / vh1 % del ancho / alto de la ventanaHéroes a pantalla completa
⚠️ Usa rem para tamaños de texto: si el usuario amplía la fuente en su navegador (accesibilidad), toda tu página escala con ella. 1rem = 16px, 1.5rem = 24px, 0.75rem = 12px.
Lección 4 · Teoría

El modelo de caja

Para el navegador, todo elemento es una caja rectangular con cuatro capas, de dentro hacia fuera:

  1. Contenido — el texto o la imagen (lo mide width/height).
  2. padding — aire interior entre contenido y borde.
  3. border — el borde: grosor, estilo y color (1px solid #ccc).
  4. margin — espacio transparente que separa la caja de sus vecinas.
caja.css — tarjeta típica
.card {
  max-width: 360px;
  padding: 24px;                 /* shorthand: los 4 lados */
  border: 1px solid #ddd;
  border-radius: 14px;
  margin: 40px auto;             /* vertical auto = centrada */
  background-color: #fff;
}
Shorthands de margin/padding
Escribo…Significa…
margin: 10px;Los cuatro lados
margin: 10px 20px;Vertical 10 · horizontal 20
margin: 10px 20px 30px;Arriba · lados · abajo
margin: 1px 2px 3px 4px;Sentido horario: arriba, derecha, abajo, izquierda

4.1 · El truco imprescindible: box-sizing

Por defecto, width mide solo el contenido: si añades padding, la caja crece. Con box-sizing: border-box el padding y el borde quedan dentro del ancho declarado, y calcular layouts se vuelve trivial:

❌ content-box (por defecto)
.card {
  width: 300px;
  padding: 20px;
}
/* ocupa 300 + 40 = 340px 😱 */
✅ border-box
* {
  box-sizing: border-box;
}
/* .card ocupa exactamente 300px ✌️ */
💡 Dos rarezas clásicas: los márgenes verticales colapsan (el mayor gana, no se suman) y margin: 0 auto centra cajas con ancho fijo. Lo verás constantemente en código real.
Práctica guiada

✍️ Los 10 ejercicios del bloque

Trabaja sobre una carpeta css-b1/ con tu index.html del curso de HTML (¡ya tienes el esqueleto!) y un archivo estilos.css. Intenta cada ejercicio antes de mirar la solución.

1 Mi primera hoja de estilos

Enlaza estilos.css desde tu index.html y consigue: fondo general gris muy claro, títulos violetas y párrafos en gris oscuro.

Ver solución
/* index.html → <link rel="stylesheet" href="estilos.css"> */
body {
  background-color: #f6f5fa;
}
h1, h2, h3 {
  color: #7c3aed;
}
p {
  color: #444;
}

2 Detective de errores

Este CSS tiene 5 errores. Encuéntralos y corrígelos:

h1 {
  colour: red
  font-size; 32px;
  padding: 20px;
}
// título principal
p {
  color: #333;;
  line-heigth: 1.5;
}
Ver solución
  1. colour no existe: la propiedad es color.
  2. Falta el ; tras red.
  3. font-size; 32px; usa punto y coma en lugar de dos puntos.
  4. Los comentarios CSS van con /* … */, nunca con //.
  5. line-heigth está mal escrito: es line-height.
h1 {
  color: red;
  font-size: 32px;
  padding: 20px;
}
/* título principal */
p {
  color: #333;
  line-height: 1.5;
}

3 Selectores al blanco

Dado este HTML, escribe reglas para: todos los párrafos (gris), solo los párrafos dentro de .noticia (negro), el elemento #principal (borde violeta), y agrupa h2 y h3 en cursiva… ¡sin repetir selectores!

<main id="principal">
  <article class="noticia"><p>Titular…</p></article>
  <p>Párrafo suelto</p>
</main>
Ver solución
p { color: #555; }

.noticia p { color: #111; }

#principal { border: 2px solid #7c3aed; }

h2, h3 { font-style: italic; }

4 Duelo de especificidad

Sin abrir el navegador: ¿de qué color acaba el texto del siguiente párrafo? Justifica cada paso con la cascada.

/* styles.css, en este orden */
p            { color: green; }
.texto       { color: blue; }
#aviso       { color: crimson; }
p.texto      { color: orange; }
.texto       { color: teal; }
<p class="texto" id="aviso">¿De qué color soy?</p>
Ver solución

El elemento acumula etiqueta p + clase .texto + id #aviso. Las reglas con id son las más específicas, así que solo compiten #aviso { crimson } contra… ninguna otra: el resto caen por especificidad. Resultado: crimson 🩸. Sin el id, ganarían p.texto (dos factores) sobre .texto, y entre las dos reglas .texto ganaría la última (teal). Prueba a borrar el id y compruébalo.

5 Paleta corporativa

Define los mismos tonos en tres formatos distintos: fondo del pie en hex, texto del footer en rgb(), y un enlace destacado en hsl() con 60 % de transparencia al hacer hover.

Ver solución
footer {
  background-color: #1e1b29;
  color: rgb(230, 230, 240);
}
footer a {
  color: hsl(262, 83%, 65%);
}
footer a:hover {
  color: hsla(262, 83%, 65%, 0.6);
}

6 Tipografía profesional

Dota al body de una pila de fuentes con fallback genérico, interlineado 1.7, y crea un .kicker: mayúsculas, espaciado entre letras 0.08em, tamaño 0.75rem y peso 700.

Ver solución
body {
  font-family: "Segoe UI", Roboto, Arial, sans-serif;
  line-height: 1.7;
}
.kicker {
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 0.75rem;
  font-weight: 700;
}

7 Escala tipográfica en rem

Convierte esta escala en píxeles a rem (raíz de 16px): 48, 28, 20, 16 y 13 px. Asigna cada medida a h1, h2, h3, p y small respectivamente.

Ver solución
h1   { font-size: 3rem; }     /* 48 / 16 */
h2   { font-size: 1.75rem; }  /* 28 / 16 */
h3   { font-size: 1.25rem; }  /* 20 / 16 */
p    { font-size: 1rem; }
small { font-size: 0.8125rem; } /* 13 / 16 */

8 Tarjeta con modelo de caja completo

Crea un .perfil de 320px máximo, centrado horizontalmente, con padding de 24px, borde gris de 1px, esquinas redondeadas de 16px y margen superior de 40px. Con box-sizing: border-box global.

Ver solución
* { box-sizing: border-box; }

.perfil {
  max-width: 320px;
  margin: 40px auto 0;
  padding: 24px;
  border: 1px solid #ddd;
  border-radius: 16px;
}

9 Menú horizontal elegante

Convierte un <ul class="menu"> en barra horizontal: sin viñetas, elementos en línea con separación de 16px, enlaces sin subrayado y color violeta que oscurece al pasar el ratón.

Ver solución
ul.menu {
  list-style: none;
  padding-left: 0;
}
ul.menu > li {
  display: inline-block;
  margin-right: 16px;
}
ul.menu a {
  text-decoration: none;
  color: #7c3aed;
}
ul.menu a:hover {
  color: #5b21b6;
}

10 🏆 Proyecto integrador: «tarjeta-de-presentacion.html»

Crea una página con una tarjeta de presentación personal estilizada íntegramente desde un <style> interno. Requisitos:

  • Estilos en un <style> dentro del head (nada inline)
  • Selector de clase para la tarjeta y selector de etiqueta para textos
  • color y background-color válidos (hex, rgb o hsl)
  • font-family con familia genérica de respaldo
  • Alguna unidad relativa (rem, em o %)
  • Modelo de caja visible: margin, padding y border
  • Comentarios /* … */ explicando tus reglas
  • Ni un solo !important

Este ejercicio es exactamente el reto del laboratorio: la plantilla incluye un !important inline heredado que deberás migrar al <style> del head antes de empezar a estilar.

Evaluación del bloque

📝 Examen del Bloque 1

Dos partes: un test teórico autoevaluable (necesitas un mínimo de 70 % para superar el bloque) y un reto práctico de autocorrección con checklist.

Parte A · Test teórico (aprueba con 9/12)

1 · ¿Qué significan las siglas CSS?
2 · En la arquitectura de una página, CSS se encarga de…
3 · ¿Dónde debe vivir un bloque <style> interno?
4 · ¿Cómo se escribe un selector de clase?
5 · ¿Y un selector de ID?
6 · Si tres reglas distintas apuntan al mismo elemento, gana…
7 · Ordena de MAYOR a MENOR especificidad:
8 · ¿Qué selector afecta a los <p> que están DENTRO de .card?
9 · ¿Cuál es un color hexadecimal válido?
10 · ¿Qué unidad escala con el tamaño de fuente raíz?
11 · El modelo de caja, de dentro hacia fuera, es…
12 · ¿Qué consigue box-sizing: border-box?

Parte B · Reto práctico final

Construye el ejercicio 10 («tarjeta-de-presentacion.html») sin mirar la solución y valida tú mismo/a estos criterios. Mínimo para aprobar: 7 de 8 casillas.

Cumplidos: 0 / 8

🎉 ¿Superaste las dos partes? Enhorabuena: has aprobado el Bloque 1 de CSS. Ya sabes dar color, tipografía y espacio a tus páginas. El Bloque 2 te espera con Flexbox, Grid y diseño responsive.