Qualquer maneira de evitar o destaque em azul dos elementos no Chrome ao clicar rapidamente?


123

Na maioria das vezes não estou preocupado com isso, mas eu tenho um carrossel de imagens e se eu clicar nos divs seguinte e anterior rapidamente, eles serão destacados no Chrome.

Tentei usar o contorno: nenhum, mas nenhum efeito. Existem soluções lá fora?


Não vejo este efeito na versão atual do Chrome
— Billal Begueradj

Eu sei que seu caso de uso é diferente, mas para qualquer outra pessoa que queira removê-lo de todos os links, eu não recomendo fazer isso. Eu tentei removê-lo em um PWA, mas sem o feedback visual, a percepção do usuário é que o aplicativo está mais lento.
— collimarco de

Respostas:


170

Além do link fornecido por Floremin , que limpa a seleção de texto usando JavaScript para "limpar" a seleção, você também pode usar CSS puro para fazer isso. O CSS está aqui ...

.noSelect {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

Basta adicionar o class="noSelect"atributo ao elemento ao qual deseja aplicar esta classe. Eu recomendo dar uma chance a esta solução CSS. Não há nada de errado em usar o JavaScript, só acredito que isso poderia ser potencialmente mais fácil e limpar um pouco as coisas em seu código.

Para o Chrome no Android, -webkit-tap-highlight-color: transparent; é uma regra adicional que você pode experimentar para obter suporte no Android.


1
Apenas para o Chrome, você provavelmente só precisa de user-selecte webkit-user-select.
— smts

Esta é a solução que estou buscando, pois estou tendo apenas o problema de realce no Chrome e funciona muito bem. Obrigado a todos que participaram!
— Smith

36
Não foi possível fazer funcionar com o Chrome no Android. Tive que usar-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
— Iwazaru

25
-webkit-tap-highlight-color: transparent; é a parte principal do Chrome
— FisNaN

Para cromo em android -webkit-tap-highlight-color: transparent; - Funcionou para mim obrigado!
— CK Munn de

213

Para Chrome no Android, você pode usar a propriedade CSS -webkit-tap-highlight-color :

-webkit-tap-highlight-color é uma propriedade CSS não padrão que define a cor do destaque que aparece sobre um link enquanto ele está sendo tocado. O destaque indica ao usuário que seu toque está sendo reconhecido com sucesso e indica em qual elemento ele está tocando.

Para remover o realce completamente, você pode definir o valor para transparent:

-webkit-tap-highlight-color: transparent;

Esteja ciente de que isso pode ter consequências sobre a acessibilidade: consulte outlinenone.com


4
Descobri que quando você executa em uma tela sensível ao toque, por exemplo, o Chrome se comporta de maneira muito semelhante ao Android. Eu tinha um <div> que piscava em azul sempre que você clicava em algum lugar dentro dele. Só quando usei essa resposta é que parou. Obrigado!
— Valorum

2
Nenhum dos outros attys css fará isso. Tão importante, já que o destaque da torneira distorce a aparência de tudo o que é clicado, prejudicando sua linguagem visual.
— Dominic Cerisano

23
-webkit-tap-highlight-color: transparent;parece funcionar também.
— Bernard

1
Gostei disso, para eventos touch é obrigatória! Esta informação tem uma utilidade "fora do gráfico"!
— Berker Yüceer

1
Esta é a solução que funcionou para mim em 2020
— Blue Bot

66

Estou executando o Chrome versão 60 e nenhuma das respostas CSS anteriores funcionou.

Descobri que o Chrome estava adicionando o destaque azul por meio do outlineestilo. Adicionar o seguinte CSS corrigiu para mim:

:focus {
    outline: none !important;
}

5
você, senhor, é um salva-vidas.
— beckah

2
este é o que funciona para o Chrome (versão 61) no Android
— Stefan,

Funciona para versões mais recentes do Chrome. Obrigado!
— CrazedCoder

Super, queria saber por que meu fiel não user-select:noneestava chegando a lugar nenhum
— Sean T

Eu tentei de tudo, mas funcionou como um encanto. Obrigado por salvar meus cabelos!
— Avinash Kumar

25

Mas, às vezes, mesmo com user-selecte touch-calloutdesligado, cursor: pointer;pode causar esse efeito, então, é só configurar cursor: default;e vai funcionar.


7
Esta é uma resposta correta, cursor: pointer;está realmente causando destaque. Mas -webkit-tap-highlight-color: transparent;é uma solução mais universal.
— yanot 01 de

1
@yanot: leia o aviso sobre -webkit-tap-highlight-colorantes de rotulá-la como uma solução relativamente universal : developer.mozilla.org/en-US/docs/Web/CSS/…
— Hassan Baig

@HassanBaig Eu acho que é óbvio que eu não quis dizer cross-browser universal , mas neste contexto, ou seja, em diferentes versões do Chrome
— yanot

2
obrigado - nenhuma das outras soluções funcionou para mim. Tive que remover o ponteiro do cursor para fazer o destaque azul ir embora
— RVP

3
cursor: defaultfuncionou para mim quando nada mais funcionou.
— Telarian

-2

Tente criar um manipulador para o evento select nesses elementos e no manipulador você pode limpar a seleção.

Dê uma olhada neste:

Limpar seleção de texto com JavaScript

É um exemplo de limpeza da seleção. Você só precisa modificá-lo para funcionar apenas no elemento específico de que precisa.


Então não pode ser corrigido por CSS, hein? Posso apenas limpar o texto selecionado dentro do meu manipulador de cliques? EDIT- Obrigado pelo exemplo. Isso é uma merda que tem que ser tratado via javascript. Eu esperava que fosse apenas um problema de CSS.
— Smith

Além disso, isso terá algum impacto na acessibilidade?
— Smith

Você poderia limpar o texto no manipulador de cliques, mas dê uma olhada na resposta @smts com CSS puro.
— Floremin

-8

Isso funciona melhor para mim:

.noSelect:hover {
  background-color: white;
}

6
Isso é RUIM e uma estrada para o inferno futuro. Sem ofensa.
— Mike Barwick

e se o fundo do site não for branco?
— rideon88

Isso não é sustentável. Ninguém faça isso, por favor.
— Telarian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.