Los tres selectores

El selector decide a qué elementos se aplica la regla. Con estos tres resuelves casi todo.

SelectorSe escribeA qué apunta
Por etiquetap { }A todos los elementos de ese tipo
Por clase.destacado { }A los que tengan class="destacado"
Por id#titulo { }Al único elemento con id="titulo"

El punto y la almohadilla no son decoración: son lo que le dice al navegador si busca una clase o un id.

<h1 id="titulo">Mi sitio</h1>
<p class="destacado">Oferta</p>
<p>Texto normal</p>
p {
  color: #0a6e88;
} /* los dos párrafos */
.destacado {
  background: #fcf2d3;
} /* solo el de la clase */
#titulo {
  color: #f26a1b;
} /* solo el h1 */

Usa clases casi siempre

La clase es la herramienta principal: tú decides a qué elementos se la pones, y se puede repetir en todos los que quieras.

El id se reserva para algo verdaderamente único, y recuerda que no puede repetirse en la página. Si dudas entre clase e id, es clase.

Combinar selectores

Dos selectores separados por un espacio significan “dentro de”:

.tarjeta h2 {
  color: #0a6e88;
}

Eso apunta a los h2 que estén dentro de un elemento con class="tarjeta". Los h2 de fuera no se tocan.

Estados: :hover

Un elemento puede verse distinto según lo que haga el usuario. El más útil es :hover, que se aplica mientras el cursor está encima.

nav a {
  color: #1b1a19;
}
 
nav a:hover {
  color: #12a5ce;
}

Un enlace sin :hover se siente roto

Es la señal de que algo se puede pulsar. Cuesta dos líneas y es la diferencia entre un menú que responde y uno que parece una imagen.

:focus, cuando se llega con el teclado

:focus se aplica al elemento que tiene el foco: aquel en el que va a escribir el teclado. Se llega a él con la tecla Tab, no con el ratón.

input:focus,
textarea:focus,
select:focus {
  border-color: #12a5ce;
  outline: 3px solid #e2f3f9;
}
 
nav a:focus {
  outline: 3px solid #12a5ce;
}
Se pone enCuándo se activa
input, textarea, selectAl hacer clic dentro o llegar con Tab
a, buttonAl llegar con Tab

Nunca escribas outline: none sin poner nada en su lugar

a:focus { outline: none; }   /* NO */

El outline es el recuadro que marca dónde está el foco. Quitarlo deja a quien navega con teclado sin saber en qué elemento está: es como usar el sitio con el cursor del ratón invisible.

Si el recuadro por defecto no te gusta, cámbialo, no lo borres.

:focus-visible, el foco solo para el teclado

Con :focus, un botón queda marcado también después de hacer clic con el ratón, y a veces se ve raro. :focus-visible se aplica solo cuando se llegó con el teclado:

button:focus-visible {
  outline: 3px solid #12a5ce;
}

Es la forma moderna de marcar el foco. Para empezar, :focus está bien; en Tailwind vas a ver las dos (focus: y focus-visible:).

Escribe siempre los dos juntos

nav a:hover,
nav a:focus {
  color: #12a5ce;
}

Lo que se ve con el ratón debe verse también con el teclado. Separando los selectores con una coma, la misma regla sirve para los dos.

:active, mientras se mantiene pulsado

:active dura solo el instante en que el botón del ratón está apretado, entre que se presiona y se suelta. Es el “clic” visible.

button:active {
  background-color: #0a6e88;
}

Para qué sirve algo que dura medio segundo

Es la confirmación de que el clic llegó. Sin él, en una conexión lenta el usuario no sabe si apretó bien y vuelve a hacer clic, enviando el formulario dos veces.

Los cuatro estados, juntos

nav a              { color: #1b1a19; }  /* normal */
nav a:hover        { color: #12a5ce; }  /* cursor encima */
nav a:focus        { outline: 3px solid #12a5ce; }  /* foco de teclado */
nav a:active       { color: #0a6e88; }  /* mientras se pulsa */
EstadoSe activaCon qué se maneja
:hoverEl cursor está encimaRatón
:focusEl elemento tiene el focoTeclado (Tab)
:activeMientras se mantiene pulsadoRatón y teclado
:visitedUn enlace ya visitadoHistorial del navegador

Los enlaces tienen además dos estados propios: :link es un enlace que todavía no visitas, y :visited uno que ya visitaste (el morado que trae el navegador por defecto).

El orden importa cuando se combinan en un enlace

Si escribes :hover después de :active, el estado de pulsado nunca se ve: el cursor sigue encima mientras aprietas, y a igual especificidad gana la regla de más abajo.

El orden que funciona es :link, :visited, :hover, :focus, :active.

Pruébalos sin tocar el ratón

Carga tu página, aparta la mano del ratón y recorre el sitio entero solo con Tab y Enter. Si en algún momento no sabes dónde estás parado, te falta :focus.

La cascada: cuándo gana cada regla

La C de CSS es de Cascading, en cascada. Explica qué pasa cuando dos reglas dicen cosas distintas sobre el mismo elemento.

p {
  color: black;
}
.destacado {
  color: red;
}
<p class="destacado">¿De qué color soy?</p>

Rojo. Gana la regla más específica.

Qué selector le gana a cuál

   MAS FUERTE
       ^
       |     #titulo        por id         100
       |     .tarjeta       por clase       10
       |     p              por etiqueta     1
       v
   MAS DEBIL
Si chocan…Gana
Un id y una claseEl id
Una clase y una etiquetaLa clase
Dos reglas con la misma especificidadLa escrita más abajo en el archivo

"Le puse el color y no me hace caso"

Es la queja número uno de quien empieza, y casi siempre es la cascada. Revisa en este orden:

  1. ¿Hay otra regla más específica pintándolo de otro color?
  2. ¿Hay una regla igual más abajo en el archivo que la pisa?
  3. ¿Hay un style="…" en el HTML? Ese gana por encima de todo.

En el inspector del navegador las reglas que perdieron aparecen tachadas: ahí se ve de un vistazo cuál ganó.

Existe !important, y es una trampa

p {
  color: red !important;
}

Salta toda la cascada y gana siempre. El problema es que el siguiente estilo que no se aplique va a necesitar otro !important, y en dos semanas el archivo es inmanejable. Si necesitas !important, casi siempre lo que falla es el selector.

El inspector del navegador (F12)

El navegador trae una herramienta para ver qué CSS le llega a cada elemento. Se abre con F12 (o clic derecho sobre cualquier cosa → Inspeccionar).

PanelQué muestraPara qué lo usas
ElementosEl HTML de la página, como árbolSeleccionar el elemento que se ve mal
EstilosTodas las reglas que apuntan a ese elementoVer cuál ganó y cuáles perdieron (tachadas)
Caja (Computed)El dibujo del modelo de caja con sus medidasSaber cuánto mide de verdad el padding, el border y el margin
Modo dispositivo (Ctrl + Shift + M)La página en el ancho de un teléfonoProbar el diseño responsivo sin un celular

En el panel de estilos puedes además cambiar valores en vivo: haz clic sobre un color o un tamaño, escribe otro y mira el resultado al instante. Nada de eso se guarda en tu archivo; sirve para probar antes de escribir.

Ante la duda, F12 antes que adivinar

Cuando un estilo no se aplica, selecciona el elemento y mira el panel de estilos:

  • Si tu regla no aparece, el selector no apunta a ese elemento (o el CSS no está enlazado).
  • Si aparece tachada, otra regla le ganó, y justo encima está cuál.
  • Si aparece con un ícono de advertencia, el valor está mal escrito.

Propiedades del texto

PropiedadQué haceEjemplo
colorEl color del textocolor: #e03131;
font-sizeEl tamaño de la letrafont-size: 40px;
font-familyLa tipografíafont-family: Archivo, sans-serif;
font-weightEl grosor: 400 normal, 700 negritafont-weight: 700;
line-heightEl espacio entre líneasline-height: 1.5;
text-alignAlinea dentro de su caja: left, center, righttext-align: center;
text-transformMayúsculas o minúsculas sin tocar el HTMLtext-transform: uppercase;
text-decorationEl subrayado. none lo quitatext-decoration: none;

font-family siempre lleva respaldo

font-family: Archivo, sans-serif; (si la primera no está disponible, el navegador usa la siguiente). La última siempre es una genérica: sans-serif, serif o monospace.

line-height: 1.5 es el cambio que más se nota

Un párrafo con las líneas pegadas cansa la vista. Subirlo a 1.5 mejora la lectura más que cualquier otra propiedad, y cuesta una línea.

Va sin unidad: 1.5 significa “vez y media el tamaño de la letra”, así que se ajusta solo si cambias el font-size.

text-decoration: none quita el subrayado de los enlaces

Los <a> vienen subrayados por defecto. En un menú sobra, porque ya se entiende que son enlaces; dentro de un párrafo conviene dejarlo, porque ahí el subrayado es lo que distingue el enlace del texto normal.

Fondo, bordes y tamaño

PropiedadQué haceEjemplo
background-colorEl color de fondo de la cajabackground-color: #e2f3f9;
borderGrosor, estilo y color, juntosborder: 3px solid #12a5ce;
border-radiusRedondea las esquinasborder-radius: 12px;
width / heightAncho y alto de la cajawidth: 220px;
paddingRelleno internopadding: 24px;
marginEspacio exteriormargin: 16px;

padding y margin son el corazón del modelo de caja, y tienen su propia página.

background-color pinta la caja, no el texto

Es el error de lectura más frecuente al empezar: el fondo cubre todo el rectángulo del elemento, incluido el padding. El color del texto es color.

Cómo se escriben los valores

Colores

FormaEjemploCuándo
Por nombrered, blueRápido para probar. Son pocos y poco precisos
Hexadecimal#12a5ceEl más usado: control exacto, se copia del diseño
rgb()rgb(242, 106, 27)Por cantidad de rojo, verde y azul

Cómo leer un hexadecimal

#12a5ce son tres pares: 12 de rojo, a5 de verde, ce de azul, cada uno de 00 a ff. Por eso #000000 es negro y #ffffff es blanco.

Cuando los tres pares tienen sus dos cifras iguales se puede abreviar: #ffffff es #fff.

Medidas

UnidadQué significaEjemplo
pxTamaño fijo en píxelesfont-size: 24px;
%Relativo al contenedorwidth: 50% es la mitad del ancho del padre
remRelativo al tamaño de letra de la páginafont-size: 1.5rem; son 24 px

1rem son 16 px, y es la base de Tailwind

El navegador parte con una letra de 16 px, así que 1rem = 16px, 2rem = 32px y 0.5rem = 8px. La ventaja: si el usuario agranda la letra en su navegador, todo lo que está en rem crece en proporción, y la página sigue legible.

Toda la escala de espacios de Tailwind está en rem: p-4 es 1rem, o sea 16 px.

No hay que memorizar las propiedades

Son cientos y nadie se las sabe todas. Lo que hay que tener claro es el formato (propiedad: valor;) y dónde buscarlas: MDN Web Docs es la referencia, y buscar en español “mdn css border-radius” siempre llega.

Checkpoint

Intenta responder antes de desplegar cada pregunta.