Profundidade e textura
- Sobreponha várias sombras para criar efeitos de profundidade suaves e realistas.
- Use
filter: drop-shadow()em vez debox-shadowpara formas não retangulares ou PNGs transparentes. - Use
mix-blend-modeebackground-blend-modepara sobreposições de iluminação (limite o escopo comisolation: isolate)
.hero {
background-image: url('texture.png'), linear-gradient(to bottom, #fff, #eee);
background-blend-mode: soft-light;
}
Gradientes e color-mix()
Use in oklch ou in oklab para especificar explicitamente o espaço de cores de interpolação para gradientes ou color-mix().
in oklchpreserva melhor o croma, mas pode sair mais facilmente da gama do dispositivo, especialmente para diferenças maiores entre as coresin oklabpermanece na gama com mais facilidade (considerando endpoints na gama), mas pode criar cores dessaturadas no meio, especialmente ao interpolar entre matizes opostos.- NÃO use
in srgb, a menos que tenha um motivo específico para isso (por exemplo, se estiver criando um seletor de cores que precisa interpolar em srgb).
Fallback
Alguns navegadores anteriores a 2024 não são compatíveis com o espaço de interpolação de cores de gradiente. Para oferecer suporte a esses navegadores, use o token somente quando o uso dele for seguro, definindo uma variável:
:root {
--in-oklab: ;
--in-oklch: ;
}
@supports (linear-gradient(in oklab, white, black)) {
:root {
--in-oklab: in oklab;
--in-oklch: in oklch;
}
}
Em seguida, use como:
.card {
background: linear-gradient(to bottom var(--in-oklab), var(--accent-color), var(--darker));
}
- Importante: se você usar essa técnica, verifique se há sempre um preâmbulo de gradiente não vazio sem ela. Caso contrário, haverá um erro de sintaxe em navegadores mais antigos.
- Você NÃO precisa disso para o
color-mix(). Se um navegador for compatível comcolor-mix(), ele também será compatível com o argumentoin <color-space>.
Padrões
Muitos padrões podem ser criados com gradientes CSS + paradas rígidas, que podem ser mais flexíveis e ter melhor desempenho do que SVGs ou imagens externas, já que podem ter acesso a variáveis e comprimentos CSS do contexto ao redor.
Não é necessário repetir a posição duas vezes. Basta usar 0 ou 0%, e a correção de gradiente vai fazer o ajuste automático.
Confira alguns exemplos abaixo.
Listras verticais de 1em de largura cada:
background: linear-gradient(to right, var(--color-1) 50%, var(--color-2) 0) 0 / 2em;
Listras diagonais de 1em de largura cada:
background: repeating-linear-gradient(-45deg, var(--color-1) 0 1em, var(--color-2) 0 2em);
Padrão de tabuleiro de xadrez com quadrados de 1em:
background: repeating-conic-gradient(var(--color-1) 0 25%, var(--color-2) 0 50%) 0 / 2em 2em;
Poá com pontos de raio .5em espaçados em 2em (horizontal/verticalmente — multiplique por sqrt(2) para distância diagonal):
--distance: 2em;
--radius: .5em;
--polka: radial-gradient(circle, var(--color-1) var(--radius), transparent calc(var(--radius) + 1px));
background: var(--polka) 0 0, var(--polka) var(--distance) var(--distance) var(--color-2);
background-size: calc(var(--distance) * 2) calc(var(--distance) * 2);
Gráfico de pizza simples:
.pie {
--p: 80%;
width: 60px;
aspect-ratio: 1;
border-radius: 50%;
background: conic-gradient(var(--color-1) var(--p), transparent 0%) var(--color-2);
}
Importante: ao usar gradientes para renderizar gráficos, garanta que haja um substituto textual para leitores de tela. OBRIGATÓRIO: você PRECISA fornecer uma tabela de dados semânticos como alternativa acessível, conforme detalhado nas Diretrizes de programação de acessibilidade, nas diretrizes de texto e mídia alternativos.