Posiblemente este ha sido siempre mi tendón de Aquiles a la hora de conseguir entender, interpretar o escribir propiedades CSS.
Voy a tratar de esquematizar el funcionamiento de los selectores de la forma más sencilla posible e incluir información adicional al respecto.
Selectores básicos
Selector universal
El selector universal es el símbolo de asterisco * y se aplica a todos los elementos de forma universal.
* { color: #181818; }
Selector de tipo
Type selector, es el selector de elemento, que hace referencia al nombre de la etiqueta
div { /* propiedades para los div */ } p { /* Propiedades para los párrafos */ }
Selector de clase
Class selector o selector de clase, se indican con un punto delante de la clase
.titulo { /* propiedades aplicables a la clase título */ }
Selector ID
ID Selector, selector de id o de nombre, son similares a las clases:
#cabecera { /* propiedades aplicables a la id cabecera */ }
Selector de grupo
Group selector o selector de grupo, permite asignar las mismas propiedades a varias clases:
h1, h2 { color: blue; } .titulo1, .titulo2{ color: blue; } /* Permite incluso combinar distintos tipos*/ #titulo1, .titulo2{ color: blue; }
Selectores encadenados
Chaining selectors, selectores encadenados o combinados, se aplican a elementos que combinan a la vez varios selectores, ya sean clases o id’s.
/* dos o mas clases*/ .grupo.principal{ color: blue; } /* clase + id */ .grupo#titulo2{ color: red; }
Combinador descendente
Permite la combinacion de cualquier hijo, siempre que lo sea de un determinado padre.
Se aplica a un elemento de clase .hijo siempre que este anidado en un elemento de clase .padre
El anidamiento puede ser de más de dos elementos.
.padre .hijo { color: blue; }
Selectores Avanzados
Combinaciones padre, hijo y hermano
Aquí encontramos tres posibilidades
- Combinación hijo:
>
- Combinación adyacente o hermano:
+
- Combinación general hermano:
~
See the Pen
CSS Selectors by Juanjo Carballo (@crivinoiax)
on CodePen.
Pseudo-selectores
Al hablar de pseudo-selectores, hay que distinguir entre pseudo-clases cuyo prefijo es el doble punto <:> para hacer referencia a elementos que ya existen en el código HTML y pseudo-elementos precedidos por dos dobles puntos <::>, haciendo referencia a elementos que no existen en el marcado HTML como se detalla a continuación:
Pseudo-classes
Es una forma de referenciar elementos HTML de diferentes maneras, por la posición dentro del código o por su estructura, e incluso por el estado o como se interactúa con el elemento.
Un interesante artículo que aclara aspectos relacionados con este tema: Specifics on CSS Specificity | CSS-Tricks – CSS-Tricks
Dynamic and User Action Pseudo-classes
:focus
-> Elemento que tiene el foco en el momento actual, o que está seleccionado.:hover
-> Elemento que se encuentra bajo el puntero del ratón.:active
-> Elemento que está siendo clickado por el ratón.:visited
-> Elemento que ya ha sido clickado.
Structural Pseudo-classes
- :root -> representa el elemento más alto en el arbol de elementos, un elemento sin padre. Similar al elemento <html> pero con algunas diferencias.
- :first-child – :last-child -> Primer y último elemento hijo.
- :empty -> Elemento sin hijos.
- :only-child -> Elemento que no tiene hermanos.
- :nth-child -> es una pseudo-clase flesible que admite distintas posibilidades:
.myList:nth-child(5) {/* Selecciona el quinto elemento de la clase myList */} .myList:nth-child(3n) { /* Selecciona cada tercer elemento de la clase myList */} .myList:nth-child(3n + 3) { /* Selecciona cada tercer elemento de la clase myList, empezando por el tercero */} .myList:nth-child(even) {/* Selecciona cada elemento par en la clase myList */}
Pseudo-elements
Similares a las pseudo-clases, pero con un ámbito más abstracto, entre otros, algunos de los más comúnmente utilizados.
::marker
-> permite personalizar el estilo de los elementos<li>
, viñetas o números.::first-letter
o::first-line
-> permiten personalizar la primera letra o línea de un texto respectivamente.::selection
-> permiten aplicar estilo al resaltado de texto, cuando es seleccionado por el usuario.::before
o::after
-> permiten añadir elementos extra mediante html, antes o después de un determinado elemento.
En el siguiente enlace, se puede acceder a una lista completa de pseudo-elementos: Pseudo-elements – CSS: Cascading Style Sheets | MDN (mozilla.org)