Parece que houve uma atualização recente no Google Chrome que causa texto embaçado depois de fazer um transform: scale()
. Especificamente, estou fazendo isso:
@-webkit-keyframes bounceIn {
0% {
opacity: 0;
-webkit-transform: scale(.3);
}
50% {
opacity: 1;
-webkit-transform: scale(1.05);
}
70% {
-webkit-transform: scale(.9);
}
100% {
-webkit-transform: scale(1);
}
}
Se você visitar http://rourkery.com no Chrome, deverá ver o problema na área de texto principal. Não costumava fazer isso e parece não afetar outros navegadores de kit da web (como o Safari). Houve outras postagens sobre pessoas com problemas semelhantes nas transformações 3D, mas não conseguimos encontrar nada sobre transformações 2D como esta.
Todas as idéias seriam apreciadas, obrigado!
google-chrome
css
webkit
transform
css-animations
Ryan O'Rourke
fonte
fonte
Respostas:
Eu tenho esse problema várias vezes e parece haver duas maneiras de corrigi-lo (mostrado abaixo). Você pode usar uma dessas propriedades para corrigir a renderização ou ambas ao mesmo tempo.
A visibilidade da face traseira oculta corrige o problema, pois simplifica a animação apenas na frente do objeto, enquanto o estado padrão é a frente e a traseira.
O TranslateZ também funciona, pois é um truque para adicionar aceleração de hardware à animação.
Ambas as propriedades corrigem o problema que você está tendo, mas algumas pessoas também gostam de adicionar
ao seu animado para objetar. Acho que ele pode alterar a renderização de uma fonte da Web, mas fique à vontade para experimentar esse método também.
fonte
backface-visibility: hidden;
com certeza funcionou no meu caso, na solução de um movimento embaçado estranho causado pela transição da opacidade, isto é. O movimento estranho agora se foi, mas tornou os textos em minha div permanentemente borrados.perspective(1px)
ao seutransform:
código, isso funcionou para mim no Chrome enquanto nada resolveu o problemaPara melhorar o embaçamento, esp. no Chrome, tente fazer o seguinte:
ATUALIZAÇÃO: A perspectiva adiciona distância entre o usuário e o plano z, que tecnicamente dimensiona o objeto, fazendo com que o embaçamento pareça 'permanente'. O
perspective(1px)
acima é como uma fita de pato, porque estamos combinando com o embaçamento que estamos tentando resolver. Você pode ter melhor sorte com o css abaixo:fonte
perspective(1px)
propriedade e ver se funciona melhor.Descobri que o ajuste da proporção da escala ajudou um pouco.
Usando
scale(1.048)
mais(1.05)
parecia gerar uma melhor aproximação a um tamanho de fonte de pixel inteiro, reduzindo a desfocagem do sub-pixel.Também usei o
translateZ(0)
que parece ajustar a etapa de arredondamento final do Chrome na animação de transformação. Essa é uma vantagem para o meu uso em trânsito, porque aumenta a velocidade e reduz o ruído visual. Para uma função onclick, no entanto, eu não a usaria porque, a fonte transformada não parece tão crocante.fonte
translateZ(0)
, mudou apenas1.05
para1.048
Depois de tentar tudo o resto aqui sem sorte, o que finalmente resolveu esse problema foi a remoção da
will-change: transform;
propriedade. Por alguma razão, causou uma escala horrivelmente embaçada no Chrome, mas não no Firefox.fonte
will-change: transform;
um pouco corrige o problemaAo invés de
usando
corrige o problema de desfoque de texto no Chrome.
fonte
Isso deve ser um erro no Chrome (versão 56.0.2924.87), mas o abaixo corrige o borrão para mim ao alterar as propriedades de css no console ('. 0'). Vou denunciá-lo.
fonte
transform: translate3d();
e isso parece causar o problema. Nenhuma das soluções sugeridas funcionou para mim. Exceto / meio que este. Isso funciona apenas se eu o definir primeiro com algum valor positivo (por exemplo,blur(0.1px)
) e depois mudar parablur(0px)
. Como o elemento é dinâmico e também requer uma solução dinâmica (JS), ... isso é péssimo: \Sunderls me levam à resposta. Exceto
filter: scale
não existe, mas existefilter: blur
.Aplique as próximas declarações aos elementos que parecem desfocados (no meu caso, eles estavam dentro de um elemento transformado):
É quase funcionou perfeitamente. " Quase " porque estou usando uma transição e, enquanto está em transição, os elementos não parecem perfeitos, mas depois que a transição é concluída, eles o fazem.
fonte
-webkit-filter: blur(0);
sozinho trabalha para mim.backface-visibility: hidden;
borra meu elemento quando redefinir a escala depois.blur(0px);
ele não será corrigido. mas se eu fizerblur(1px);
e, em seguida, pressione a tecla de seta para baixo parablur(0px);
que pareça correta. Ido na página de atualização / Não importa o que eu escrevo no CSSEu descobri que o problema ocorre em transformações relativas de qualquer maneira. translateX (50%), escala (1.1) ou o que for. fornecer valores absolutos sempre funciona (não produz texto embaçado (ures)).
Nenhuma das soluções mencionadas aqui funcionou e acho que ainda não há solução (usando o Chrome 62.0.3202.94 enquanto escrevo isso).
No meu caso,
transform: translateY(-50%) translateX(-50%)
causa o desfoque (quero centralizar uma caixa de diálogo).Para alcançar valores um pouco mais "absolutos", tive que definir valores decimais como
transform: translateY(-50.09%) translateX(-50.09%)
.NOTA
Tenho certeza de que esses valores variam em diferentes tamanhos de tela. Eu só queria compartilhar minhas experiências, caso isso ajude alguém.
fonte
Eu encontrei uma solução muito melhor e limpa:
ou
Graças a este post: Evitando a renderização embaçada com o transform: scale
fonte
Adicionando
perspective(1px)
funcionou para mim.para
fonte
Tente usar
zoom: 101%;
projetos complexos quando não puder usar uma combinação de zoom + escala.fonte
zoom
não é definido por nenhum padrão da Web e não é suportado pelo firefox caniuse.com/#feat=css-zoomNo meu caso, o código a seguir causou uma fonte borrada:
e apenas adicionar a propriedade zoom corrigiu isso para mim. Brinque com o zoom, a seguir funcionou para mim:
fonte
zoom
Outra correção a ser encontrada nas transformações embaçadas (translate3d, scaleX) no Chrome é definir o elemento como " display: inline-table ;". Parece forçar o arredondamento de pixels em alguns casos (no eixo X).
Eu li que o posicionamento do subpixel no Chrome foi planejado e os desenvolvedores não o corrigem.
fonte
Atualização de 2019
O bug de exibição do Chrome ainda não foi corrigido e, embora não seja culpa dos usuários, nenhuma das sugestões oferecidas na totalidade deste site ajuda a resolver o problema. Posso concordar que tentei cada um deles em vão: apenas 1 chega perto e essa é a regra do css: filter: blur (0); que elimina a mudança de um contêiner em 1px, mas não resolve o erro de exibição desfocada do próprio contêiner e de qualquer conteúdo que ele possa ter.
Aqui está a realidade: literalmente, não há solução para esse problema, então aqui está uma solução alternativa para sites fluidos
CASO
Atualmente, estou desenvolvendo um site fluido e tenho 3 divs, todos centralizados com efeitos de foco e compartilhando valores percentuais na largura e na posição. O bug do Chrome ocorre no contêiner central, definido para a esquerda: 50%; e transformar: translateX (-50%); uma configuração comum.
EXEMPLO: Primeiro o HTML ...
Aqui está o CSS onde o bug do Chrome ocorre ...
Aqui está o CSS fixo ...
Violino com bug: https://jsfiddle.net/m9bgrunx/2/
Violino fixo: https://jsfiddle.net/uoc6e2dm/2/
Como você pode ver, uma pequena quantidade de ajustes no CSS deve reduzir ou eliminar o requisito de usar a conversão para o posicionamento. Isso também se aplica a sites de largura fixa e fluidos.
fonte
Eu tenho esse mesmo problema. Corrigi isso usando:
fonte
Nenhuma das opções acima funcionou para mim. Eu tive essa animação para pop-ups:
No meu caso, o efeito embaçado desapareceu após a aplicação desta regra:
-webkit-perspective: 1000;
mesmo que esteja marcada como não utilizada no inspetor do Chrome.fonte
will-change: transform;
que corrige embaçadas das bordas dos elementos. Quaisquer outras respostas não funcionaram para mim.Minha solução foi:
display: inicial;
Então ficou crocante
fonte
Nenhuma das opções acima funcionou para mim.
Funcionou quando adicionei perspectiva
ou seja, de
transform : translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)
eu mudei para
transform : perspective(1px) translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)
fonte
perspective(1px)
realmente piorou para mim :(Corrigi meu caso adicionando:
fonte
scale()
resultado transformarPARA CHORME:
Eu tentei todas as sugestões aqui. Mas não funcionou. Minha faculdade encontrou uma ótima solução, que funciona melhor:
Você NÃO deve ultrapassar 1,0
E inclua
translateZ(0)
no foco, mas NÃO na posição inicial / sem foco.Exemplo:
fonte
Eu usei uma combinação de todas as respostas e foi isso que funcionou para mim no final:
fonte
Eu estava enfrentando o problema de texto embaçado no Chrome, mas não no Firefox quando usei
transform: translate(-50%,-50%)
.Bem, eu realmente tentei várias soluções alternativas, como:
Nada disso funcionou para mim.
Finalmente, ajustei a altura e a largura do elemento. Resolveu o problema para mim !!!
Nota: Pode depender do caso de uso para o caso de uso. Mas certamente vale a pena tentar!
fonte
Eu tentei muitos exemplos dessas respostas, infelizmente, nada de ajuda para o Chrome que
Version 81.0.4044.138
eu adicionei ao elemento de transformação.este
isso ajuda para mim
fonte
Para mim, o problema era que meus elementos estavam usando
transformStyle: preserve-3d
. Percebi que isso não era realmente necessário para o aplicativo e removê-lo corrigiu o embaçamento.fonte
Eu removi isso do meu código -
transform-style: preserve-3d;
e adicionei this-transform: perspective(1px) translateZ(0);
o borrão foi embora!
fonte
No Chrome 74.0.3729.169, atual em 25/5/19, não parece haver nenhuma correção para o desfoque ocorrido em determinados níveis de zoom do navegador causados pela transformação. Mesmo um simples
TransformY(50px)
irá desfocar o elemento. Isso não ocorre nas versões atuais do Firefox, Edge ou Safari e não parece ocorrer em todos os níveis de zoom.fonte
top: 0, bottom: 0, left: 0; right: 0; margin: auto
mas o contêiner ocupará todo o espaço possível (deve ser a largura); portanto, isso não funcionará no caso em que o conteúdo decida qual será o tamanho do contêiner.Será difícil resolver com apenas css.
Então eu resolvi com o jquery.
Este é o meu CSS.
e este é o meu jquery.
fonte
Apenas para adicionar à mania das correções, colocar {border: 1px solid # ???} em torno do objeto de aparência ruim corrige o problema para mim. Caso você tenha uma cor de fundo estável, considere isso também. Isso é tão idiota que ninguém pensou em mencionar, eu acho, eh eh.
fonte
você pode usar o css
filter
para corrigir isso.sobre prefixo do fornecedor, faça você mesmo.
-webkit-filter
,-ms-filter
. detalhes estão aqui http://browser.colla.me/show/css_transformation_scale_cause_blurringfonte
filter: scale
acordo com developer.mozilla.org/en/docs/Web/CSS/filterO texto não serão borradas se você não faz
transition
otransform
.Apenas faça o seguinte:
Sem a transição como
transition: all .2s;
fonte