Selectores CSS

Se llama selector a la sintaxis que define a quien se aplicara un grupo de atributos de estilo.

1. Etiquetas

Se puede asignar el estilo a una tipo de etiqueta concreta de HTML, pero hay que tener en cuenta que afectara a todas las que se usen en la pagina. Para ello, en la declaración de estilos escribimos la etiqueta y entre llaves, las propiedades de estilo que deseemos, seguido de dos puntos y el valor seguido de punto y coma.

selector {propiedad: valor;}

Ejemplo: Seleccionamos la etiqueta body.

body { 
   background-color: #f0f0f0;
}

Podemos aplicar el mismo estilo en un conjunto de etiquetas. Para ello, indicamos las etiquetas seguidas por comas (AND) y luego, entre llaves, las propiedades y valores.

h1, h2 { 
   color: red; 
}

En este caso se define que los encabezados de nivel 1 y los párrafos, tengan letra roja.

header, nav, footer{ 
   background-color: #000000; 
   color: #ffffff; 
	border: 1px solid red;
}

Aqui es importante añadir al selector universal * que selecciona a todos las etiquetas.

2. Indices

Se puede definir un estilo especifico para un solo indicador id, para esto el nombre del indicar se preceder de # y en el elemento se asigna el mismo id. Hay que aclara que a diferencia de la clase este estilo solo se puede aplicar una vez.

#indice {propiedad: valor;}
#indice1,#indice2 {propiedad: valor;}
#queso {text-align: center;}

3. Clases

Podemos usar una o mas clases, si deseamos crear un estilo específico, para luego aplicarlo a distintos elementos de la página. Las clases en la declaración de estilos se declaran con un punto antes del nombre de la clase.

.clase {propiedad: valor;}
elemento.clase {propiedad: valor;}
.clase1,.clase2 {propiedad: valor;}
.clase1.clase2 {propiedad: valor;}
.miclase{ 
   color: blue;
}

Para asignar el estilo definido por una clase en un elemento HTML, simplemente se añadir el atributo class a la etiqueta que queremos aplicar dicha clase.

<p class="miclase">Este párrafo tiene el estilo definido en la clase "miclase".</p>

El párrafo anterior se presentaría con color azul. La definición de clases y su uso es sencilla, pero veamos un ejemplo más detallado:

Para la siguiente declaración de estilos:

.inverso { 
   color: #000; 
   background-color: #fff; 
}

Se ha definido un fondo negro y el texto blanco para el cuerpo de la página (body), así como las celdas y los párrafos. Luego se ha declarado una clase, de nombre "inverso", con los colores al revés, es decir, fondo blanco y texto negro.

<body>
<p/gt;Hola esto es un párrafo normal</p/gt;
<p class="inverso">Párrafo con los colores invertidos</p/gt;
<table/> 
<tr/gt; 
   <td class=inverso>INVERSO</td>
   <td>NORMAL</td>
</tr>
</table>
</body>

Esta página tiene el fondo negro y el texto blanco. El primer párrafo, que es un párrafo normal, sigue esa definición general de estilos, pero el segundo párrafo, al que se ha aplicado la clase "inverso", tiene el fondo blanco y el texto en negro. Por lo que respecta a la tabla, en su primera celda se ha asignado la clase "inverso", por lo que se verá con fondo blanco y color de texto en negro. Mientras que la segunda celda, que no tiene asignada ninguna clase, se presentará como se definió en la regla general.

Ejemplo: Selecciona los elementos que pertenezcan a ambas clases a la vez:

.uno.dos { 
   color: #000; 
   background-color: #fff; 
}

4. Atributo

Se puede usar el hecho de que una etiqueta contenga un atributo especifico como selector. Para su definicion en CSS el atributo debe ir entre corchetes.

[atributo] {propiedad: valor;}
[atributo1],[atributo2] {propiedad: valor;}

Ejemplo: Selecciona todas los elementos que contengan el atributo Title.

[Title]{color: red;}

Ejemplo: Selecciona cualquier elemento button sin un atributo DISABLED.

button:not([DISABLED]) {color: red;}

5. Atributo y valor

Se puede usar el hecho de que una etiqueta tenga un valor especifico en un atributo. Para este caso se designa entre corchetes el atributo, luego un simbolo y luego un valor. El simbolo puede ser =, ^= (empieza con), $= (termina con), *= (contiene) o |= (diferente).

[atributo='valor'] {propiedad: valor;}
[atributo1='valor'],[atriburo2='valor'] {propiedad: valor;}
Operadores
OperadorDescripciónEjemplo
$Terminando con.id$=ess
|Que tenga el valor seguido de -id|=mi
^Comenzando conid^=L
~Contiene la palabratitle~=lindo
*Contenga stringid*=s

Ejemplo: Selecciona cualquier elemento cuyo atributo HREF termine en .PDF

[href$='.pdf'] {color: red;}

6. Operadores de pertenencia

Cuando quieres combinar dos o mas selectores.

elemento1,elemento2 {propiedad: valor;}
elemento1 elemento2 {propiedad: valor;}
elemento1 > elemento2 {propiedad: valor;}
elemento1 + elemento2 {propiedad: valor;}
elemento1 ~ elemento2 {propiedad: valor;}
Operadores
OperadorDescripción
,AND. Es un y que implica ambos elementos
 Descendiente. Dentro de otro elemento sin importar que interpongan otros elementos.
>Hijo directo. Dentro de otro elemento, sin otro elemento intermedio.
+Selecciona el primer elemento2 que se coloca inmediatamente después del elementos1.
~Selecciona todos los elementos2 que están precedidos por un elemento1.
*Se refiere a todos los elementos.
notNegación. Invierte la selección.

Ejemplo: Selecciona todos los elemento p que están incluidos en un elemento div.

div p {color: red;}
div > p {color: red;}
.uno .dos {color: blue;}

Ejemplo: Selecciona cualquier elemento p que es descendiente de un elemento li que es descendiente de un elemento ol que es hijo de un elemento body.

body > ol > li p {color: red;}
.uno > .dos {color: blue;}

Ejemplo: Selecciona cualquier elemento que no sea un elemento a.

*:not(a) {color: red;}

Se puede usar etiquetas y clases combinadas.

Ejemplo: Selecciona las p que contenga la clase "miclase".

p.miclase {color: red;}

Ejemplo: Selecciona los elementos de la clase "miclase" que sea hijo de un elemento p.

p .miclase {color: red;}

7. Pseudo clases

Una pseudo clase en cuando analizamos el valor de una propiedad. Las pseudo clases, referencia estados específicos de elementos. Por ejemplo, si un elemento está seleccionado, o tiene el foco, o se le pasa el puntero por encima, se está cambiando su estado.

elemento:seudoclase {propiedad: valor;}
Pseudo clases
Pseudo claseDescripciónEjemplo
:first-childEl primero hijo.p:first-child
:nth-child(n)El hijo n (numerico) o ODD o EVENp:nth-child(2)
:only-childEl unico hijo.p:only-child
:nth-last-child(n)El hijo n antes del ultimo.p:nth-last-child(2)
:last-childEl ultimo hijo.p:last-child
:first-of-typeEl primero de su tipo.
:nth-of-type()El n del tipo.p:nth-of-type(2)
:only-of-typeEl unico de su tipo.p:only-of-type
:nth-last-of-type(n)p:nth-last-of-type(2)
:last-of-typeEl ultimo de su tipo.p:last-of-type
:hoverCon el mouse encima. Ojo se puede usar en cualquier etiqueta.a:hover
:activeElemento al cual estas pulsando. Mientras este pulsadoa:active
:linkEnlace no visitado aun.a:link
:visitedElace ya visitado.a:visited
:emptyEsta vacio.p:empty
:rootEs la raiz.:root
:fullscreenSelecciona el elemento que está en modo de pantalla completa.:fullscreen
:targetEs enlace#news:target
:not(selector)Selecciona todos los elementos que no son selector:not(p)
:focusSelecciona elemento input que contiene el foco.input:focus
:defaultSelecciona elementos input con atributo "default"input:default
:checkedSelecciona elementos input con atributo "checked"input:checked
:disabledSelecciona elementos input con atributo "disabled"input:disabled
:enabledSelecciona elementos input con atributo "enabled"input:enabled
:validSelecciona elementos input con un valor validoinput:valid
:invalidSelecciona elementos input "inválidos"input:invalid
:requiredSelecciona elementos input con atributo "required"input:required
:optionalSelecciona elementos input con atributo "optional"input:optional
:in-rangeSelecciona elementos input con valores dentro de rangoinput:in-range
:out-of-rangeSelecciona elementos input con valores fuera de rangoinput:out-of-range
:indeterminateSelecciona elementos input con valores es estados indeterminadosinput:indeterminate
:read-onlySelecciona elementos input "solo lectura"input:read-only
:read-writeSelecciona elementos input sin atributo "solo lectura"input:read-write
:lang(lenguaje)Selector por lenguaje. Ej html:lang (es) {font-size: 80%;}p:lang(es)

CSS también permiten modificar a voluntad la apariencia de los enlaces, usando como selector una pseudo clases especifica, luego el atributo (color, tamaño, fuente, subrayado o no) y finalmente el valor a asignar.

Ejemplo: hace que los enlaces por visitar sean de color azul, una vez visitados se pongan de color verde y al poner el mouse encima de color rojo.

A:hover {color: red;}
A:link {color: blue;text-decoration: none;} 
A:active {color: purple;}
A:visited {color: green;} 

El orden de aplicación debe ser necesariamente el expuesto para que funcione.

Si se les aplica la propiedad text-decoration, ajustado al valor none (ninguno), hace que los enlaces no estén subrayados.

Ejemplo: Hace que los enlaces visitados sean de color fucsia y no estén subrayados.

A:visited {color: fuchsia; text-decoration: none}

Ejemplo: Resaltar los elementos de formulario segun accion del mouse o estado.

:checked {color: fuchsia;}
:enebled {color: fuchsia;}
:disabled {color: fuchsia;}
:empty {background-color: yellow;}
:focus {background-color: yellow;}

8 Pseudo elementos

Los pseudo elementos permiten seleccionar una sección del DOM sin tener en cuanta una etiqueta en especial, sino mas bien de su posición dentro del DOM.

::seudoelemento {propiedad: valor;}
Pseudo elementos
Pseudo elementoDescripciónEjemplo
::first-childPrimer hijo del padrep::first-child
::first-linePrimera lineap::first-line
::first-letterPrimera letrap::first-letter
::beforeAntesp::before
::afterDespuésp::after
::markerSelecciona los marcadores de los elementos de la lista.p::marker
::selectionSelecciona la parte de un elemento que selecciona un usuario.::selection
::placeholderSelecciona elementos de entrada con el atributo "marcador de posición" especificadoinput::placeholder

Normalmente estos dos últimos asociados a un Generator Content.

Ejemplo: En el ejemplo se esta introduciendo un nbsp (código unicode 00A0) antes del div.

div::before {
	content: "\00A0";
	display: block;
	width: 0;
	heigth: 0;
	border-width: 10px 20px 10px 0;
	border-style: solid;
	border-color: transparent;
}

Ejemplo: Introduce un recuadro navy con la palabra Sintaxis.

pre::before{
	content: 'Sintaxis:';
	color: white;
	background-color: navy;
	padding: 2px;
	position: absolute;
   top: -12px;
   left: 10px;
}

9. Identificar el navegador

Es posible que algunas implementaciones modernas no funcionen igual en todos los navegadores por lo que debes especificar una instruccion para cada navegador en particulor.

Identificador de navegadores
IdentificadorDescripción
-moz-Firefox
-webkit-Chrome o Safari
-o-Opera
#grad {
   background: red; /* Para navegadores que no soportan gradiente */
   background: -webkit-linear-gradient(red, yellow); /* Para Safari 5.1 a 6.0 */
   background: -o-linear-gradient(red, yellow); /* Para Opera 11.1 a 12.0 */
   background: -moz-linear-gradient(red, yellow); /* Para Firefox 3.6 a 15 */
   background: linear-gradient(red, yellow); /* Sintexis estanadar */
}

10. Mezclando los tipo de selector

Como se ha visto anteriormente, existen muchos selectores para aplicar estilos en cascada.

Ejemplo: Selecciona cualquier elemento h2 que no es un primer hijo de su tipo y que no es un último hijo de su tipo que es hijo de un elemento body.

body > h2:not(:first-of-type):not(:last-of-type) {color: red;}

Ejemplo: Selecciona cualquier elemento párrafo (p) sin un atributo class=section.

p:not(.section) {color: red;}

También puedes separar los selectores por un espacio para que actúen como un AND

p.datos p.eq(0) {color: green;}

También puedes separar los selectores por una coma para que actúen como un OR

h1,h2,h3 {color: blue;}

11. Universal

Selecciona todos los elementos.

* {color: red;}

12. Importante

Normalmente CSS le da preferencia al mando mas cercano, de alli que se dice que CSS se aplica en cascada, pero si se requiere hacer una excepcion con !important.

selector {propiedad: valor !Important;}