Parte 3: CSS: el estilo · Lección 11 de 18

#11 Selectores: a quién le das estilo

Elige exactamente qué elementos cambiar con clases, ids, combinaciones y estados como el paso del ratón. 35 min

Selector de etiqueta

Es el que has usado hasta ahora: el nombre de la etiqueta selecciona todos los elementos de ese tipo.

css
p { color: gray; }      /* todos los párrafos */
h2 { color: teal; }     /* todos los h2 */

Es útil para los estilos generales, pero se queda corto en cuanto quieres que solo algunos párrafos sean distintos. Para eso están las clases.

Selector de clase: .nombre

Una clase es una etiqueta que tú pones a los elementos con el atributo class. Luego, en CSS, la seleccionas con un punto delante:

Clases

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado
  • Una clase se puede repetir en todos los elementos que quieras, aunque sean de etiquetas distintas.
  • Un elemento puede tener varias clases, separadas por espacios: class="aviso grande".
Varias clases

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

Selector de id: #nombre

El atributo id es un nombre único en la página (ya lo usaste para los enlaces internos y los formularios). En CSS se selecciona con almohadilla:

css
#portada {
  background: black;
  color: white;
}

Combinar selectores

Agrupar con coma

Si varios selectores comparten estilo, sepáralos con comas y escríbelo una sola vez:

css
h1, h2, h3 {
  font-family: Georgia, serif;
}

Descendientes con espacio

Un espacio entre dos selectores significa «que esté dentro de»:

Descendientes

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

Solo cambian los enlaces que están dentro del <nav>. Igual funciona con clases: .tarjeta h2 selecciona los h2 que hay dentro de algo con clase tarjeta.

Las dos cosas a la vez, sin espacio

Sin espacio, el selector exige que el mismo elemento cumpla las dos condiciones:

css
p.aviso { }          /* párrafos que además tienen la clase aviso */
.boton.peligro { }   /* elementos con la clase boton Y la clase peligro */

Estados: las pseudoclases

Las pseudoclases seleccionan elementos según su estado o su posición. Se escriben con dos puntos:

PseudoclaseSe aplica cuando…
:hoverEl ratón está encima
:focusEl elemento está activo, por ejemplo un campo en el que escribes o un enlace al que llegas con Tab
:activeMientras se hace clic
:first-child / :last-childEs el primer / último hijo de su padre
:nth-child(2)Es el segundo hijo (odd y even para impares y pares)
Pseudoclases

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

Especificidad: qué regla gana

En la lección anterior viste que, a igual importancia, gana la última regla. Pero no todos los selectores son igual de importantes. Cuanto más específico es un selector, más fuerza tiene:

SelectorFuerza
Etiqueta (p)Poca
Clase (.aviso), pseudoclase (:hover)Media
Id (#portada)Mucha
Atributo style="…" en el HTMLMuchísima
La clase gana a la etiqueta

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado

Aunque la regla de p está después, gana .nota porque es más específica. Solo cuando la fuerza es la misma decide el orden.

Errores típicos

  • Olvidar el punto de la clase en CSS (aviso { }) o ponerlo en el HTML (class=".aviso").
  • Escribir class="aviso, grande" con coma. En el HTML, las clases se separan con espacios.
  • Confundir .a .b con .a.b: el espacio significa «dentro de».
  • Nombres de clase con espacios o mayúsculas raras (class="Mi Clase" son dos clases: Mi y Clase).
  • No entender por qué una regla no se aplica. Inspecciona el elemento: la regla perdedora aparece tachada.

Ejercicios

Ejercicio 1: clases para los precios (fácil)

Haz que los dos precios se vean en verde y negrita, y que la oferta tenga además fondo amarillo. No toques las reglas de etiqueta.

Ejercicio 1

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado
Pista

Pon una clase, por ejemplo precio, a los dos <span>, y otra, oferta, al último párrafo.

Solución
html
<p>Precio: <span class="precio">15 €</span></p>
<p>Precio: <span class="precio">30 €</span></p>
<p class="oferta">¡Oferta! Llévate las dos por 40 €.</p>
css
.precio {
  color: green;
  font-weight: bold;
}

.oferta {
  background: yellow;
}

Ejercicio 2: el menú (medio)

Sin añadir clases, haz que los enlaces del <nav> sean blancos sobre fondo negro, sin subrayado (text-decoration: none), y que al pasar el ratón cambien a fondo gold y texto negro. El enlace del párrafo no debe cambiar. Recuerda el foco.

Ejercicio 2

Tab añade una sangría. Pulsa Escape y luego Tab para salir del editor.

Resultado
Pista 1

Necesitas un selector descendiente: los a dentro del nav.

Pista 2

Para el ratón y el teclado, agrupa dos selectores: nav a:hover, nav a:focus.

Solución
css
nav a {
  color: white;
  background: black;
  padding: 6px 10px;
  text-decoration: none;
}

nav a:hover,
nav a:focus {
  background: gold;
  color: black;
}

Ejercicio 3: ¿quién gana? (reto)

Sin probarlo, di de qué color saldrá cada párrafo. Luego cópialo en la zona de pruebas y comprueba.

css
p { color: black; }
.importante { color: red; }
#especial { color: blue; }
p { color: green; }
html
<p>Párrafo A</p>
<p class="importante">Párrafo B</p>
<p class="importante" id="especial">Párrafo C</p>
Pista

Primero mira la fuerza de cada selector; solo si empatan, mira el orden.

Solución
  • A: verde. Solo le afectan las dos reglas de p, con la misma fuerza: gana la última.
  • B: rojo. La clase .importante es más específica que p.
  • C: azul. El id #especial es lo más específico de todo.

Ficha resumen

  • p = etiqueta · .clase = clase (reutilizable) · #id = id (único).
  • a, b = los dos · a b = b dentro de a · a.b = el mismo elemento con las dos condiciones.
  • Pseudoclases: :hover, :focus, :active, :first-child, :nth-child().
  • Especificidad: etiqueta < clase < id < style. A igual fuerza, gana la última.
  • Da estilo con clases y nombres que digan qué es el elemento.

Glosario

TérminoDefinición
ClaseNombre que se da a uno o varios elementos con el atributo class para darles estilo. En CSS se escribe con punto: .nombre.
Selector de idSelector que elige el único elemento con un id. Se escribe con almohadilla: #nombre.
Selector descendienteSelector con un espacio, como nav a, que elige elementos que están dentro de otros.
PseudoclaseSelector que elige elementos según su estado o posición, como :hover o :first-child.
EspecificidadFuerza de un selector, que decide qué regla gana cuando varias chocan.
FocoEstado del elemento activo, el que recibe lo que escribes o al que llegas con la tecla Tab.

Comprueba lo que has aprendido

Responde sin mirar arriba. Si fallas alguna, la explicación te dice por qué.

Pregunta 1 de 6

¿Cómo seleccionas todos los elementos con class="destacado"?

¿Lo tienes claro?

Si has hecho los ejercicios y aciertas el test, márcala como estudiada y pasa a la siguiente.