Introducción a CSS
💡 🎯 Al terminar esta lección podrás…
- Escribir reglas CSS con selector, propiedad y valor.
- Enlazar un archivo de estilos a tus páginas.
- Aplicar color, tipografía, espacios y bordes con el modelo de caja.
- Acomodar elementos con flexbox y adaptar el diseño a pantallas pequeñas.
1.Qué es CSS
CSS (Cascading Style Sheets, «hojas de estilo en cascada») es el lenguaje que define cómo se ve el HTML: colores, tipografía, tamaños, espacios y posición. HTML dice qué es cada cosa; CSS dice cómo luce.
Una regla de CSS se compone de un selector (a qué elementos se aplica) y un bloque de declaraciones (qué cambios se hacen):
- Selector:
h1elige todos los títulos de nivel 1. - Propiedad:
colores lo que quieres cambiar. - Valor:
navyes el cambio concreto. - Cada declaración termina en
;y todo el bloque va entre llaves{ }.
💡 Consejo · Prueba valores
Cambia #4f46e5 por crimson, teal o #ff8800. Los colores pueden escribirse con nombres (red), con código hexadecimal (#ff0000) o con rgb(255, 0, 0).
2.Dónde se escribe el CSS
| Forma | Cómo se ve | Cuándo usarla |
|---|---|---|
| Archivo externo | <link rel="stylesheet" href="estilos.css"> | La recomendada. Un archivo sirve a todas las páginas |
Etiqueta <style> | <style> h1 { color: red; } </style> | Pruebas rápidas o una sola página |
| En línea | <p style="color: red;"> | Casos puntuales; evítala por norma |
<head>
<meta charset="UTF-8" />
<title>Mi página</title>
<link rel="stylesheet" href="estilos.css" />
</head>
📌 Nota · El mismo principio que src y href
La ruta de href funciona igual que en los enlaces: si estilos.css está en una carpeta css/, escribirías href="css/estilos.css". Este curso hace justamente eso con assets/estilos.css.
⚠️ Importante · Cascada y orden
Si dos reglas cambian lo mismo, gana la más específica y, si empatan, la que aparece después. De ahí lo de «en cascada». Por eso las reglas generales van arriba y las particulares abajo.
3.Selectores
Los selectores deciden a qué elementos afecta una regla. Estos son los cuatro que usarás el 90% del tiempo:
| Selector | Elige | Ejemplo |
|---|---|---|
| Elemento | Todas las etiquetas de ese tipo | p { … } |
| Clase | Los elementos con class="aviso" | .aviso { … } |
| Identificador | El elemento con id="portada" | #portada { … } |
| Descendiente | Etiquetas dentro de otras | nav a { … } |
- Una clase se puede repetir en muchos elementos; es la herramienta principal de estilo.
- Un id debe ser único en la página; se reserva para enlaces ancla y casos especiales.
- Un elemento puede tener varias clases separadas por espacio:
class="aviso grande".
💡 Consejo · Nombres de clase con sentido
Nombra por el papel que cumple, no por su aspecto: .aviso es mejor que .caja-amarilla, porque si mañana el aviso se vuelve rojo el nombre sigue teniendo sentido.
4.Color y texto
| Propiedad | Qué controla | Ejemplo |
|---|---|---|
color | Color del texto | color: #1e2235; |
background-color | Color de fondo | background-color: #f7f8fc; |
font-family | Tipo de letra | font-family: Georgia, serif; |
font-size | Tamaño | font-size: 1.1rem; |
font-weight | Grosor (negrita) | font-weight: 700; |
line-height | Espacio entre líneas | line-height: 1.7; |
text-align | Alineación | text-align: center; |
text-decoration | Subrayado | text-decoration: none; |
📌 Nota · Unidades
Tienes dos familias: absolutas (px, píxeles) y relativas (rem, em, %). Las relativas se adaptan a las preferencias de la persona (por ejemplo, si agranda su letra), por eso son mejores para texto. 1rem equivale al tamaño base del navegador, normalmente 16 px.
🔍 Ejemplo · Pila de tipografías
font-family: "Segoe UI", Arial, sans-serif; es una pila: el navegador usa la primera disponible y, si no la tiene, pasa a la siguiente. Termina siempre con una familia genérica (serif, sans-serif, monospace).
5.El modelo de caja
En CSS, todo elemento es una caja rectangular, formada por cuatro capas, de adentro hacia afuera:
| Capa | Qué es | Propiedad |
|---|---|---|
| Contenido | El texto o imagen | width, height |
| Relleno | Espacio dentro de la caja, entre el contenido y el borde | padding |
| Borde | La línea que rodea la caja | border |
| Margen | Espacio fuera de la caja, que la separa de las vecinas | margin |
.caja { padding: 10px; } /* los cuatro lados */
.caja { padding: 10px 20px; } /* arriba-abajo | izquierda-derecha */
.caja { padding: 10px 20px 5px 0; } /* arriba, derecha, abajo, izquierda */
.caja { margin: 0 auto; } /* centra horizontalmente un bloque con ancho */
💡 Consejo · Un truco que ahorra dolores de cabeza
Añade al inicio de tu CSS * { box-sizing: border-box; }. Así el padding y el border quedan dentro del width declarado, en vez de sumarse. Todo cuadra mejor.
6.Colocar elementos: flexbox
Flexbox es la herramienta moderna para acomodar elementos en fila o columna. Se activa en el contenedor con display: flex y reparte a sus hijos.
| Propiedad (en el contenedor) | Qué hace |
|---|---|
display: flex | Activa flexbox; los hijos se colocan en una fila |
flex-direction | row (fila) o column (columna) |
gap | Espacio entre los hijos |
justify-content | Alinea en el eje principal: flex-start, center, space-between… |
align-items | Alinea en el eje transversal: center, stretch… |
flex-wrap: wrap | Permite que los hijos pasen a otra línea si no caben |
Recuerdas el menú de la lección 6, una lista dentro de un <nav>? Con cuatro propiedades pasó de lista vertical a barra horizontal. Prueba cambiar justify-content a space-between o flex-direction a column.
🔍 Ejemplo · Tarjetas que se acomodan solas
Con display: flex; flex-wrap: wrap; gap: 16px; en el contenedor, y flex: 1 1 200px; en cada tarjeta, obtienes una cuadrícula que pasa de 3 columnas a 1 en el celular, sin escribir nada más.
7.Estados y transiciones
CSS no solo da forma: también reacciona a lo que hace la persona. Las pseudoclases aplican estilos en ciertos estados:
:hover: cuando el cursor está encima.:focus: cuando el elemento está seleccionado con el teclado o con clic.:active: mientras se pulsa.:first-childy:nth-child(n): por posición.
Con transition el cambio se vuelve suave en lugar de brusco:
⚠️ Importante · No quites el foco
Nunca escribas outline: none sin poner algo equivalente. Quien navega con teclado necesita ver dónde está. :focus-visible muestra el contorno solo cuando hace falta.
📌 Nota · Respeta a quien no quiere animaciones
Algunas personas se marean con el movimiento. El bloque @media (prefers-reduced-motion: reduce) { … } permite desactivarlo. Este curso lo hace con todas sus animaciones.
8.Diseño adaptable
Tu página se verá en pantallas de todo tamaño. Una media query aplica estilos solo si se cumple una condición:
.tarjetas { display: flex; gap: 16px; }
@media (max-width: 600px) {
.tarjetas { flex-direction: column; }
}
Lee: «si la pantalla mide 600 px o menos, apila las tarjetas en columna». Recuerda que para que funcione en celulares necesitas la línea <meta name="viewport" content="width=device-width, initial-scale=1.0"> en el <head>, que ya incluyes desde la lección 1.
💡 Consejo · Diseña primero para el celular
Escribe los estilos base pensando en una pantalla pequeña y usa min-width en las media queries para añadir mejoras en pantallas grandes. Es más sencillo que quitar cosas después.
9.Variables y orden
Las variables CSS guardan un valor para reutilizarlo. Si cambias la variable, cambia todo el sitio:
:root {
--color-principal: #4f46e5;
--radio: 12px;
}
.boton {
background: var(--color-principal);
border-radius: var(--radio);
}
Así está hecho el tema claro y oscuro de este curso: al activar el modo oscuro solo cambian los valores de las variables; el resto del CSS no se toca.
Un orden recomendado para tu CSS
- Variables y reglas globales (
:root,* { box-sizing },body). - Elementos generales:
h1,p,a,img. - Componentes con clase:
.tarjeta,.boton,.menu. - Media queries al final.
10.Errores frecuentes
- Olvidar el
;al final de una declaración, o una llave}: el resto de las reglas deja de funcionar. - Escribir mal una propiedad (
colour,font-colour): el navegador la ignora sin avisar. - Usar
iden vez declasspara estilos repetidos. - Ruta incorrecta en
<link>: si la página no cambia de aspecto, revisa que el archivo CSS se encuentre donde dicehref. - Usar
pxen todo: prefiereremy%para tamaños de texto y espacios. - Quitar el contorno de foco sin reemplazarlo.
- Depender solo del color para transmitir información: añade texto o íconos.
- No usar la herramienta de inspección. Pulsa F12 en el navegador, haz clic derecho sobre cualquier elemento y elige Inspeccionar: verás qué reglas se aplican y podrás probar cambios al instante.
📒 Apuntes para llevar
- CSS define el aspecto; HTML define el contenido y la estructura.
- Una regla es
selector { propiedad: valor; }. - Lo ideal es un archivo
.cssenlazado con<link rel="stylesheet" href="…">en el<head>. - Selectores principales: elemento (
p), clase (.aviso), id (#portada) y descendiente (nav a). - Todo elemento es una caja: contenido,
padding,borderymargin. Usabox-sizing: border-box. display: flex,gap,justify-contentyalign-itemsacomodan elementos en fila o columna.:hover,:focus-visibleytransitiondan interactividad; respetaprefers-reduced-motion.- Las media queries adaptan el diseño al tamaño de pantalla y las variables CSS reutilizan valores.
11.Glosario
| Término | Significado |
|---|---|
| Selector | Parte de una regla que indica a qué elementos se aplica. |
| Propiedad | Característica que se modifica (color, margin…). |
| Declaración | Pareja propiedad: valor;. |
| Clase | Nombre reutilizable que se asigna con class y se selecciona con .. |
| Modelo de caja | Idea de que todo elemento tiene contenido, relleno, borde y margen. |
| Flexbox | Sistema para acomodar elementos en una dimensión (fila o columna). |
| Media query | Condición que activa estilos solo en ciertas pantallas. |
| Pseudoclase | Estado de un elemento (:hover, :focus…). |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿Qué parte de h1 { color: red; } es el selector?
h1 indica a qué elementos se aplica la regla. color es la propiedad y red el valor.
¿Cuál es la forma recomendada de aplicar CSS a varias páginas?
Un archivo externo se escribe una vez y todas las páginas lo comparten.
En el modelo de caja, ¿qué crea espacio dentro de la caja, entre el contenido y el borde?
padding es el relleno interior; margin separa la caja de las demás.
¿Cómo conviertes una lista de enlaces en una barra horizontal?
display: flex en el contenedor coloca a sus hijos en una fila.
¿Qué selector elige elementos con class="aviso"?
Las clases se seleccionan con un punto. El # es para identificadores.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.