Usando :focus-visible para Melhorar a Acessibilidade

A propriedade CSS :focus-visible é uma maneira inteligente de aplicar estilos de foco apenas quando eles são realmente úteis, como quando um usuário está navegando com o teclado. Isso ajuda a criar interfaces mais acessíveis e evita estilos desnecessários quando o foco é acionado por um mouse ou toque.


O que é :focus-visible?


Exemplo de Uso

HTML

<button>Clique aqui</button>
<input type="text" placeholder="Digite algo">
<a href="#">Link de exemplo</a>

CSS

/* Estilo padrão para todos os elementos */
button, input, a {
  padding: 10px 20px;
  font-size: 16px;
  border: 2px solid transparent;
  border-radius: 5px;
  transition: border-color 0.3s;
}

/* Estilo de foco visível (apenas para navegação por teclado) */
button:focus-visible,
input:focus-visible,
a:focus-visible {
  border-color: #007BFF;
  outline: none; /* Remove o outline padrão */
  box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.5); /* Adiciona um destaque suave */
}

Explicação do Código

  1. Estilo Padrão:

  2. :focus-visible:


Por que Usar :focus-visible?

  1. Melhora a Acessibilidade:

  2. Interface Mais Limpa:

  3. Personalização:


Boas Práticas

  1. Contraste Adequado:

  2. Teste em Diferentes Navegadores:

  3. Combine com :focus:


Exemplo Completo

Aqui está o código completo para você testar:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exemplo de :focus-visible</title>
    <style>
        /* Estilo padrão para todos os elementos */
        button, input, a {
            padding: 10px 20px;
            font-size: 16px;
            border: 2px solid transparent;
            border-radius: 5px;
            transition: border-color 0.3s;
            margin: 10px;
            display: inline-block;
            text-decoration: none;
            color: #333;
        }

        /* Estilo de foco visível (apenas para navegação por teclado) */
        button:focus-visible,
        input:focus-visible,
        a:focus-visible {
            border-color: #007BFF;
            outline: none; /* Remove o outline padrão */
            box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.5); /* Adiciona um destaque suave */
        }
    </style>
</head>
<body>
    <button>Clique aqui</button>
    <input type="text" placeholder="Digite algo">
    <a href="#">Link de exemplo</a>
</body>
</html>

Conclusão

Usar :focus-visible é uma maneira eficaz de melhorar a acessibilidade e a usabilidade da sua interface, garantindo que os estilos de foco sejam aplicados apenas quando necessário. Experimente essa técnica em seus projetos e veja a diferença!