Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Webkit text aliasing gets weird during CSS3 animations

This is a funky one. And I'm sure it's webkit related since it only seems to be an issue in Chrome Version 20.0.1132.57 and Safari 5.1.7. I've uploaded a short video to explain the issue because it would be nearly impossible to explain via text.

Video: http://youtu.be/0XttO-Diz2g

Short version: During CSS3 animations, text that is inside a positioned element (absolute or relative) seems to change its antialiasing. It becomes bolder while animations are running.

Note: This is not the same as scaled elements becoming blurry diring an animation. (this issue)

Any thoughts, workarounds, etc?

like image 743
Jeremy Ricketts Avatar asked Jul 21 '12 06:07

Jeremy Ricketts


People also ask

Is WebKit used for animation?

WebKit now supports explicit animations in CSS. As a counterpart to transitions, animations provide a way to declare repeating animated effects, with keyframes, completely in CSS.

What is CSS WebKit animation?

The CSS -webkit-animation property is a shorthand property for setting WebKit multiple animation properties in one place. To create an animation using WebKit, use the -webkit-animation in conjunction with the @-webkit-keyframes keyword/at-rule, which allows you to define visual effects for your animation.

Does Safari support CSS animation?

Safari supports two types of CSS animation: transition animations and keyframe animations.


1 Answers

Update: My old answer below works but is only a hacky way to resolve the issue. Instead, read this for the reason to why other elements are affected: http://jsbin.com/efirip/5/quiet. In short: an animated element should be placed in its own stacking context by giving it a z-index.

Old answer:

It's WebKit related. Honestly I'm not sure why it does it and I assume it's a bug too. You can prevent it by adding any 3D related CSS3 declaration to any element on the page. Example:

body {
    -webkit-transform: translateZ(0);
}

Or:

body {
    -webkit-backface-visibility: hidden;
}

The presence of these declarations causes WebKit to use hardware acceleration for the animations which prevents the problem you've pointed out.

like image 183
Ian Lunn Avatar answered Nov 18 '22 19:11

Ian Lunn