On dirait qu'il y a eu une mise à jour récente de Google Chrome qui provoque un texte flou après avoir fait un transform: scale()
. Plus précisément, 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 dans la zone de texte principale. Il n'a pas l'habitude de faire cela et il ne semble pas affecter les autres navigateurs Webkit (comme Safari). Il y avait d'autres articles sur des personnes rencontrant un problème similaire avec les transformations 3D, mais je ne trouve rien sur les transformations 2D comme celle-ci.
Toutes les idées seraient appréciées, merci!
google-chrome
css
webkit
transform
css-animations
Ryan O'Rourke
la source
la source
Réponses:
J'ai ce problème plusieurs fois et il semble y avoir 2 façons de le résoudre (voir ci-dessous). Vous pouvez utiliser l'une de ces propriétés pour corriger le rendu, ou les deux en même temps.
La visibilité cachée de la face arrière résout le problème car elle simplifie l'animation à l'avant de l'objet, alors que l'état par défaut est l'avant et l'arrière.
TranslateZ fonctionne également car il s'agit d'un hack pour ajouter une accélération matérielle à l'animation.
Ces deux propriétés résolvent le problème que vous rencontrez, mais certaines personnes aiment également ajouter
à leur animés pour objecter. Je trouve que cela peut changer le rendu d'une police Web, mais n'hésitez pas à expérimenter cette méthode également.
la source
backface-visibility: hidden;
a bien fonctionné dans mon cas, en résolvant un étrange mouvement flou causé par une transition d'opacité, c'est-à-dire. Le mouvement étrange a maintenant disparu, MAIS cela a rendu les textes de ma div définitivement flous à la place.perspective(1px)
à votretransform:
code, cela a fonctionné pour moi dans Chrome alors que rien d'autre n'a résolu le problèmePour améliorer le flou, esp. sur Chrome, essayez de faire ceci:
MISE À JOUR: La perspective ajoute une distance entre l'utilisateur et le plan z, qui met techniquement à l'échelle l'objet, ce qui donne l'impression que le flou est «permanent». Ce qui
perspective(1px)
précède est comme du ruban adhésif parce que nous correspondons au flou que nous essayons de résoudre. Vous pourriez avoir plus de chance avec le css ci-dessous:la source
perspective(1px)
propriété et voyez si cela fonctionne mieux.J'ai trouvé que l'ajustement du rapport d'échelle a légèrement aidé.
L'utilisation de
scale(1.048)
over(1.05)
semblait générer une meilleure approximation d'une taille de police de pixels entiers, réduisant le flou sous-pixel.J'ai également utilisé
translateZ(0)
ce qui semble ajuster la dernière étape d'arrondi de Chrome dans l'animation de transformation. C'est un plus pour mon utilisation en vol stationnaire car cela augmente la vitesse et réduit le bruit visuel. Cependant, pour une fonction onclick, je ne l'utiliserais pas car la police transformée ne semble pas aussi croustillante.la source
translateZ(0)
, changé juste1.05
pour1.048
Après avoir essayé tout le reste ici sans chance, ce qui a finalement résolu ce problème pour moi a été de supprimer la
will-change: transform;
propriété. Pour une raison quelconque, cela a provoqué une mise à l'échelle terriblement floue dans Chrome, mais pas dans Firefox.la source
will-change: transform;
légèrement corrige le problèmeAu lieu de
en utilisant
corrige le problème de flou du texte dans Chrome.
la source
Cela doit être un bogue 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.
la source
transform: translate3d();
et cela semble causer le problème. Aucune des solutions suggérées n'a fonctionné pour moi. Sauf / un peu celui-ci. Cela ne fonctionne que si je le règle d'abord sur une valeur positive (par exempleblur(0.1px)
), puis que je passe àblur(0px)
. Puisque l'élément est dynamique et nécessite également une solution dynamique (JS), ... cela craint: \Les Sunderls m'amènent à la réponse. Sauf
filter: scale
n'existe pas, maisfilter: blur
.Appliquez les déclarations suivantes aux éléments qui semblent flous (dans mon cas, ils étaient à l'intérieur d'un élément transformé):
Cela a presque 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 terminée, ils le font.
la source
-webkit-filter: blur(0);
seul fonctionne pour moi.backface-visibility: hidden;
brouille mon élément lorsque je réinitialise la mise à l'échelle par la suite.blur(0px);
il ne le résout pas. mais si je le faisblur(1px);
, puis appuyez sur la touche fléchée vers le bas pourblur(0px);
que cela semble correct. Allé sur le rafraîchissement de la page / peu importe ce que j'écris dans le CSSJ'ai découvert que le problème survient de quelque manière que ce soit sur les transformations relatives. translateX (50%), scale (1.1) ou quoi que ce soit. 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 une boîte de dialogue).Pour atteindre un peu plus de valeurs "absolues", j'ai dû définir des valeurs décimales sur
transform: translateY(-50.09%) translateX(-50.09%)
.REMARQUE
Je suis tout à fait sûr que ces valeurs varient selon les tailles d'écran. Je voulais juste partager mes expériences, au cas où cela aiderait quelqu'un.
la source
J'ai trouvé une solution bien meilleure et propre:
ou
Grâce à cet article: Empêcher le rendu flou avec transform: scale
la source
L'ajout a
perspective(1px)
fonctionné pour moi.à
la source
Essayez d'utiliser
zoom: 101%;
pour des conceptions complexes lorsque vous ne pouvez pas utiliser une combinaison de zoom + échelle.la source
zoom
n'est défini par aucun standard Web et n'est pas pris en charge par firefox caniuse.com/#feat=css-zoomDans mon cas, le code suivant a provoqué une police floue:
et l'ajout de la propriété de zoom l'a corrigé pour moi. Jouez avec le zoom, le suivi a fonctionné pour moi:
la source
zoom
Une autre solution à essayer que je viens de trouver pour les transformations floues (translate3d, scaleX) sur Chrome consiste à définir l'élément comme " display: inline-table ;". Il semble forcer l'arrondi des pixels dans certains cas (sur l'axe X).
J'ai lu que le positionnement des sous-pixels sous Chrome était prévu et les développeurs ne le répareront pas.
la source
Mise à jour 2019
Le bogue d'affichage de Chrome n'est toujours pas résolu et, bien que ce ne soit pas la faute des clients, aucune des suggestions proposées dans l'intégralité de ce site Web n'aide à résoudre le problème. Je peux convenir que j'ai essayé chacun d'entre eux en vain: un seul se rapproche et c'est la règle css: filter: blur (0); qui élimine le décalage d'un conteneur de 1px mais ne résout pas le bogue d'affichage flou du conteneur lui-même et de tout contenu qu'il peut avoir.
Voici la réalité: il n'y a littéralement pas de solution à ce problème, voici donc une solution pour les sites Web fluides
CAS
Je développe actuellement un site Web fluide et j'ai 3 divs, tous centrés avec des effets de survol et partageant des valeurs de pourcentage à la fois en largeur et en position. Le bug Chrome se produit sur le conteneur central qui est réglé à gauche: 50%; et transformer: translateX (-50%); un cadre commun.
EXEMPLE: D'abord le HTML ...
Voici le CSS où se produit le bogue Chrome ...
Voici le CSS corrigé ...
Violon buggé: https://jsfiddle.net/m9bgrunx/2/
violon fixe: https://jsfiddle.net/uoc6e2dm/2/
Comme vous pouvez le voir, une petite quantité de modifications apportées au CSS devrait réduire ou éliminer la nécessité d'utiliser la transformation pour le positionnement. Cela pourrait également s'appliquer aux sites Web à largeur fixe ainsi qu'aux fluides.
la source
J'ai le même problème. J'ai corrigé cela en utilisant:
la source
Ma solution était:
affichage: initial;
Puis c'était croustillant
la source
Rien de ce qui précède n'a fonctionné pour moi. J'ai eu cette animation pour les popups:
Dans mon cas, l'effet flou a disparu après l'application de cette règle:
-webkit-perspective: 1000;
même s'il est marqué comme inutilisé dans l'inspecteur Chrome.la source
will-change: transform;
qui corrige le flou des bordures des éléments. Aucune autre réponse n'a fonctionné pour moi.Aucune de ces réponses n'a fonctionné pour moi.
Cela a fonctionné quand j'ai ajouté de la perspective
ie de
transform : translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)
j'ai changé pour
transform : perspective(1px) translate3d(-10px,-20px,0) scale3d(0.7,0.7, 1)
la source
perspective(1px)
en fait aggravé les choses pour moi :(J'ai corrigé mon cas en ajoutant:
la source
scale()
résultat de la transformationPOUR CHORME:
J'ai essayé toutes les suggestions ici. Mais n'a pas fonctionné. Mon collège a trouvé une excellente solution, qui fonctionne mieux:
Vous ne devez PAS passer au-delà de 1,0
Et incluez
translateZ(0)
dans le survol mais PAS dans la position sans survol / initiale.Exemple:
la source
J'ai utilisé une combinaison de toutes les réponses et c'est ce qui a fonctionné pour moi à la fin:
la source
J'étais confronté au problème de texte flou sur Chrome mais pas sur Firefox lorsque j'ai utilisé
transform: translate(-50%,-50%)
.Eh bien, j'ai vraiment essayé beaucoup de solutions de contournement comme:
Aucun de ceux-ci n'a fonctionné pour moi.
Enfin, j'ai uniformisé la hauteur et la largeur de l'élément. Cela a résolu le problème pour moi !!!
Remarque: cela peut dépendre d'un cas d'utilisation à l'autre. Mais ça vaut vraiment le coup d'essayer!
la source
J'ai essayé beaucoup d'exemples de ces réponses, malheureusement, rien n'aide pour Chrome,
Version 81.0.4044.138
j'ai ajouté à la place l'élément de transformationcelui-là
ça m'aide
la source
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 sa suppression a corrigé le flou.la source
J'ai supprimé ceci de mon code -
transform-style: preserve-3d;
et ajouté ceci -transform: perspective(1px) translateZ(0);
le flou est parti!
la source
Dans Chrome 74.0.3729.169, actuel à partir du 25/05/19, il ne semble pas y avoir de correctif pour le flou se produisant à certains niveaux de zoom du navigateur causés par la transformation. Même un simple
TransformY(50px)
brouillera l'élément. Cela ne se produit pas dans les versions actuelles de Firefox, Edge ou Safari, et cela ne semble pas se produire à tous les niveaux de zoom.la source
top: 0, bottom: 0, left: 0; right: 0; margin: auto
mais alors le conteneur prendra tout l'espace qu'il peut (il doit être de largeur), donc cela ne fonctionne pas au cas où le contenu devrait décider de la taille du conteneur.Ce sera difficile à résoudre avec seulement css.
Alors je l'ai résolu avec jquery.
Ceci est mon CSS.
et ceci est ma jquery.
la source
Juste pour ajouter à l'engouement pour les correctifs, mettre {border: 1px solid # ???} autour de l'objet qui semble mal corrige le problème pour moi. Si vous avez une couleur d'arrière-plan stable, tenez-en compte également. C'est tellement stupide que personne n'a pensé à le mentionner, je suppose, eh eh.
la source
vous pouvez utiliser css
filter
pour résoudre ce problème.à propos du préfixe du fournisseur, veuillez le faire vous-même.
-webkit-filter
,-ms-filter
. le détail est ici http://browser.colla.me/show/css_transformation_scale_cause_blurringla source
filter: scale
selon developer.mozilla.org/en/docs/Web/CSS/filterLe texte ne sera pas flou si vous ne
transition
le faites pastransform
.Faites juste ceci:
Sans la transition comme
transition: all .2s;
la source