ATTR | CSS
- ATTR | CSS
🧠 Introduç ão
Tradicionalmente, a função attr() no CSS era limitada ao uso com a propriedade content, como em:
.title::before {
content: attr(data-title);
}
Isso restringia seu uso a inserir texto baseado em atributos HTML. No entanto, com as atualizações recentes, é possível utilizar attr() em outras propriedades CSS, como color, width, grid-column, entre outras, desde que especificado o tipo de dado.
🚀 A nova sintaxe de attr()
A nova sintaxe permite definir o tipo de dado que o valor do atributo representa:
color: attr(data-color type(<color>));
Além disso, é possível fornecer valores padrão para casos em que o atributo não esteja presente:
grid-column-start: attr(data-col-start type(<number>), 1);
Os tipos de dados suportados incluem:
<color><number><length><percentage><angle><time><image><string><custom-ident>- entre outros.
🧪 Detecção de suporte
Para verificar se o navegador suporta a nova funcionalidade de attr(), pode-se utilizar a regra @supports:
@supports (x: attr(x type(*))) {
/* Código CSS que utiliza attr() moderno */
}
Em pré-processadores como Sass, é necessário escapar a sintaxe:
@supports (#{"x: attr(x type(*))"}) {
/* Código CSS que utiliza attr() moderno */
}
💡 Casos de uso práticos
1. Definir colunas em grid
Utilize atributos data-col-start e data-col-end para controlar a posição de elementos em um grid:
<div data-col-start="1" data-col-end="3">Conteúdo</div>
div {
grid-column-start: attr(data-col-start type(<number>), 1);
grid-column-end: attr(data-col-end type(<number>), 2);
}
2. Ajustar altura de textarea com base em rows
textarea {
min-height: calc(attr(rows type(<number>)) * 1em);
}
3. Controlar atraso em animações
.element {
animation-delay: attr(data-delay type(<time>), 0s);
}
4. Aplicar cores dinâmicas
.element {
background-color: attr(data-bg type(<color>), #fff);
}
5. Definir áreas de grid
.element {
grid-area: attr(data-area type(<custom-ident>), auto);
}
🧰 Mini framework CSS com attr()
A funcionalidade moderna de attr() permite a criação de mini frameworks CSS, onde estilos podem ser controlados diretamente via atributos HTML, reduzindo a necessidade de classes adicionais e tornando o código mais declarativo.
✅ Vantagens sobre estilos inline
- Separação de preocupações: Mantém o estilo no CSS e o conteúdo no HTML.
- Previsibilidade: Facilita a manutenção e evita conflitos de estilos.
- Reutilização: Permite aplicar estilos consistentes em múltiplos elementos com diferentes valores de atributos.
⚠️ Suporte atual
Até o momento, a funcionalidade moderna de attr() está disponível apenas no Chrome. Espera-se que outros navegadores adotem essa funcionalidade em breve.