O CSS attr() recebe um upgrade

Publicado em 15 de janeiro de 2025

A função attr() reprojetada

Com o CSS attr(), é possível usar o valor de um atributo HTML no CSS. Até agora, attr() só funcionava na propriedade content de pseudoelementos e só podia analisar valores em um <string> do CSS.

A função attr() redesenhada, disponível no Chrome 133, desbloqueia mais recursos. Agora é possível usar attr() com qualquer propriedade CSS, incluindo propriedades personalizadas, e analisar valores em tipos de dados diferentes de <string>.

Exemplos

No exemplo a seguir, o valor da propriedade color para div usa o valor do atributo data-color. Esse valor de atributo é analisado em um <color> usando attr() e type(). O valor padrão é definido como red.

<div data-foo="blue">test</div>
div {
  color: attr(data-foo type(<color>), red);
}

No próximo exemplo, a propriedade view-transition-name é determinada pelo atributo id do elemento. O atributo é analisado em um <custom-ident>, que é o tipo necessário para view-transition-name. Sem attr(), você precisava declarar um view-transition-name para cada cartão, mas agora é possível fazer isso de uma só vez.

<div class="cards">
  <div class="card" id="card-1"></div>
  <div class="card" id="card-2"></div>
  <div class="card" id="card-3"></div>
  <div class="card" id="card-4"></div>
</div>
.card {
  view-transition-name: attr(id type(<custom-ident>), none); /* card-1, card-2, card-3, etc. */
  view-transition-class: card;
}

Também é possível analisar valores em um comprimento definindo o tipo como qualquer identificador que corresponda a uma unidade de dimensão CSS ou ao caractere %. No exemplo a seguir, o atributo data-size é analisado em um valor de pixel.

<div data-size="10">test</div>
div {
  font-size: attr(data-size px);
}

Ao usar attr() sem nenhum tipo, o atributo é analisado em uma string CSS, que é o mesmo comportamento anterior.

Saiba mais

Saiba mais sobre attr() na especificação e no MDN.