Texte flou après avoir utilisé CSS transform: scale (); dans Chrome

semble comme il y a eu une mise à jour récente à Google Chrome qui provoque texte flou après avoir fait un transform: scale() . Spécifiquement je fais ceci:

@-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);
  }
}

si vous visitez http://rourkery.com dans Chrome, vous devriez voir le problème sur la zone de texte principale. Il n'a pas l'habitude de le faire et il ne semble pas affecter d'autres navigateurs webkit (comme Safari). Il y avait d'autres Billets sur des personnes éprouvant un problème similaire avec la 3d il se transforme, mais on ne trouve rien sur les 2D comme ça.

toutes les idées seraient appréciées, merci!

76
demandé sur Mosh Feu 2013-02-04 01:26:05

17 réponses

j'ai eu ce problème un certain nombre de fois et il semble y avoir 2 façons de le fixer (voir ci-dessous). Vous pouvez utiliser l'une de ces propriétés pour résoudre le rendu, ou les deux en même temps.

Backface visibilité caché résout le problème car il simplifie l'animation juste à l'avant de l'objet, alors que l'état par défaut est l'avant et l'arrière.

backface-visibility: hidden;

TranslateZ fonctionne aussi comme il est un hack pour ajouter l'accélération matérielle pour l'animation.

transform: translateZ(0);

ces Deux propriétés résoudre le problème que vous rencontrez, mais certaines personnes aiment aussi ajouter

-webkit-font-smoothing: subpixel-antialiased;

à leur objet animé. Je trouve qu'il peut modifier le rendu d'une police web mais n'hésitez pas à essayer cette méthode de trop.

49
répondu 2ne 2017-02-08 21:21:01

au lieu de

transform: scale(1.5);

utilisant

zoom : 150%;

corrige le problème de flou de texte dans Chrome.

9
répondu Naisheel Verdhan 2015-02-28 19:56:59

j'ai trouvé que l'ajustement du ratio d'échelle a aidé légèrement.

utilisant scale(1.048) sur (1.05) semble générer une meilleure approximation de la taille de police d'un pixel entier, réduisant le flou sous-pixel.

j'ai aussi utilisé translateZ(0) qui semble ajuster la dernière étape D'arrondi de Chrome dans l'animation transform. C'est un plus pour mon usage onhover car il augmente la vitesse et réduit le bruit visuel. Pour une fonction onclick cependant, I Je ne l'utiliserais pas parce que la police transformée ne semble pas être aussi croustillante.

7
répondu Jordan Nakamoto 2017-02-22 23:11:58

les Sunderls me conduisent à la réponse. Sauf que filter: scale n'existe pas, mais filter: blur existe.

appliquer les déclarations suivantes aux éléments qui semblent flous (dans mon cas, ils étaient à l'intérieur d'un élément transformé):

backface-visibility: hidden;    
-webkit-filter: blur(0);

Il presque a parfaitement fonctionné. " presque " parce que j'utilise une transition et pendant la transition, les éléments ne semblent pas parfaits, mais une fois la transition est fait, ils le font.

5
répondu ruidovisual 2015-12-10 18:25:21

afin D'améliorer l'effet de flou, de l'esp. sur Chrome, essayez de faire ceci:

transform: perspective(1px) translateZ(0);
backface-visibility: hidden;
4
répondu ykadaru 2016-12-05 20:51:30

il doit s'agir d'un bug avec Chrome (Version 56.0.2924.87), mais ce qui suit corrige le flou pour moi lors de la modification des propriétés css dans la console('.0'). Je vais le signaler.

filter: blur(.0px)
4
répondu andyw 2017-03-31 10:39:38

essayez d'utiliser zoom: 101%; pour les conceptions complexes lorsque vous ne pouvez pas utiliser une combinaison de zoom + échelle.

3
répondu Tom Roggero 2016-09-30 07:17:25

dans mon cas le code suivant a causé une police floue:

-webkit-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);

et juste en ajoutant la propriété zoom l'a réparé pour moi. Jouer avec zoom, suivant travaillé pour moi:

zoom: 97%;   
2
répondu Raza Ahmed 2017-01-04 17:10:02

j'ai découvert que le problème se passe sur les transformations relatives quelque sorte. translateX(50%), l'échelle(1.1) ou ce que jamais. fournir des valeurs absolues fonctionne toujours (ne produit pas de texte flou(ures)).

aucune des solutions mentionnées ici n'a fonctionné, et je pense qu'il n'y a pas encore de solution (en utilisant Chrome 62.0.3202.94 pendant que j'écris ceci).

dans mon cas transform: translateY(-50%) translateX(-50%) provoque le flou (je veux centrer un dialogue).

à atteindre un peu plus de valeurs" absolues", j'ai dû mettre des valeurs décimales à transform: translateY(-50.09%) translateX(-50.09%) .

NOTE

je suis tout à fait sûr, que ces valeurs varient sur différentes tailles d'écran. Je voulais juste partager mes expériences, au cas où ça aiderait quelqu'un.

1
répondu scipper 2017-11-29 08:27:43

pour moi, le problème était que mes éléments utilisaient transformStyle: preserve-3d . J'ai réalisé que ce n'était pas vraiment nécessaire pour l'application et l'enlever a corrigé le flou.

0
répondu Normangorman 2017-07-13 09:42:23

rien de ce qui précède n'a fonctionné pour moi. J'avais cette animation pour popups:

@keyframes pulse {
  from {
    transform: scale3d(1, 1, 1);
  }
  50% {
    transform: scale3d(1.05, 1.05, 1.05);
  }
  to {
    transform: scale3d(1, 1, 1);
  }
}

dans mon cas effet flou a disparu après l'application de cette règle: -webkit-perspective: 1000; même s'il est marqué comme utilisé dans Chrome inspecteur.

0
répondu Gendos-ua 2017-07-28 15:32:39

j'ai trouvé une solution beaucoup mieux et propre:

.element{
 transform:scale(0.5) 
 transform-origin: 100% 0;
}

ou

.element{
 transform:scale(0.5) 
 transform-origin: 0% 0;
}

merci à ce post: prévention de la formation de flous avec transform: échelle

0
répondu Gabriel G 2017-10-06 03:37:53

rien de ce qui précède n'a fonctionné pour moi.

ça a marché quand j'ai ajouté perspective

c'est à dire de

transform : translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)

j'ai changé en

transform : perspective(1px) translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)

0
répondu Sengupta Amit 2018-02-05 16:58:10

j'ai corrigé mon cas en ajoutant:

transform: perspective(-1px)
0
répondu Anders Lund 2018-06-05 06:53:21

le texte ne sera pas flou si vous ne le faites pas transition le transform .

faites Simplement ceci:

&:hover {
    transform: scale(1.1);
}

sans la transition comme transition: all .2s;

0
répondu kyw 2018-07-01 12:06:53

il est important d'ajouter que cette question se pose si l'élément qui est traduit a une hauteur avec un nombre impair de pixels. Ainsi, si vous avez le contrôle sur la hauteur de l'élément, le paramétrer à un nombre pair fera apparaître le Contenu net

-1
répondu Stojan Mihajlovski 2017-03-15 11:50:00

vous pouvez utiliser css filter pour corriger cela.

.element {
    filter: blur(0);
}

à propos de vendor-prefix, s'il vous plaît le faire par vous-même. -webkit-filter , -ms-filter . le détail est ici http://browser.colla.me/show/css_transformation_scale_cause_blurring

-2
répondu sunderls 2016-10-07 07:54:20