De básico a avanzado - Con ejemplos interactivos
Los selectores básicos son la base de CSS. Permiten seleccionar elementos de forma simple y directa.
Todos los elementos tienen borde punteado
Incluyendo este spanEste es un párrafo
Este es otro párrafo
Párrafo normal
Párrafo destacado
Párrafo normal
Los selectores combinados permiten seleccionar elementos basándose en su relación con otros elementos.
Este párrafo está dentro de un div (será rojo)
Este párrafo también está dentro del div, aunque anidado (será rojo)
Este párrafo NO está dentro de un div (no se aplica)
Este párrafo es hijo directo del div (fondo azul)
Este párrafo NO es hijo directo del div (no se aplica)
Este también es hijo directo (fondo azul)
Este párrafo viene justo después del h3 (fondo verde)
Este párrafo NO viene inmediatamente después del h3 (no se aplica)
Primer párrafo después del h3 (borde morado)
Segundo párrafo después del h3 (borde morado)
Tercer párrafo después del h3 (borde morado)
Permiten seleccionar elementos basándose en sus atributos y valores.
Seleccionan elementos basándose en su estado actual.
Pasa el ratón sobre este enlace
Seleccionan elementos basándose en su posición en el DOM.
Primer párrafo (azul, grande)
Segundo párrafo
Último párrafo (cursiva, gris)
Selectores más complejos para casos específicos.
Párrafo normal (gris)
Párrafo especial (naranja)
Otro párrafo normal (gris)
Párrafo normal
Seleccionan elementos basándose en su estado actual.
Pasa el ratón sobre este enlace
Seleccionan elementos basándose en su posición en el DOM.
Primer párrafo (azul, grande)
Segundo párrafo
Último párrafo (cursiva, gris)
Selectores más complejos para casos específicos.
Párrafo normal (gris)
Párrafo especial (naranja)
Otro párrafo normal (gris)
Párrafo normal
La pseudo-clase :has() es una de las características más potentes y
esperadas de CSS.
Permite seleccionar un elemento si contiene otro elemento específico (o
si le sigue
otro elemento).
Aunque a menudo se le llama "selector padre" (porque permite estilar al padre basándose en sus hijos), es mucho más versátil. Funciona como un condicional: "Aplica estos estilos SI se cumple esta condición".
.card) de forma diferente si contiene una
imagen
(.card:has(img)).form:has(input:invalid))..container:has(:focus)).h1:has(+ p)).Este div tiene un párrafo dentro.
Tanto :where() como :is() se utilizan para agrupar selectores y
reducir la
repetición de código. Sin embargo, tienen una diferencia crucial en cuanto a la
especificidad.
¿Cuándo usar :where()? Es ideal para crear estilos base o "defaults" en
librerías o
resets CSS. Al tener especificidad 0, cualquier otro estilo que escribas después
sobrescribirá
fácilmente estos estilos sin necesidad de usar !important o selectores más
complejos.
Los pseudo-elementos permiten estilizar partes específicas de un elemento.
Párrafo con ::before (flecha al inicio)
Párrafo con ::after (check al final)
Este es un párrafo de ejemplo que demuestra el uso de pseudo-elementos. La primera línea aparece en negrita y con un color diferente. Además, la primera letra es mucho más grande y flota a la izquierda del texto, creando un efecto de letra capital.
Selecciona este texto para ver ::selection
Cuando múltiples reglas CSS apuntan al mismo elemento, la especificidad determina cuál se aplica.
La especificidad se calcula como: (inline, IDs, clases/atributos/pseudo-clases, elementos/pseudo-elementos)
* 0,0,0,0
p 0,0,0,1
.clase 0,0,1,0
#id 0,1,0,0
div p 0,0,0,2
div.clase p 0,0,1,2
#id .clase p 0,1,1,1
style="..." 1,0,0,0
| Categoría | Selector | Sintaxis | Descripción |
|---|---|---|---|
| Básicos | Universal | * |
Todos los elementos |
| Elemento | p |
Elementos de tipo específico | |
| Clase | .clase |
Elementos con class="clase" | |
| ID | #id |
Elemento con id="id" | |
| Agrupación | h1, h2 |
Múltiples selectores | |
| Combinados | Descendiente | A B |
B dentro de A (cualquier nivel) |
| Hijo directo | A > B |
B hijo directo de A | |
| Hermano adyacente | A + B |
B inmediatamente después de A | |
| Hermanos generales | A ~ B |
Todos los B después de A | |
| Atributo | Existe | [attr] |
Tiene el atributo |
| Igual | [attr="val"] |
Valor exacto | |
| Contiene | [attr*="val"] |
Contiene el valor | |
| Estado | Hover | :hover |
Al pasar el ratón |
| Focus | :focus |
Cuando tiene el foco | |
| Checked | :checked |
Input marcado | |
| Disabled | :disabled |
Input deshabilitado | |
| Estructurales | Primer hijo | :first-child |
Primer elemento hijo |
| Último hijo | :last-child |
Último elemento hijo | |
| Enésimo hijo | :nth-child(n) |
Enésimo elemento hijo | |
| Primer tipo | :first-of-type |
Primer elemento del tipo | |
| Vacío | :empty |
Elemento sin hijos | |
| Avanzados | Negación | :not(selector) |
No coincide con selector |
| Coincidencia | :is(s1, s2) |
Coincide con alguno | |
| Has | :has(sel) |
Si contiene selector | |
| Where | :where(sel) |
Coincidencia (esp. 0) | |
| Pseudo-elementos | Antes | ::before |
Contenido antes del elemento |
| Después | ::after |
Contenido después del elemento | |
| Primera línea | ::first-line |
Primera línea de texto | |
| Primera letra | ::first-letter |
Primera letra | |
| Selección | ::selection |
Texto seleccionado |