Buscar..


Introducción

Los selectores CSS identifican elementos HTML específicos como objetivos para los estilos CSS. Este tema trata sobre cómo los selectores de CSS tienen como objetivo los elementos HTML. Los selectores utilizan una amplia gama de más de 50 métodos de selección ofrecidos por el lenguaje CSS, incluidos elementos, clases, ID, pseudo-elementos y pseudo-clases, y patrones.

Sintaxis

  • # id
  • . nombre de la clase
  • : nombre de pseudo-clase
  • :: nombre de pseudo-elemento
  • [ attr ] / * tiene el atributo attr . * /
  • [ attr = " valor "] / * tiene el atributo attr , y su valor es exactamente " valor ". * /
  • [ attr ~ = " valor "] / * tiene el atributo attr , y su valor, cuando se divide en espacios en blanco , contiene " valor ". * /
  • [ attr | = " valor "] / * tiene el atributo attr , y su valor es exactamente " valor ", o su valor comienza con " valor - ". * /
  • [ attr ^ = " valor "] / * tiene el atributo attr , y su valor comienza con " valor ". * /
  • [ attr $ = " valor "] / * tiene el atributo attr , y su valor termina con " valor ". * /
  • [ attr * = " value "] / * tiene el atributo attr , y su valor contiene " value ". * /
  • nombre-elemento
  • *

Observaciones

  • Usted verá a veces dos puntos dobles ( :: ) en lugar de sólo uno ( : ). Esta es una manera de separar las pseudo-clases de los pseudo-elementos .
  • Navegadores antiguos, como Internet Explorer 8, sólo admiten un único dos puntos ( : ) para la definición de pseudo-elementos.
  • A diferencia de las pseudo-clases, solo se puede usar un pseudo-elemento por selector, si está presente, debe aparecer después de la secuencia de selectores simples que representan a los sujetos del selector (una versión futura de la especificación W3C puede permitir múltiples pseudo-elementos por selector) ).

Selectores de atributos

Visión general

Los selectores de atributos se pueden utilizar con varios tipos de operadores que cambian los criterios de selección en consecuencia. Seleccionan un elemento utilizando la presencia de un atributo o valor de atributo dado.

Selector (1) Elemento emparejado Selecciona elementos ... Versión CSS
[attr] <div attr> Con atributo attr 2
[attr='val'] <div attr="val"> Donde atributo attr tiene valor val 2
[attr~='val'] <div attr="val val2 val3"> Donde aparece val en el
lista de espacios en blanco separados de attr
2
[attr^='val'] <div attr="val1 val2"> Donde el valor de attr comienza con val 3
[attr$='val'] <div attr="sth aval"> Donde el valor del attr termina con val 3
[attr*='val'] <div attr="somevalhere"> Donde attr contiene val cualquier lugar 3
[attr|='val'] <div attr="val-sth etc"> Donde el valor de attr es exactamente val ,
o comienza con val e inmediatamente
seguido de - (U + 002D)
2
[attr='val' i] <div attr="val"> Donde attr tiene valor val ,
haciendo caso omiso de la caja de letras de val .
4 (2)

Notas:

  1. El valor del atributo puede estar entre comillas simples o dobles. Ninguna cita puede funcionar, pero no es válida de acuerdo con el estándar CSS, y no se recomienda.

  2. No existe una especificación CSS4 única e integrada, ya que se divide en módulos separados. Sin embargo, hay módulos de "nivel 4". Ver soporte del navegador .

Detalles

[attribute]

Selecciona elementos con el atributo dado.

div[data-color] {
  color: red;
}
<div data-color="red">This will be red</div>
<div data-color="green">This will be red</div>
<div data-background="red">This will NOT be red</div>

Demo en vivo en JSBin

[attribute="value"]

Selecciona elementos con el atributo y valor dados.

div[data-color="red"] {
  color: red;
}
<div data-color="red">This will be red</div>
<div data-color="green">This will NOT be red</div>
<div data-color="blue">This will NOT be red</div>

Demo en vivo en JSBin

[attribute*="value"]

Selecciona elementos con el atributo y valor dados donde el atributo dado contiene el valor dado en cualquier lugar (como subcadena).

[class*="foo"] {
  color: red;
}
<div class="foo-123">This will be red</div>
<div class="foo123">This will be red</div>
<div class="bar123foo">This will be red</div>
<div class="barfooo123">This will be red</div>
<div class="barfo0">This will NOT be red</div>

Demo en vivo en JSBin

[attribute~="value"]

Selecciona elementos con el atributo y valor dados donde el valor dado aparece en una lista separada por espacios en blanco.

[class~="color-red"] {
  color: red;
}
<div class="color-red foo-bar the-div">This will be red</div>
<div class="color-blue foo-bar the-div">This will NOT be red</div>

Demo en vivo en JSBin

[attribute^="value"]

Selecciona elementos con el atributo y valor dados donde el atributo dado comienza con el valor.

[class^="foo-"] {
  color: red;
}
<div class="foo-123">This will be red</div>
<div class="foo-234">This will be red</div>
<div class="bar-123">This will NOT be red</div>

Demo en vivo en JSBin

[attribute$="value"]

Selecciona elementos con el atributo y valor dados donde el atributo dado termina con el valor dado.

[class$="file"] {
  color: red;
}
<div class="foobar-file">This will be red</div>
<div class="foobar-file">This will be red</div>
<div class="foobar-input">This will NOT be red</div>

Demo en vivo en JSBin

[attribute|="value"]

Selecciona elementos con un atributo y valor dados donde el valor del atributo es exactamente el valor dado o es exactamente el valor dado seguido de - (U + 002D)

[lang|="EN"] {
  color: red;
}
<div lang="EN-us">This will be red</div>
<div lang="EN-gb">This will be red</div>
<div lang="PT-pt">This will NOT be red</div>

Demo en vivo en JSBin

[attribute="value" i]

Selecciona elementos con un atributo y valor dados donde el valor del atributo puede representarse como Value , VALUE , vAlUe o cualquier otra posibilidad que no vAlUe entre mayúsculas y minúsculas.

[lang="EN" i] {
  color: red;
}
<div lang="EN">This will be red</div>
<div lang="en">This will be red</div>
<div lang="PT">This will NOT be red</div>

Demo en vivo en JSBin

Especificidad de los selectores de atributos.

0-1-0

Igual que el selector de clase y la pseudoclase.

*[type=checkbox] // 0-1-0

Tenga en cuenta que esto significa que se puede usar un selector de atributos para seleccionar un elemento por su ID en un nivel de especificidad más bajo que si se seleccionara con un selector de ID : [id="my-ID"] apunta al mismo elemento que #my-ID pero con menor especificidad.

Vea la sección de sintaxis para más detalles.

Combinadores

Visión general

Selector Descripción
div span Selector descendiente (todos los <span> que son descendientes de un <div> )
div > span Selector secundario (todos los <span> que son un hijo directo de un <div> )
a ~ span Selector general de hermanos (todos los <span> que son hermanos después de un <a> )
a + span Selector de hermanos adyacente (todos los <span> que están inmediatamente después de un <a> )

Nota: Los selectores de hermanos se dirigen a los elementos que vienen después de ellos en el documento de origen. CSS, por su naturaleza (se conecta en cascada), no puede apuntar a elementos anteriores o principales . Sin embargo, al usar la propiedad de order flexible, se puede simular un selector de hermanos anterior en medios visuales .

Combinador Descendiente: selector selector

Un combinador descendiente, representado por al menos un carácter de espacio ( ), selecciona elementos que son descendientes del elemento definido. Este combinador selecciona todos los descendientes del elemento (desde elementos secundarios hacia abajo).

div p {
  color:red;
}
<div>
  <p>My text is red</p>
  <section>
    <p>My text is red</p>
  </section>
</div>

<p>My text is not red</p>

Demo en vivo en JSBin

En el ejemplo anterior, los primeros dos elementos <p> se seleccionan ya que ambos son descendientes de <div> .


Combinador infantil: selector > selector

El combinador hijo ( > ) se utiliza para seleccionar elementos que son hijos o descendientes directos del elemento especificado.

div > p {
  color:red;
}
<div>
  <p>My text is red</p>
  <section>
    <p>My text is not red</p>
  </section>
</div>

Demo en vivo en JSBin

El CSS anterior selecciona solo el primer elemento <p> , ya que es el único párrafo que desciende directamente de un <div> .

El segundo elemento <p> no está seleccionado porque no es un elemento secundario directo de <div> .


Combinador de hermanos adyacente: selector + selector

El combinador de hermanos adyacentes ( + ) selecciona un elemento hermano que sigue inmediatamente a un elemento especificado.

p + p {
  color:red;
}
<p>My text is not red</p>
<p>My text is red</p>
<p>My text is red</p>
<hr>
<p>My text is not red</p>

Demo en vivo en JSBin

El ejemplo anterior selecciona solo aquellos elementos <p> que están precedidos directamente por otro elemento <p> .


Combinador general de hermanos: selector ~ selector

El combinador general de hermanos ( ~ ) selecciona todos los hermanos que siguen el elemento especificado.

p ~ p {
  color:red;
}
<p>My text is not red</p>
<p>My text is red</p>
<hr>
<h1>And now a title</h1>
<p>My text is red</p>

Demo en vivo en JSBin

El ejemplo anterior selecciona todos los elementos <p> que están precedidos por otro elemento <p> , estén o no inmediatamente adyacentes.

Selectores de nombre de clase

El selector de nombre de clase selecciona todos los elementos con el nombre de la clase objetivo. Por ejemplo, el nombre de clase .warning seleccionaría el siguiente elemento <div> :

<div class="warning">
    <p>This would be some warning copy.</p>
</div>

También puede combinar nombres de clase para orientar elementos más específicamente. Vamos a aprovechar el ejemplo anterior para mostrar una selección de clase más complicada.

CSS

.important {
    color: orange;
}
.warning {
    color: blue;
}
.warning.important {
    color: red;
}

HTML

<div class="warning">
    <p>This would be some warning copy.</p>
</div>

<div class="important warning">
    <p class="important">This is some really important warning copy.</p>
</div>

En este ejemplo, todos los elementos con la .warning clase tendrán un color azul, y elementos con el .important clase con tener un color anaranjado del texto, y todos los elementos que tienen tanto el .important y .warning nombre de la clase tendrán un texto de color rojo color.

Tenga en cuenta que dentro de la CSS, la declaración .warning.important no tenía ningún espacio entre los dos nombres de clase. Esto significa que solo encontrará elementos que contengan la warning ambos nombres de clase y que sean important en su atributo de class . Esos nombres de clase podrían estar en cualquier orden en el elemento.

Si se incluyera un espacio entre las dos clases en la declaración de CSS, solo seleccionaría elementos que tengan elementos primarios con nombres de clase .warning y elementos secundarios con nombres de clase .important .

Selectores de ID

Los selectores de ID seleccionan elementos DOM con el ID de destino. Para seleccionar un elemento por una ID específica en CSS, se usa # prefijo # .

Por ejemplo, el siguiente elemento div HTML ...

<div id="exampleID">
    <p>Example</p>
</div>

... se puede seleccionar mediante #exampleID en CSS como se muestra a continuación:

#exampleID {
    width: 20px;
}

Nota : las especificaciones HTML no permiten múltiples elementos con la misma ID

Pseudo-clases

Las pseudo-clases son palabras clave que permiten la selección en función de la información que se encuentra fuera del árbol del documento o que no pueden ser expresadas por otros selectores o combinadores. Esta información puede asociarse a cierto estado ( estado y pseudo-clases dinámicas ), a ubicaciones ( estructural y objetivo pseudo-clases), a negaciones de la primera (pseudo-clase de negación ) o a idiomas (pseudo-clase lang ). Los ejemplos incluyen si se ha seguido o no un enlace ( :visited ), el mouse se encuentra sobre un elemento ( :hover ), se marca una casilla de verificación ( :checked ), etc.

Sintaxis

selector:pseudo-class { 
    property: value;
}

Lista de pseudo-clases:

Nombre Descripción
:active Se aplica a cualquier elemento que el usuario active (es decir, haga clic).
:any Le permite crear conjuntos de selectores relacionados mediante la creación de grupos que
los artículos incluidos coincidirán. Esta es una alternativa a repetir un selector completo.
:target Selecciona el elemento activo actual #news (se hace clic en una URL)
que contiene ese nombre de ancla)
:checked Se aplica a elementos de radio, casilla de verificación o opción que están marcados
o cambiar a un estado "activado".
:default Representa cualquier elemento de la interfaz de usuario que sea el predeterminado entre un grupo de
elementos similares.
:disabled Se aplica a cualquier elemento de la interfaz de usuario que esté deshabilitado.
:empty Se aplica a cualquier elemento que no tenga hijos.
:enabled Se aplica a cualquier elemento de UI que esté en un estado habilitado.
:first Utilizado junto con la regla @page , esto selecciona la primera página en un
documento impreso.
:first-child Representa cualquier elemento que sea el primer elemento secundario de su padre.
:first-of-type Se aplica cuando un elemento es el primero del tipo de elemento seleccionado
dentro de su padre. Esto puede o no ser el primer hijo.
:focus Se aplica a cualquier elemento que tenga el enfoque del usuario. Esto puede ser dado por el
teclado del usuario, eventos del mouse u otras formas de entrada.
:focus-within Puede usarse para resaltar una sección completa cuando un elemento dentro de ella está enfocado. Coincide con cualquier elemento que coincida con la pseudo-clase: focus o que tiene un foco descendente.
:full-screen Se aplica a cualquier elemento mostrado en modo de pantalla completa. Selecciona toda la pila.
de elementos y no sólo el elemento de nivel superior.
:hover Se aplica a cualquier elemento que se encuentre sobre el dispositivo señalador del usuario, pero
no esta activado.
:indeterminate Aplica elementos de UI de radio o casilla de verificación que no están marcados ni
sin marcar, pero están en un estado indeterminado. Esto puede ser debido a una
Atributo del elemento o manipulación de DOM.
:in-range La pseudo-clase CSS :in-range coincide cuando un elemento tiene
su atributo de valor dentro de las limitaciones de rango especificadas para este elemento.
Permite a la página dar una retroalimentación de que el valor actualmente definido
El uso del elemento está dentro de los límites del rango.
:invalid Se aplica a <input> elementos <input> cuyos valores no son válidos de acuerdo con
El tipo especificado en el atributo type= .
:lang Se aplica a cualquier elemento que esté envolviendo el elemento <body> tiene un
lang= designado lang= atributo. Para que la pseudo-clase sea válida, debe
Contiene un código de idioma de dos o tres letras válido.
:last-child Representa cualquier elemento que sea el último elemento secundario de su padre.
:last-of-type Se aplica cuando un elemento es el último del tipo de elemento seleccionado dentro
su padre Esto puede o no ser el último hijo.
:left Utilizado junto con la regla @page , esto selecciona todos los elementos de la izquierda.
Páginas en un documento impreso.
:link Se aplica a cualquier enlace que no haya sido visitado por el usuario.
:not() Se aplica a todos los elementos que no coinciden con el valor pasado a
( :not(p) o :not(.class-name) por ejemplo. Debe tener un valor para ser
Válido y solo puede contener un selector. Sin embargo, puede encadenar múltiples :not selectores juntos.
:nth-child Se aplica cuando un elemento es el n -ésimo elemento de su padre, donde n
puede ser un número entero, una expresión matemática (por ejemplo, n+3 ) o las palabras clave
odd o even
:nth-of-type Se aplica cuando un elemento es el n -ésimo elemento de su padre de la
mismo tipo de elemento, donde n puede ser un entero, un matemático
la expresión (por ejemplo, n+3 ) o las palabras clave odd o even .
:only-child La pseudo-clase CSS :only-child representa cualquier elemento
que es el único hijo de su padre. Esto es lo mismo que
:first-child:last-child o :nth-child(1):nth-last-child(1) ,
Pero con una menor especificidad.
:optional La pseudo-clase CSS :optional representa cualquier elemento.
que no tiene el atributo requerido establecido en él. Esto permite
Formularios para indicar fácilmente los campos opcionales y darles un estilo acorde
:out-of-range La pseudo-clase CSS :out-of-range coincide cuando un elemento tiene su
atributo de valor fuera de las limitaciones de rango especificadas para este elemento.
Permite a la página dar una retroalimentación de que el valor actualmente definido utilizando el
El elemento está fuera de los límites del rango. Un valor puede estar fuera de un rango si es
ya sea más pequeño o más grande que los valores máximos y mínimos establecidos.
:placeholder-shown Experimental. Se aplica a cualquier elemento de formulario que muestre actualmente el texto de marcador de posición.
:read-only Se aplica a cualquier elemento que no sea editable por el usuario.
:read-write Se aplica a cualquier elemento editable por un usuario, como <input> elementos <input> .
:right Utilizado junto con la regla @page , esto selecciona todas las páginas correctas en un
documento impreso.
:root coincide con el elemento raíz de un árbol que representa el documento.
:scope CSS pseudo-clase coincide con los elementos que son una referencia
Punto para que los selectores coincidan contra.
:target Selecciona el elemento activo actual #news (se hace clic en una URL)
que contiene ese nombre de ancla)
:visited Se aplica a cualquier enlace que haya sido visitado por el usuario.

La :visited pseudoclase :visited no se puede usar para la mayoría de los estilos en muchos navegadores modernos porque es un agujero de seguridad. Vea este enlace para referencia.

Selectores basicos

Selector Descripción
* Selector universal (todos los elementos)
div Selector de etiquetas (todos los elementos <div> )
.blue Selector de clase (todos los elementos con clase blue )
.blue.red Todos los elementos con clase blue y red (un tipo de selector compuesto)
#headline Selector de ID (el elemento con el atributo "id" establecido en el headline )
:pseudo-class Todos los elementos con pseudo-clase.
::pseudo-element Elemento que coincide con el pseudo-elemento.
:lang(en) Elemento que coincide con: declaración lang, por ejemplo <span lang="en">
div > p selector de niños

Nota: El valor de una ID debe ser único en una página web. Es una violación del estándar HTML usar el valor de una ID más de una vez en el mismo árbol de documentos.

Se puede encontrar una lista completa de los selectores en la especificación del nivel 3 de los selectores de CSS .

Cómo diseñar una entrada de rango

HTML

<input type="range"></input>

CSS

Efecto Selector Pseudo
Pulgar input[type=range]::-webkit-slider-thumb, input[type=range]::-moz-range-thumb, input[type=range]::-ms-thumb
Pista input[type=range]::-webkit-slider-runnable-track, input[type=range]::-moz-range-track, input[type=range]::-ms-track
Enfocado input[type=range]:focus
Parte inferior de la pista input[type=range]::-moz-range-progress, input[type=range]::-ms-fill-lower (no es posible en los navegadores WebKit actualmente - se necesita JS)

Global booleano con casilla de verificación: marcado y ~ (combinador general de hermanos)

Con el ~ selector, puede implementar fácilmente un booleano accesible global sin usar JavaScript.

Añadir booleano como casilla de verificación

Al principio de su documento, agregue todos los valores booleanos que desee con una id única y el conjunto de atributos hidden :

<input type="checkbox" id="sidebarShown" hidden />
<input type="checkbox" id="darkThemeUsed" hidden />

<!-- here begins actual content, for example: -->
<div id="container">
    <div id="sidebar">
        <!-- Menu, Search, ... -->
    </div>

    <!-- Some more content ... -->
</div>

<div id="footer">
    <!-- ... -->
</div>

Cambiar el valor del booleano.

Puede alternar el valor booleano agregando una label con el conjunto de atributos for :

<label for="sidebarShown">Show/Hide the sidebar!</label>

Accediendo al valor booleano con CSS

El selector normal (como .color-red ) especifica las propiedades predeterminadas. Se pueden anular siguiendo los selectores de true / false :

/* true: */
<checkbox>:checked ~ [sibling of checkbox & parent of target] <target>

/* false: */
<checkbox>:not(:checked) ~ [sibling of checkbox & parent of target] <target>

Tenga en cuenta que <checkbox> , [sibling ...] y <target> deben ser reemplazados por los selectores adecuados. [sibling ...] puede ser un selector específico, (a menudo si eres perezoso) simplemente * o nada si el objetivo ya es un hermano de la casilla de verificación.

Ejemplos para la estructura HTML anterior serían:

#sidebarShown:checked ~ #container #sidebar {
    margin-left: 300px;
}

#darkThemeUsed:checked ~ #container,
#darkThemeUsed:checked ~ #footer {
    background: #333;
}

En acción

Vea este violín para una implementación de estos booleanos globales.

CSS3: ejemplo de selector de rango

<style>
input:in-range {
    border: 1px solid blue;
}
</style>



<input type="number" min="10" max="20" value="15">
<p>The border for this value will be blue</p>

La pseudo-clase CSS :in-range coincide cuando un elemento tiene su atributo de valor dentro de las limitaciones del rango especificado para este elemento. Permite a la página dar una respuesta de que el valor actualmente definido utilizando el elemento está dentro de los límites de rango. [1]

Pseudo clase infantil

"La pseudo-clase CSS: nth-child (an + b) coincide con un elemento que tiene un + b-1 hermanos delante de él en el árbol de documentos, para un valor positivo o cero dado para n" - MDN: nth-child

pseudo-selector 1 2 3 4 5 6 7 8 9 10
:first-child
:nth-child(3)
:nth-child(n+3)
:nth-child(3n)
:nth-child(3n+1)
:nth-child(-n+3)
:nth-child(odd)
:nth-child(even)
:last-child
:nth-last-child(3)

Seleccione el elemento utilizando su ID sin la alta especificidad del selector de ID

Este truco le ayuda a seleccionar un elemento utilizando la ID como valor para un selector de atributo para evitar la alta especificidad del selector de ID.

HTML:

<div id="element">...</div>  

CSS

#element { ... } /* High specificity will override many selectors */

[id="element"] { ... } /* Low specificity, can be overridden easily */

A. El ejemplo: no pseudo-clase & B.: focus-within CSS pseudo-class

A. La sintaxis se presenta arriba.

El siguiente selector coincide con todos <input> elementos <input> en un documento HTML que no están deshabilitados y no tienen la clase .example :

HTML:

<form>
    Phone: <input type="tel" class="example">
    E-mail: <input type="email" disabled="disabled">
    Password: <input type="password">
</form>

CSS:

input:not([disabled]):not(.example){
   background-color: #ccc;
}

La pseudo-clase :not() también admitirá selectores separados por comas en el Nivel 4 de selectores:

CSS:

input:not([disabled], .example){
   background-color: #ccc;
}

Demo en vivo en JSBin

Ver la sintaxis de fondo aquí .

B. El: enfoque dentro de la pseudo-clase CSS

HTML:

  <h3>Background is blue if the input is focused .</p>
  <div>
    <input type="text">
  </div>

CSS:

div {
  height: 80px;
}
input{
  margin:30px;
}
div:focus-within {
  background-color: #1565C0;
}

introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

El ejemplo de selector de pseudo-clase de hijo único

La pseudo-clase CSS :only-child representa cualquier elemento que sea el único hijo de su padre.

HTML:

<div>
  <p>This paragraph is the only child of the div, it will have the color blue</p>
</div>

<div>
  <p>This paragraph is one of the two children of the div</p>
  <p>This paragraph is one of the two children of its parent</p>
</div>

CSS:

p:only-child {
  color: blue;
}

El ejemplo anterior selecciona el elemento <p> que es el hijo único de su padre, en este caso un <div> .

Demo en vivo en JSBin

El: selector de último tipo

El :last-of-type selecciona el elemento que es el último hijo, de un tipo particular, de su padre. En el siguiente ejemplo, el css selecciona el último párrafo y el último encabezado h1 .

p:last-of-type { 
  background: #C5CAE9; 
}
h1:last-of-type { 
  background: #CDDC39; 
}
<div class="container">
    <p>First paragraph</p>
    <p>Second paragraph</p>
    <p>Last paragraph</p>
    <h1>Heading 1</h1>
    <h2>First heading 2</h2>
    <h2>Last heading 2</h2>
</div>

introduzca la descripción de la imagen aquí

jsFiddle



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow