Selectores de atributo

Los selectores de atributo hacen referencia a elementos en función del nombre del atributo o el valor.

[title] {
    color: aquamarine;
}

h1[title="hello"] {
    color: blueviolet;
}

h1[title~="hello"] {
    color: cadetblue;
}

button[class|="btn"] {
    background: coral;
}

a[href^="#"] {
    color: crimson;
}

img[src$=".png"] {
    border: 3px solid hotpink;
}

h1[class*="title"] {
    color: dodgerblue;
}

Con CSS se pueden seleccionar elementos de diferentes formas. El método más básico es haciendo referencia a un elemento por su nombre (h1 { ... }). También están las clases (.title { ... }) o ids (#element { ... }).

Sin embargo, no son los únicos, existe la posibilidad de hacer referencia a elementos usando cualquiera de sus atributos, incluso basándonos en los valores.

Cuentan con una sintaxis especial ([]) y pueden permanecer solos, acompañados de elementos, clases o ids e incluso en combinación con otros.

/* Cualquier elemento que tenga el atributo "title" con el valor "hello" */

[title="hello"] {
  color: red;
} 

/* Cualquier elemento <p> que tenga el atributo "title" con el valor "hello" */

p[title="hello"] {
  color: red;
}

/* Cualquier elemento con la clase "text" y el atributo "title" con el valor "hello" */

.text[title="hello"] {
  color: red;
}

/* Cualquier elemento con el id "text" y el atributo "title" con el valor "hello" */

#text[title="hello"] {
  color: red;
}

/* Cualquier elemento <a> que tenga el atributo "title" con el valor "hello" 
y el atributo "rel" con el valor "external" */

a[title="hello" rel="external"] {
  color: red;
} 

[atributo]

Selecciona los elementos que tengan el atributo especificado.

[title] {
  margin: 10px;
}

Explicación: Todos los elementos que tengan el atributo title van a tener un margen de 10px, sin importar su valor.

[atributo="valor"]

Selecciona los elementos con el atributo y valor especificados. Estos deben de ser idénticos a como fueron escritos.

h1[title="hello"] {
  margin: 10px;
}

Explicación: Todos los elementos <h1> que tengan el atributo title con el valor hello, van a tener un margen de 10px.

No coinciden con el atributo:

<h1 title="hello-">Hello</h1>

<h1 title="-hello">Hello</h1>

<h1 title="hello!">Hello</h1>

<h1 title="hello ">Hello</h1>

<h1 title=" hello">Hello</h1>

<h1 title="hello people">Hello</h1>

<h1 title="hello hello">Hello</h1>

[atributo~="valor"]

Selecciona los elementos con el atributo especificado y cuyo valor sea una palabra entre una lista de valores.

h1[title~="hello"] {
  margin: 10px;
}

Explicación: Todos los elementos <h1> que tengan el atributo title con el valor hello, van a tener un margen de 10px. Siempre y cuando sea un único valor o se rodee de espacios, incluso espacios con más palabras.

Coinciden con el atributo:

<h1 title="hello">Hello</h1>

<h1 title="hello ">Hello</h1>

<h1 title=" hello">Hello</h1>

<h1 title="hello people">Hello</h1>

<h1 title="hello hello">Hello</h1>

<h1 title="hello people hello">Hello</h1>

No coinciden con el atributo:

<h1 title="hello-">Hello</h1>

<h1 title="-hello">Hello</h1>

<h1 title="hello!">Hello</h1>

[atributo|="valor"]

Selecciona los elementos con el atributo especificado y cuyo valor empiece con la palabra definida o sea escrito antes del -. El valor debe ser una palabra completa.

button[class|="btn"] {
  margin: 10px;
}

Explicación: Todos los elementos <button> que tengan el atributo class con el valor btn al principio o antes de un guion -, van a tener un margen de 10px.

Coinciden con el atributo:

<button class="btn">Button</button>

<button class="btn-">Button</button>

<button class="btn-small">Button</button>

<button class="btn-small blue">Button</button>

No coinciden con el atributo:

<button class="btn ">Button</button>

<button class=" btn">Button</button>

<button class="btn small">Button</button>

<button class="small btn">Button</button>

<button class="btnSmall">Button</button>

[atributo^="valor"]

Selecciona los elementos con el atributo especificado y cuyo valor comience con el texto definido. El valor no debe ser una palabra completa.

a[href^="#"] {
  margin: 10px;
}

Explicación: Todos los elementos <a> que tengan el atributo href con el valor al principio #, van a tener un margen de 10px.

Coinciden con el atributo:

<a href="#title">filisantillan</a>

<a href="#title ">filisantillan</a>

<a href="#titleFili">filisantillan</a>

<a href="#title-fili">filisantillan</a>

No coinciden con el atributo:

<a href="#text">filisantillan</a>

<a href=" #title">filisantillan</a>

<a href="https://title.com">filisantillan</a>

<a href="title.com">filisantillan</a>

[atributo$="valor"]

Selecciona los elementos con el atributo especificado y cuyo valor termina con el texto definido. El valor no debe ser una palabra completa.

img[src$=".png"] {
    margin: 10px;
}

Explicación: Todos los elementos <img> que tengan el atributo src con el valor al final .png, van a tener un margen de 10px.

Coinciden con el atributo:

<img src="./image.png">

<img src="./image?123.png">

<img src="./images/image.png">

<img src="./my-image.png">

No coinciden con el atributo:

<img src="./image.jpg">

<img src="./image.webp">

<img src="./my-image.png ">

[atributo*="valor"]

Selecciona los elementos con el atributo especificado y cuyo valor contiene el texto definido. El valor no debe ser una palabra completa.

h1[class*="title"] {
    color: dodgerblue;
}

Explicación: Todos los elementos <h1> que tengan el atributo class con el valor title en cualquier posición o lugar, van a tener un margen de 10px.

Coinciden con el atributo:

<h1 class="title">Welcome!</h1>

<h1 class="title-">Welcome!</h1>

<h1 class="-title">Welcome!</h1>

<h1 class="mytitle">Welcome!</h1>

<h1 class="title ">Welcome!</h1>

<h1 class=" title">Welcome!</h1>

<h1 class="title red">Welcome!</h1>

<h1 class="red title">Welcome!</h1>

No coinciden con el atributo:

<h1 class="Title">Welcome!</h1>

<h1 class="myTitle">Welcome!</h1>

<h1 class="mytiTle">Welcome!</h1>
Comparte tu opinión o duda:
Se parte de mi newsletter

Compartiré contigo las últimas novedades del sitio y otros recursos sobre desarrollo web que no te puedes perder.