使用CSS转换后的模糊文本:scale(); 在Chrome中

Rya*_*rke 106 webkit google-chrome transform css3 css-animations

似乎Google Chrome最近有一次更新,导致文本模糊后出现问题transform: scale().具体来说,我这样做:

@-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);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您在Chrome中访问http://rourkery.com,则应在主文本区域看到问题.它不习惯这样做,它似乎没有影响其他webkit浏览器(如Safari).还有其他一些关于人们遇到类似3d变换问题的帖子,但是找不到像这样的2d变换.

任何想法将不胜感激,谢谢!

2ne*_*2ne 66

我有这个问题很多次,似乎有两种方法来修复它(如下所示).您可以使用这些属性中的任何一个来修复渲染,或同时使用两者.

隐藏背面可见性可以解决问题,因为它将动画简化为对象的正面,而默认状态是正面和背面.

backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

TranslateZ也可以用来为动画添加硬件加速.

transform: translateZ(0);
Run Code Online (Sandbox Code Playgroud)

这两个属性都解决了您遇到的问题,但有些人也想添加

-webkit-font-smoothing: subpixel-antialiased;
Run Code Online (Sandbox Code Playgroud)

他们的动画对象.我发现它可以改变网络字体的渲染,但也可以尝试使用该方法.

  • 这些技术似乎都在改进,但我仍然无法让Chrome达到我在Firefox中看到的清晰度. (12认同)
  • 正如@ykadaru建议的那样,尝试将`perspective(1px)`添加到你的`transform:`代码中,这对我在Chrome中起作用,而没有别的办法可以解决问题 (12认同)
  • `backface-visibility:hidden;`肯定在我的情况下工作,解决由不透明度转换引起的一些奇怪的模糊运动,即.奇怪的运动现在已经消失,但它使我的div中的文本永久模糊了. (9认同)
  • 在使用Gnome X11会话的Ubuntu 17.10中运行的Chrome版本65.0.3325.162(官方构建)(64位)上不起作用(Wayland关闭) (4认同)
  • 它似乎不再起作用了 (3认同)
  • 在Chrome 72中,前两个选项会导致文本在转换期间和结束时变得模糊 (2认同)

yka*_*aru 20

为了改善模糊性,尤其是 在Chrome上,尝试这样做:

transform: perspective(1px) translateZ(0);
backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这实际上使情况变得更糟. (3认同)

Jor*_*oto 15

我发现调整比例有所帮助.

使用scale(1.048)over (1.05)似乎可以生成更好的近似整像素字体大小,减少子像素模糊.

我也用过translateZ(0)这似乎调整了Chrome在变换动画中的最终舍入步骤.这对我的onhover用法来说是一个加分,因为它可以提高速度并降低视觉噪音.但是对于onclick函数,我不会使用它,因为转换后的字体看起来不那么脆.

  • 这是唯一对我有用的方法。其他方法(背面可见性、添加滤镜、透视和旧式的translateZ)只会让情况变得更糟。尝试缩放到整个像素。例如,使用比例因子 1,1429 (16/14) 从 14 像素变为 16 像素。 (3认同)
  • 在没有“translateZ(0)”的情况下为我工作,仅将“1.05”更改为“1.048” (3认同)

Nai*_*han 14

代替

transform: scale(1.5);
Run Code Online (Sandbox Code Playgroud)

运用

zoom : 150%;
Run Code Online (Sandbox Code Playgroud)

修复了Chrome中的文字模糊问题.

  • 另一个问题是缩放似乎不适用于过渡属性,因此它不能用于CSS动画 (12认同)
  • 它起作用并且模糊了模糊的东西,但它也改变了元素的位置. (3认同)
  • 不知道为什么downvote。当我将此应用于复选框时,这比转换要好得多: scale() (2认同)
  • 对于firefox,使用transform:scale()就像魅力一样没有任何模糊.您将不得不处理浏览器检测并相应地执行chrome/safari和firefox. (2认同)

小智 8

我找到了一个更好、更干净的解决方案:

.element{
 transform:scale(0.5) 
 transform-origin: 100% 0;
}
Run Code Online (Sandbox Code Playgroud)

或者

.element{
 transform:scale(0.5) 
 transform-origin: 0% 0;
}
Run Code Online (Sandbox Code Playgroud)

感谢这篇文章: 使用变换防止模糊渲染:缩放


Raz*_*med 7

在我的例子中,以下代码导致字体模糊:

-webkit-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
Run Code Online (Sandbox Code Playgroud)

只需添加缩放属性就可以修复它。尝试缩放,以下对我有用:

zoom: 97%;   
Run Code Online (Sandbox Code Playgroud)

  • Firefox 不支持“缩放” (5认同)

Dan*_*Dan 7

在没有运气的情况下尝试了这里的所有其他功能之后,最终为我解决了此问题的是删除了该will-change: transform;属性。由于某种原因,它在Chrome(而不是Firefox)中造成了令人难以置信的缩放比例。

  • 我有相反的情况,添加“will-change:transform;”稍微解决了这个问题 (4认同)
  • 为什么有人会贬低这个?我不明白... :( 这在某些版本的 chrome 中是一个完全有效的问题,而且“will-change”一般看起来仍然很新,可能不应该使用。有关更多信息,请参阅 https ://greensock.com/will-change (3认同)
  • 我在 Chrome 75 上的材质设计组件渲染上遇到了同样的问题。删除“will-changed”css 样式修复了它。 (2认同)

小智 6

Sunderls引导我找到答案.除了filter: scale不存在,但filter: blur确实存在.

将下一个声明应用于模糊的元素(在我的情况下,它们在变换的元素中):

backface-visibility: hidden;    
-webkit-filter: blur(0);
Run Code Online (Sandbox Code Playgroud)

几乎完美无缺." 几乎 "因为我正在使用转换,而在转换过程中,元素看起来并不完美,但是一旦转换完成,它们就会完成.


and*_*dyw 6

这必须是Chrome(版本56.0.2924.87)的错误,但下面修复了在控制台中更改css属性时我的模糊性('.0').我会报告.

filter: blur(.0px)
Run Code Online (Sandbox Code Playgroud)


sci*_*per 5

我发现,问题以任何方式发生在相对转换上。translationX(50%),scale(1.1)或其他。提供绝对值始终有效(不会产生模糊的文本)。

这里提到的所有解决方案都没有用,而且我认为还没有解决方案(在撰写本文时使用Chrome 62.0.3202.94)。

就我而言,transform: translateY(-50%) translateX(-50%)会导致模糊(我想使对话框居中)。

为了获得更多的“绝对”值,我不得不将十进制值设置为transform: translateY(-50.09%) translateX(-50.09%)

注意

我很确定,此值在不同的屏幕尺寸上会有所不同。我只是想分享我的经验,以防有人帮助。


小智 5

我有着同样的问题。我使用以下方法解决了这个问题:

.element {
  display: table
}
Run Code Online (Sandbox Code Playgroud)

  • 疯狂但有效;Chrome 显然是新的 IE (3认同)