IF / ELSE em CSS | CSS
- IF / ELSE em CSS | CSS
🎯 Exemplo prático
Alterar a cor de um aviso com base no status
HTML
<div class="notice" data-status="error">
Algo deu errado!
</div>
CSS
.notice {
--noticeStatus: attr(data-status);
background-color: if(
style(--noticeStatus: "error"): #d81a19;
style(--noticeStatus: "warning"): #ffc500;
style(--noticeStatus: "success"): #4caf50;
else: #ddd;
);
color: white;
padding: 16px;
border-radius: 8px;
}
📝 Como isso funciona
1️⃣ Ler o estado do elemento
--noticeStatus: attr(data-status);
Aqui usamos attr() para capturar o valor do atributo data-status diretamente do HTML.
2️⃣ Executar a lógica condicional
if(
style(--noticeStatus: "error"): #d81a19;
style(--noticeStatus: "warning"): #ffc500;
style(--noticeStatus: "success"): #4caf50;
else: #ddd;
)
O CSS avalia as condições em ordem, como um if / else if / else tradicional:
Valor de data-status | Cor aplicada |
|---|---|
"error" | Vermelho |
"warning" | Amarelo |
"success" | Verde |
| Qualquer outro | Cinza |
⭐ O grande diferencial
👉 Você controla todo o estado do componente com um único atributo HTML.
<div class="notice" data-status="success"></div>
Sem classes extras Sem JavaScript Sem duplicação de CSS
Isso aproxima o CSS de um modelo mais declarativo e semântico.
⚡ E o attr()? Não era só para content?
Era. Mas não é mais.
🆕 Novo attr()
Agora o attr() pode ser usado em qualquer propriedade CSS, não apenas em content.
Além disso, ele permite:
- Tipagem (
attr(data-size length)) - Valores de fallback
- Uso em variáveis CSS
Isso desbloqueia padrões muito mais poderosos de estilização baseada em estado.
⚠️ Observação: essa funcionalidade ainda está evoluindo e não é 100% compatível.
📊 Suporte de navegadores (2025)
| Recurso | Suporte aproximado |
|---|---|
if() | ~64% |
Novo attr() | ~65% |
👉 Ou seja: use com cautela em produção 👉 Ideal para experimentos, progressive enhancement e design systems modernos
🧩 Outras formas de lógica em CSS
Vale lembrar que if() não é a única forma de condicional no CSS moderno.
Também existem:
@containerqueries@supports:has()clamp(),min(),max()- Media queries avançadas
O CSS está, aos poucos, se tornando uma linguagem muito mais expressiva.
📚 Recursos oficiais
-
Can I Use – CSS if() https://caniuse.com/css-if
-
Can I Use – Novo attr() https://lnkd.in/gWJhJ7ax
-
MDN Web Docs – if() https://lnkd.in/gv59eFBN
-
Chrome Blog – Advanced attr() https://lnkd.in/gBBfge7G