Wie kann verhindert werden, dass sich das Webkit-Text-Rendering während des CSS-Übergangs ändert?
Ich bin mit CSS-übergänge, um den übergang zwischen CSS umgewandelt Staaten (die im Grunde den übergang in der Größe eines Elements). Ich merke, dass, wenn das element den übergang, den rest des Textes auf der Seite (Webkit) neigt dazu, etwas verändern rendering, bis der übergang erfolgt.
Fiddle: http://jsfiddle.net/russelluresti/UeNFK/
Mir ist auch aufgefallen, dass dies nicht der Fall auf meinem Header, die haben die -webkit-font-smoothing: antialiased
Eigenschaft/Wert-paar auf Sie. Also, ich Frage mich, gibt es irgendeine Möglichkeit zu haben, den text pflegen Sie Ihre Standard-look (die "auto" - Wert für die font-Glättung) und nicht ändern, Rendern, während ein übergang.
Ich habe versucht, explizit die Einstellung der text auf den Wert "auto", aber das macht nichts. Ich sollte auch beachten, dass die Einstellung der Schriftglättung auf "none" verhindert auch, dass die rendering-blinkt während des übergangs.
Jede Hilfe ist willkommen.
Bearbeiten 1
Sollte ich anmerken, dass ich auf OS X. Während sich bei meinem test in Chrome unter Parallels, ich nicht sehen, die zwei verschiedene Absätze anders zu Verhalten, so kann dies ein Problem sein, exklusiv für Macs.
InformationsquelleAutor der Frage RussellUresti | 2012-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke ich habe Eine Lösung gefunden:
Zwingt die hardware-Beschleunigung auf das Eltern-element scheint das problem zu lösen...
BEARBEITEN
So kommentierte, dass dieser hack deaktiviert schriftart-Glättung und abbauen können text-rendering je nach Ihren Schriften, browser und OS!
InformationsquelleAutor der Antwort Armel Larcier
UPDATE Mai 2018
-webkit-font-smoothing: subpixel-antialiased
hat jetzt keine Wirkung in Chrom, aber in Safari ist es noch bessere Dinge, die viel, ABER NUR AUF der NETZHAUT. Ohne es in Safari auf retina-Bildschirme text ist Dünn und geschmacklos, in der Erwägung, dass mit text hat das richtige Gewicht. Aber wenn Sie diese auf nicht-retina-displays in Safari (vor allem auf geringes Gewicht-Werte) der text ist eine Katastrophe. Stark empfehlen die Verwendung von einem media-query :@media screen and (-webkit-min-device-pixel-ratio: 2) {
body {
-webkit-font-smoothing: subpixel-antialiased;
}
}
Explizit Einstellung
-webkit-font-smoothing: subpixel-antialiased
ist die beste derzeitige Lösung, wenn Sie wollen, um mindestens teilweise zu vermeiden, die dünner Antialias-text.--tl;dr--
Sowohl mit Safari und Chrome, auf dem die default-schriftart-rendering verwendet, subpixel-antialiasing, alle CSS -, die Kräfte GPU based rendering, die wie die obigen Vorschläge zu verwenden, eine Transformation mit translateZ oder auch nur einer Skala übergang, wird dazu führen, Safari und Chrome automatisch "aufgeben" auf subpixel-Antialiasing Schriftarten-Glättung und statt Schalter, um nur Antialias-text, das sieht viel leichter und dünner, vor allem auf Safari.
Anderen Antworten konzentrierten sich auf die Aufrechterhaltung einer Konstanten rendering durch einfaches setzen oder zu zwingen, Schriftglättung, die dünner antiailiased text. Zu meinem Auge mit translateZ oder backface versteckt signifikant verschlechtert sich die Qualität des text-rendering und die optimale Lösung, wenn Sie möchten, den text einfach konsistent bleiben, und Sie sind OK mit der dünneren text ist einfach zu verwenden
-webkit-font-smoothing: antialiased
. Jedoch das explizite setzen von-webkit-font-smoothing: subpixel-antialiased
tatsächlich eine gewisse Wirkung haben - der text wird noch leicht ändern und ist nur über sichtlich dünner während der übergänge erfolgt auf der GPU, aber nicht so Dünn wie es geht, ohne diese Einstellung. So wie es aussieht ist dies zumindest teilweise verhindert, dass der Schalter gerade antiailiased text.InformationsquelleAutor der Antwort atomless
Habe ich bemerkt, dass so ziemlich jedes mal, ich habe Grafikprobleme (flackern/Ruckeln/Bewegtheit/etc) durch einen übergang, mit -webkit-backface-visibility: hidden; auf die Elemente, die handelnden dazu neigt, das problem zu lösen.
InformationsquelleAutor der Antwort Jordan Borth
Um zu verhindern, dass text-rendering-änderungen aufgrund von hardware-Beschleunigung, können Sie entweder:
Legen Sie alle text -webkit-font-smoothing: Antialiasing. Dies bedeutet text ist dünner und nicht sub-pixel Antialiasing.
Wenn Sie möchten, dass text, der beeinflusst wird durch die hardware-Beschleunigung zu sub-pixel Antialiasing (die Standard-Art der Schriftglättung), dann setzen, dass text innerhalb einer Eingabe, ohne Grenzen und Behinderte, halten, dass die sub-pixel Antialiasing (zumindest in Chrome auf Mac OS X). Ich habe nicht getestet auf anderen Plattformen, aber wenn das sub-pixel-Anti-Aliasing wichtig ist, können Sie zumindest mit diesem trick.
InformationsquelleAutor der Antwort Joran Greef
Wenn Sie Firefox auf einem Mac werden Sie wollen, verwenden Sie die folgende css um das Problem zu beheben.
Mehr Webfont Glättung und Kantenglättung in Firefox und Opera
InformationsquelleAutor der Antwort eleclair
Dies ist was für mich gearbeitet. Hoffe, es hilft. In anderen stackoverflow-post.
InformationsquelleAutor der Antwort Daniel Almeida
Um zu verhindern, dass die rendering ändern, müssen Sie
font-smoothing: antialiased
(odernone
).Browser deaktivieren subpixel font rendering ist wahrscheinlich ein Nebeneffekt der hardware-Beschleunigung. Wenn das hintergrund-rendering gegen die sich ständig verschieben, wird der text kann nicht gerendert werden auf einem separaten layer, wie Sie in jedem frame geprüft werden muss, gegen alle hintergrund-Schichten. Dies könnte ernsthaft beeinträchtigen die Leistung.
Apple oft deaktivieren subpixel font-Glättung auf Ihre eigene Seiten.
InformationsquelleAutor der Antwort Henrik
Zusätzlich zu den oben genannten Lösungen (
-webkit-transform: translateZ(0px)
auf das element, und-webkit-font-smoothing: antialiased
auf der Seite), einige Elemente mögen noch schlecht benimmt. Für mich war es Platzhalter-text in ein input-element: verwenden Sie dazuposition:relative
InformationsquelleAutor der Antwort WraithKenny
Ich hatte das gleiche problem. Lesen Sie es aufmerksam durch:
keiner der oben genannten Lösungen zu arbeiten schien. Jedoch, die Einstellung (Dinge wie)
auf das element, das hat die animation funktioniert hat.
Indem das animierte element, um die GPU-Schicht nimmt man es aus dem normalen Fluss der Seite Rendern (so Sachen wie z-index funktioniert nicht mehr zu, zum Beispiel). Als Nebenwirkung, wird die animation und den rest der Seite nicht zu beeinflussen einander nicht mehr.
Wenn es Auswirkungen, die Ihre font-rendering, es funktioniert nur so zum animierten element, natürlich. Ich sehe keinen Unterschied in meinem Chrome.
InformationsquelleAutor der Antwort commonpike