Eu tenho alguns CSS que, ao passar o mouse, um efeito de transição CSS move uma div.
O problema, como você pode ver no exemplo, é que a translate
transição tem o horrível efeito colateral de fazer com que a imagem na div se mova 1px para baixo / direita (e possivelmente redimensione levemente?) Para que ela pareça deslocada e fora de foco...
A falha parece se aplicar o tempo todo em que o efeito de foco é aplicado e, a partir de um processo de tentativa e erro, posso dizer com segurança que apenas parece ocorrer quando a transição de conversão move a div (a sombra e a opacidade da caixa também são aplicadas, mas não fazem diferença para o erro quando removido).
O problema parece acontecer apenas quando a página possui barras de rolagem. Portanto, o exemplo com apenas uma instância da div é bom, mas mais uma vez divs idênticas são adicionadas e a página requer uma barra de rolagem, o problema ocorre novamente ...
Respostas:
Atualização 2020
image-rendering
propriedade CSS.<img>
tag usando a propriedade CSS de ajuste ao objeto .Resposta original
Tente isso em seu CSS :
O que isso faz é fazer com que a divisão se comporte "mais em 2D".
backface-visibility
etransform
sem o-webkit-
prefixo. No momento, não sei como isso afeta a renderização de outros navegadores (FF, IE); portanto, use as versões não prefixadas com cautela.fonte
-webkit-transform
, não consigo realmente ver uma alteração, e quando abro o console do desenvolvedor do chromes. Vejo que essas 2 propriedades css são traçadas, como se fossem substituídas, mas não são (css e html vazias). É como se o cromo não os aceitasse mais.Você precisa aplicar a transformação 3d ao elemento, para que ele obtenha sua própria camada composta. Por exemplo:
ou
Mais sobre os critérios de criação de camadas, você pode ler aqui: Renderização acelerada no Chrome
Uma explicação:
Exemplos (passe a caixa verde):
Quando você usa qualquer transição no seu elemento, ele faz com que o navegador recalcule os estilos, re-layout do seu conteúdo, mesmo que a propriedade da transição seja visual (nos meus exemplos, é uma opacidade) e, finalmente, pinte um elemento:
O problema aqui é o re-layout do conteúdo que pode afetar os elementos "dançando" ou "piscando" na página durante a transição. Se você for para as configurações, marque a caixa de seleção "Mostrar camadas compostas" e aplique a transformação 3d a um elemento, verá que ele obtém sua própria camada, delineada com borda laranja.
Depois que o elemento obtém sua própria camada, o navegador só precisa compor as camadas na transição sem re-layout ou mesmo operações de pintura, para que o problema precise ser resolvido:
fonte
translateZ: 0.000001
(algum número infinitesimal) e pronto! Imagens de fundo nítidas mais uma vez!Teve o mesmo problema com o iframe do youtube incorporado (as traduções foram usadas para centralizar o elemento iframe). Nenhuma das soluções acima funcionou até tentar redefinir os filtros css e a mágica.
Estrutura:
Estilo [antes]
Estilo [depois]
fonte
filter: blur(0)
fez isso por mim!-webkit-
prefixo não deveria vir antes? Mais informaçõesEu recomendei um novo atributo experimental CSS que testei no navegador mais recente e é bom:
Com isso, o navegador conhecerá o algoritmo para renderização
fonte
image-rendering: -webkit-optimize-contrast;
resolve o problema no Chrome. No entanto, imagens em outros navegadores, por exemplo, Firefox, são renderizadas muito, muito pior com o conjunto de opções de renderização. Portanto, eu uso apenas a diretiva WebKit, que também funciona no mecanismo Blink. Obrigado!Acabei de encontrar outro motivo pelo qual um elemento fica embaçado ao ser transformado. Eu estava usando
transform: translate3d(-5.5px, -18px, 0);
para reposicionar um elemento depois que ele foi carregado, no entanto, esse elemento ficou embaçado.Eu tentei todas as sugestões acima, mas aconteceu que eu estava usando um valor decimal para um dos valores de conversão. Números inteiros não causam o desfoque, e quanto mais longe eu era do número inteiro, pior o desfoque se tornava.
ou seja,
5.5px
borra o elemento mais,5.1px
menos.Só pensei em jogar isso aqui, caso isso ajude alguém.
fonte
Enganei o problema usando a transição por etapas, não suavemente
Não é uma solução, é uma trapaça e não pode ser aplicada em qualquer lugar.
Não sei explicar, mas funciona para mim. Nenhuma outra resposta me ajuda (OSX, Chrome 63, tela sem retina).
https://jsfiddle.net/tuzae6a9/6/
fonte
Escalar para dobrar e reduzir para metade com
zoom
funcionou para mim.fonte
Eu tentei cerca de 10 soluções possíveis. Misturá-los e eles ainda não funcionaram corretamente. Havia sempre 1px shake no final.
Acho a solução reduzindo o tempo de transição no filtro.
Isso não funcionou:
Solução:
Tente isso no violino:
Espero que isso ajude alguém.
fonte
Experimentar
filter: blur(0);
Funcionou para mim
fonte
Para mim, agora em 2018. A única coisa que resolveu o meu problema (uma linha branca intermitente que passa por uma imagem em foco) foi aplicá-la ao meu elemento de link, mantendo o elemento de imagem que possui
transform: scale(1.05)
fonte
Ajudei-me a definir o valor da duração da
.3s
transição com etapas iguais de tempo de transição.3s
fonte
Só tenho o mesmo problema. Tente definir a posição: em relação ao elemento pai, que funcionou para mim.
fonte