Selectores de atributos en CSS

-

Sintaxis y uso

Los selectores de atributos en CSS permiten seleccionar elementos basados en sus atributos. La sintaxis básica de un selector de atributos consiste en corchetes [] que contienen el nombre del atributo. Puedes refinar la selección especificando el valor del atributo o usando operadores especiales.

Para seleccionar un elemento con un atributo específico, usa esta sintaxis:

Consejo: Selector de atributo básico

[attribute] {
  /* Estilos CSS */
}

Para seleccionar todos los elementos <a> con un atributo target, usa:

Consejo: Seleccionando elementos <a> con un atributo target

a[target] {
  /* Estilos CSS */
}

También puedes seleccionar elementos basados en el valor de un atributo. Para hacer esto, añade un signo igual = y el valor del atributo entre comillas después del nombre del atributo:

Consejo: Selector de atributo con valor específico

[attribute="value"] {
  /* Estilos CSS */
}

Para seleccionar todos los elementos <img> con un valor de atributo alt de "logo", usa:

Consejo: Seleccionando elementos con un atributo alt específico

img[alt="logo"] {
  /* Estilos CSS */
}

Algunos selectores de atributos comunes incluyen:

  • [class]: Selecciona elementos con una clase.
  • [id]: Selecciona elementos con un id.
  • [type]: Selecciona tipos de entrada.
  • [disabled]: Selecciona elementos deshabilitados.
  • [required]: Selecciona elementos requeridos.

Ejemplos de uso de estos selectores:

Consejo: Selectores de atributos específicos

/* Selecciona todos los elementos input con un tipo "text" */
input[type="text"] {
  /* Estilos CSS */
}

/* Selecciona todos los elementos con un atributo "data-toggle" */
[data-toggle] {
  /* Estilos CSS */
}

/* Selecciona todos los elementos con un "title" que contenga "example" */
[title*="example"] {
  /* Estilos CSS */
}

Los selectores de atributos te proporcionan una forma de seleccionar y estilizar partes específicas de tu página web basadas en sus atributos.

Tipos de selectores de atributos

Los selectores de atributos en CSS vienen en varios tipos, cada uno con su propia sintaxis y propósito. Aquí están los diferentes tipos de selectores de atributos y cómo usarlos.

Selector de presencia

El selector de presencia se enfoca en elementos que tienen un atributo específico, sin importar su valor. La sintaxis para el selector de presencia es:

Consejo: Sintaxis para el selector de presencia

[attribute] {
  /* Estilos CSS */
}

Para seleccionar todos los elementos <a> que tienen un atributo title:

Consejo: Seleccionar todos los elementos <a> con un atributo title

a[title] {
  /* Estilos CSS */
}

Este selector coincidirá con cualquier elemento <a> que tenga un atributo title, sin importar cuál sea el valor del atributo.

Selector de igualdad

El selector de igualdad se enfoca en elementos con un valor de atributo igual a un valor específico. La sintaxis para el selector de igualdad es:

Consejo: Sintaxis para el selector de igualdad

[attribute="value"] {
  /* Estilos CSS */
}

Para seleccionar todos los elementos <input> con un valor de atributo type de "submit":

Consejo: Seleccionar todos los elementos <input> con type='submit'

input[type="submit"] {
  /* Estilos CSS */
}

Por defecto, el selector de igualdad distingue entre mayúsculas y minúsculas. Para realizar una coincidencia sin distinción de mayúsculas y minúsculas, añade una i antes del corchete de cierre:

Consejo: Selector de igualdad sin distinción de mayúsculas y minúsculas

[attribute="value" i] {
  /* Estilos CSS */
}

Selectores de subcadena

Los selectores de subcadena se enfocan en elementos con un valor de atributo que contiene una subcadena específica. Hay tres tipos de selectores de subcadena:

  1. Selector Comienza con ([attribute^="value"]): Selecciona elementos con un valor de atributo que comienza con el valor especificado.
  2. Selector Termina con ([attribute$="value"]): Selecciona elementos con un valor de atributo que termina con el valor especificado.
  3. Selector Contiene ([attribute*="value"]): Selecciona elementos con un valor de atributo que contiene el valor especificado en cualquier parte de la cadena.

Ejemplos de cada selector de subcadena:

Consejo: Seleccionar con atributo que comienza con valor

[data-category^="top"] {
  /* Estilos CSS */
}

Consejo: Seleccionar con atributo que termina con valor

[href$=".pdf"] {
  /* Estilos CSS */
}

Consejo: Seleccionar con atributo que contiene valor

[class*="featured"] {
  /* Estilos CSS */ 
}

Selectores de sufijo y prefijo

Los selectores de sufijo y prefijo son similares a los selectores de subcadena que comienzan con y terminan con, pero coinciden con valores completos en lugar de solo partes.

  • Prefijo: [attribute|='value']: Coincide con atributos iguales o que comienzan seguidos por un guion (-).
  • Sufijo: No está soportado en CSS

Ejemplo:

Consejo: Selector de prefijo para idiomas

/* Coincide con lang='en' o comienza con 'en-'*/ 
 [lang|='en'] {   
   /* Estilos CSS */
 }

Combinación de selectores de atributos

Puedes usar múltiples selectores de atributos juntos para seleccionar elementos específicos basados en más de un atributo. Esto permite hacer selecciones precisas y complejas. También puedes combinar selectores de atributos con otros selectores CSS, como selectores de clase, id o elementos.

Para combinar selectores de atributos, escríbelos uno tras otro dentro del mismo selector:

Consejo: Combinación de selectores de atributos

[attribute1][attribute2] {
  /* Estilos CSS */
}

Para seleccionar todos los elementos <input> con un atributo type de "text" y un atributo required:

Consejo: Selección de elementos Input específicos

input[type="text"][required] {
  /* Estilos CSS */
}

También puedes mezclar selectores de atributos con otros selectores CSS.

Consejo: Mezcla de selectores de atributos con selectores de clase

a.button[data-type="primary"] {
  /* Estilos CSS */
}

Aquí tienes algunos ejemplos más de combinaciones complejas:

Consejo: Selección de elementos con múltiples atributos

/* Selecciona elementos <img> con un atributo "data-src" y un atributo "alt" que contenga "avatar" */
img[data-src][alt*="avatar"] {
  /* Estilos CSS */
}

/* Selecciona elementos <div> con un atributo "role" de "alert" y un "data-type" que comience con "warning" */
div[role="alert"][data-type^="warning"] {
  /* Estilos CSS */
}

/* Selecciona elementos <a> con un "href" que termine en ".pdf" y un "target" de "_blank" */
a[href$=".pdf"][target="_blank"] {
  /* Estilos CSS */
}

Al combinar estos métodos, puedes crear selecciones muy específicas para aplicar estilos a elementos basados en ciertos atributos. Esto te da flexibilidad y control sobre el diseño de tu página.

Aplicaciones prácticas

Los selectores de atributos tienen muchos usos en el desarrollo web. Permiten aplicar estilos a elementos según sus atributos, facilitando la selección de elementos específicos sin necesidad de agregar clases o IDs adicionales. Aquí hay algunos ejemplos de cómo se pueden usar los selectores de atributos:

Aplicar estilos a elementos de formulario

Los selectores de atributos se usan comúnmente para aplicar estilos a elementos de formulario según sus atributos.

Consejo: Aplicar estilos a campos de formulario obligatorios

input[required], 
textarea[required] {
  border: 1px solid red;
}

También puedes aplicar estilos a elementos de formulario según su tipo:

Consejo: Aplicar estilos a elementos de formulario por tipo

input[type="text"] {
  background-color: #f0f0f0;
}

input[type="submit"] {
  background-color: #4CAF50;
  color: white;
}

Aplicar estilos a enlaces

Los selectores de atributos pueden usarse para aplicar estilos a enlaces según su atributo href.

Consejo: Agregar icono a enlaces externos

a[href^="http"]:after {
  content: "↗️";
}

También puedes aplicar estilos a enlaces que apuntan a un tipo de archivo específico, como PDFs:

Consejo: Aplicar estilos a enlaces de PDF

a[href$=".pdf"] {
  background-image: url('pdf-icon.png');
  padding-left: 20px;
}

Seleccionar atributos de datos personalizados

HTML5 introdujo atributos de datos personalizados, que permiten almacenar información adicional en los elementos. Puedes usar selectores de atributos para seleccionar estos atributos personalizados y aplicar estilos según sus valores.

Consejo: Aplicar estilos a atributos de datos personalizados

<div data-theme="dark">Modo oscuro</div>
<div data-theme="light">Modo claro</div>
[data-theme="dark"] {
  background-color: #333;
  color: white;
}

[data-theme="light"] {
  background-color: white;
  color: #333;
}

Internacionalización

Los selectores de atributos pueden usarse para aplicar estilos a elementos según el atributo lang, que especifica el idioma del contenido del elemento. Esto es útil para sitios que admiten varios idiomas.

Consejo: Aplicar estilos según el idioma

[lang|="en"] {
  font-family: "English Font", sans-serif;
}

[lang|="ja"] {
  font-family: "Japanese Font", serif.
}

Mejores prácticas

Al usar selectores de atributos en tu CSS, sigue algunas mejores prácticas para mantener tu código eficiente y mantenible. Aquí tienes algunos consejos:

Escribe selectores eficientes

Aunque los selectores de atributos son útiles, usarlos en exceso puede llevar a un CSS complejo e ineficiente. Úsalos con moderación y combínalos con clases u otros selectores más simples cuando sea posible.

Consejo: Escribe selectores eficientes

/* Menos eficiente */
[data-type="button"][data-size="large"][data-color="primary"] {
  /* estilos */
}

/* Más eficiente */
.btn-lg-primary {
  /* estilos */
}

Evita el uso excesivo

Evita usar selectores de atributos para dar estilo a un gran número de elementos. Aplicar estilos a elementos como [class] o [href] puede coincidir con muchos elementos y ralentizar tu página. En su lugar, usa selectores o clases más específicos.

Consejo: Evita el uso excesivo

/* Evita esto */
[href] {
  color: blue;
}

/* En su lugar, usa una clase o un selector más específico */
a {
  color: blue;
}

Considera la especificidad

Los selectores de atributos tienen mayor especificidad que los selectores de clase, pseudo-clase o elemento, pero menor especificidad que los IDs. Esto significa que los estilos aplicados con selectores de atributos pueden ser difíciles de anular.

Para manejar la especificidad, intenta usar selectores de atributos en combinación con clases en lugar de por sí solos. Esto hace que tus estilos sean más modulares y fáciles de trabajar.

Consejo: Considera la especificidad

/* Mayor especificidad, más difícil de anular */
[type="text"] {
  border: 1px solid black;
}

/* Menor especificidad, más modular */
.text-input[type="text"] {
  border: 1px solid black;
}