Selectores en CSS: Clases, IDs y mĂĄs
Como acabamos de ver, los selectores son la base de CSS: nos permiten elegir qué elementos de una pågina queremos estilizar. Si solo usåramos etiquetas HTML como p
o h1
, pronto nos quedarĂamos cortos, porque no todos los pĂĄrrafos o tĂtulos son iguales. Por eso existen selectores mĂĄs flexibles, como clases, IDs o combinaciones, que nos permiten apuntar a elementos segĂșn su contexto, atributos o posiciĂłn.
Selectores de clase (.class)
Las clases son como etiquetas reutilizables que puedes asignar a cualquier elemento HTML. Son muy prĂĄcticas porque no estĂĄn vinculadas a una etiqueta especĂfica: puedes usarlas en un tĂtulo, un pĂĄrrafo o donde quieras.
CĂłmo funcionan
En CSS defines una clase con un punto (.
) seguido del nombre. En HTML la aplicas al elemento con el atributo class
.
.destacado { color: blue; }
.fondo-gris { background-color: lightgray; }
<h1 class="destacado">TĂtulo en azul</h1>
<p class="destacado fondo-gris">PĂĄrrafo azul con fondo gris</p>
FĂjate que el elemento <p>
tiene dos clases (destacado
y fondo-gris
). En HTML se separan con espacios y puedes usar tantas como necesites.
Clases con etiquetas especĂficas
Si quieres que una clase solo afecte a una etiqueta concreta, combĂnala con el nombre de la etiqueta:
h2.destacado { color: green; }
<h2 class="destacado">TĂtulo verde</h2>
<p class="destacado">PĂĄrrafo no afectado</p>
Seleccionar elementos con mĂșltiples clases
Si un elemento tiene varias clases, puedes seleccionarlo combinando los nombres sin espacios:
p.destacado.fondo-gris { font-weight: bold; }
Esto solo afecta a un <p>
que tenga ambas clases.
Nota: Los nombres de clase distinguen entre mayĂșsculas y minĂșsculas (miClase
no es lo mismo que miclase
). Evita comenzar con nĂșmeros o caracteres raros para asegurar compatibilidad.
Selectores de ID (#id
)
Los IDs son nombres Ășnicos para identificar un solo elemento en la pĂĄgina. Son Ăștiles para estilizar algo especĂfico, como un menĂș o pie de pĂĄgina, y esenciales en JavaScript para seleccionar elementos.
CĂłmo funcionan
En CSS usas #
seguido del nombre del ID. En HTML lo asignas con el atributo id
.
#menu { background-color: navy; color: white; }
<nav id="menu">MenĂș principal</nav>
También puedes combinar el ID con la etiqueta:
nav#menu { padding: 10px; }
Importante:
- Un ID debe ser Ășnico en toda la pĂĄgina.
- Usa clases para estilos reutilizables e IDs para casos Ășnicos.
Selectores contextuales (descendentes)
Cuando quieres estilizar un elemento solo si estĂĄ dentro de otro, usas un selector descendente, separando los nombres por un espacio.
article p { font-size: 16px; }
<article>
<p>Este pĂĄrrafo es 16px</p>
<div>
<p>Este también es 16px</p>
</div>
</article>
<p>Este pĂĄrrafo no se afecta</p>
Nota: Estos selectores son muy Ăștiles, pero pueden impactar el rendimiento si se usan en exceso en estructuras grandes. SĂ© especĂfico.
Nota: Recuerda que elemento elemento
se refiere a un elemento dentro de otro; elemento, elemento
se refiere a los dos elementos
Selectores de hijo directo (>
)
Si solo quieres estilizar los hijos directos (no nietos), usa el sĂmbolo >
.
div > p { color: red; }
<div>
<p>Este pĂĄrrafo es rojo</p>
<section>
<p>Este pĂĄrrafo no es rojo</p>
</section>
</div>
Selectores adyacentes (+
)
Seleccionan el elemento que estå justo después de otro (hermano adyacente).
h2 + p { margin-top: 10px; }
<h2>TĂtulo</h2>
<p>Este pĂĄrrafo tiene margen superior</p>
<p>Este no</p>
Selectores por atributo
Permiten seleccionar elementos en funciĂłn de sus atributos o valores. Muy Ăștil en formularios o enlaces.
input[type="text"] { border: 1px solid gray; }
a[href^="https"] { color: green; }
input[type="text"]
: selecciona campos de texto.a[href^="https"]
: selecciona enlaces que empiecen por âhttpsâ.
También puedes usar:
[attr$="valor"]
: si el atributo termina en "valor". Ej.:[href$=".pdf"]
[attr*="valor"]
: si el atributo contiene "valor". Ej.:[class*="destacado"]
Selector | Coincide si⊠| Ejemplo |
---|---|---|
[attr="valor"] |
El valor es exacto | [type="submit"] |
[attr^="inicio"] |
Empieza por "inicio" | [href^="https"] |
[attr$="final"] |
Termina en "final" | [href$=".pdf"] |
[attr*="parte"] |
Contiene "parte" | [class*="destacado"] |
Selector universal (*
)
El asterisco *
selecciona todos los elementos. Ăsalo con cuidado para no afectar mĂĄs de lo deseado.
.fondo-gris * { color: white; }
<div class="fondo-gris">
<p>Texto blanco</p>
<span>Texto blanco también</span>
</div>
Un toque moderno: :where()
CSS3 introdujo :where()
, un selector para agrupar condiciones sin aumentar la especificidad.
A diferencia de agrupar con comas, :where() aplica estilos sin aumentar la especificidad, lo que ayuda a evitar conflictos difĂciles de resolver.
:where(.destacado, .aviso) { font-weight: bold; }
Este estilo se aplica a cualquier elemento con clase destacado
o aviso
.
Nota histĂłrica
Hace años, CSS1 y CSS2 tenĂan muchas limitaciones (y navegadores poco consistentes). Hoy, todos estos selectores funcionan sin problema en los principales navegadores modernos.