O CSS prefere-reduzir-transparência

Otimizar e ajustar para usuários que preferem uma interface opaca.

No Chrome 118, o novo recurso de consulta de mídia prefers-reduced-transparency das Consultas de mídia do CSS 5 está disponível. Interfaces não opacas podem causar dores de cabeça ou ser uma dificuldade visual para vários tipos de deficiência visual. É por isso que o Windows, o macOS e o iOS têm preferências do sistema que podem reduzir ou remover a transparência da interface.

Compatibilidade com navegadores

  • Chrome: 118.
  • Edge: 118.
  • Firefox: atrás de uma flag.
  • Safari: não é compatível.

Origem

Com essa nova consulta de mídia no navegador, o CSS pode adaptar a interface para usuários que especificam um desejo de transparência reduzida:

.example {
  --opacity: .5;

  background: hsl(200 100% 50% / var(--opacity));

  @media (prefers-reduced-transparency: reduce) {
    --opacity: .95;
  }
}

No exemplo de código anterior, uma variável CSS contém um valor de opacidade em 50%, que é usado com HSL para criar um plano de fundo azul semitransparente. A consulta de mídia anexada verifica se o usuário prefere uma transparência reduzida. Quando essa opção é definida como verdadeira, a variável de opacidade é ajustada para 95%, um valor de opacidade quase opaco.

Essa consulta de mídia se encaixa bem nas outras consultas de preferência de mídia, que permitem que designers e desenvolvedores sejam criativos e se ajustem aos usuários. Você pode pensar nessas consultas de mídia como uma cadeira em um carro que se ajusta automaticamente à posição do usuário. Quando um usuário visita seu site, ela se ajusta automaticamente sem que ele precise pedir. Muito legal.

Casos de uso para reduzir a transparência

As próximas seções serão dedicadas a mostrar momentos e oportunidades para reduzir a transparência de maneiras significativas.

Legendas semitransparentes em imagens

É bastante comum sobrepor uma miniatura de imagem ou vídeo com uma legenda ou um resumo semitransparente. O exemplo a seguir ilustra uma maneira de processar uma preferência para reduzir a transparência. A sobreposição é totalmente removida, e o mesmo conteúdo de legenda é mostrado abaixo da imagem, em vez de ser sobreposto.

Modals, notificações e pop-ups transparentes

Outra maneira de elementos da interface sobrepor o conteúdo, o que geralmente significa que elementos de opacidade estão presentes, é com modais, notificações e pop-ups. Nesses casos, aumentar a opacidade pode respeitar a preferência do usuário e, ao mesmo tempo, permitir que uma quantidade sutil de cor apareça por trás da sobreposição.

.card {
  background: hsl(none none 100% / 20%);

  @media (prefers-reduced-transparency: reduce) {
    background: hsl(none none 0% / 80%);
  }
}

Vidro fosco adaptável

Outro estilo de sobreposição de imagem popular é o vidro fosco. No exemplo abaixo, a imagem atrás da legenda é um reflexo da imagem do produto. Isso tem algumas vantagens: a imagem não é cortada e a preferência por luz ou escuro pode aparecer um pouco mais no resultado final.

.adaptive-glass {
  --glass-lightness: 100%;
  --glass-alpha: 50%;

  background: hsl(0 0% var(--glass-lightness) / var(--glass-alpha));
  backdrop-filter: blur(40px);

  @media (prefers-color-scheme: dark) {
    --glass-lightness: 0%;
  }

  @media (prefers-reduced-transparency: reduce) {
    --glass-alpha: 85%;
  }
}

Cabeçalho do conteúdo principal

Um elemento comum da página inicial tem uma mensagem em negrito sobreposta a um vídeo em loop ou imagem animada. O exemplo a seguir tem uma sobreposição de gradiente semitransparente colorido e uma imagem de plano de fundo animada infinitamente. Embora isso possa atrair muitas pessoas, também vai criar problemas para muitas delas devido ao baixo contraste com transparência e movimento que não podem ser controlados.

Isso pode ser corrigido com duas consultas de mídia CSS: prefers-reduced-motion e prefers-reduced-transparency. Na consulta de mídia de movimento reduzido, é possível aplicar a animação infinita somente se o usuário tiver "sem preferência" para movimento reduzido, indicando ao código que não há problema em mostrar movimento para esse usuário.

Além disso, com a consulta de mídia de transparência reduzida, é possível diminuir a opacidade para que a cor da sobreposição seja quase 100%. Agora a mensagem pode ser lida com facilidade sem distrações de movimento ou contraste problemático.

Ao juntar tudo isso, você pode implantar uma aparência criativa da interface, garantindo que o público-alvo possa ler e entender a mensagem.

.Hero img {
  @media (prefers-reduced-motion: no-preference) {
    animation: zoom 30s ease infinite;
  }
}

.Hero .overlay {
  background: hsl(none none 0% / 95%);

  @media (prefers-reduced-transparency: no-preference) {
    background: linear-gradient(
      to top right in oklab,
      oklch(40% 0.3 340 / 70%),
      oklch(40% 0.4 200 / 70%)
    );
  }
}

Perspectivas aditivas e subtrativas sobre as preferências do usuário

O exemplo anterior não verificava essas preferências do usuário para a preferência reduzida, em vez disso, verificava a ausência de preferência.

@media (prefers-reduced-transparency: no-preference) {
  
}

Desenvolvedores e designers costumam "regredir" a experiência do usuário com base nessas preferências, em uma mentalidade subtrativa. Isso aparece nas consultas de mídia como uma verificação de "redução", em que algo da interface é removido. O exemplo mostra uma mentalidade aditiva, em que o movimento e a transparência são adicionados se o usuário concordar.

Essa abordagem ajuda você a pensar em uma experiência de referência saudável que seja robusta por si só. Em seguida, se o usuário aceitar, adicione à experiência.

Devtools

O Chrome DevTools pode emular essa preferência para reduzir a transparência (e mais) na guia Renderização. No vídeo a seguir, confira como alternar as consultas de mídia "prefers-color-scheme" e "prefers-reduced-transparency" para mostrar as variantes de transparência reduzida, transparente, clara e escura do cartão de vidro fosco.

https://codepen.io/web-dot-dev/pen/dyaojxr