【问题标题】:Wonky text anti-aliasing when rotating with webkit-transform in Chrome在 Chrome 中使用 webkit-transform 旋转时出现不稳定的文本抗锯齿
【发布时间】:2011-10-14 09:17:48
【问题描述】:

我正在使用 -webkit-transform: rotate() 旋转一个元素,在 Chrome 14.0.835.2 dev-m 中,它对元素内的文本做了一些非常奇怪的事情。它让我想起了在 Photoshop 中使用“平滑”抗锯齿而不是“清晰”旋转文本时获得的类似效果。

有人知道这里发生了什么吗?它是特定于这个 webkit 或 Chrome 版本的还是我可以做些什么来修复它? (它也不是对列表元素之间的边界进行抗锯齿处理)

这是 CSS:

div.right-column.post-it
{
  position: relative;
  width: 240px;
  background-color: #fe9;
  padding: 20px;
  -webkit-transform: rotate(.7deg);
  background: #fe9 -webkit-gradient(radial, 20% 10%, 0, 50% 10%, 500, from(rgba(255,250,220,1)), to(rgba(255,238,253,0)));
  box-shadow: 1px 1px 0 #ddccaa, 
            2px 2px 0 #dbcaa8,
            3px 3px 0 #d9c8a6,
            4px 4px 0 #d7c6a4,
            5px 5px 0 #d5c4a2,
            6px 6px 1px #d3c2a0,
            4px 4px 2px rgba(90,70,50,.5),
            8px 8px 3px rgba(90,70,50,.3),
            12px 12px 5px rgba(90,70,50,.1);
}

【问题讨论】:

标签: css webkit rotation webkit-transform


【解决方案1】:

尝试使用 webkit 触发 CSS 3d 变换模式。这改变了 chrome 的渲染方式

-webkit-transform: rotate(.7deg) translate3d( 0, 0, 0);

编辑

还有一个 Webkit only 样式声明 -webkit-font-smoothing 接受值

  • none
  • subpixel-antialiased
  • antialiased

其中subpixel-antialiased 是默认值。

唉,亚像素抗锯齿不是旋转文本的好解决方案。渲染机无法处理。 3d 变换仅切换到 antialiased。但是我们可以尝试直接设置。

请看这里http://maxvoltar.com/archive/-webkit-font-smoothing

【讨论】:

  • 我认为我们对此无能为力。尝试使用黑色粗体或非粗体字体
  • 为文本元素添加背景色。
  • translate3d 方法对我有用,但是是的,它使文本有点模糊。但是,直接编辑 -webkit-font-smoothing 属性对我不起作用。你确实用这种方法牺牲了文本的清晰度,但总的来说我认为它看起来比不稳定的文本更好
【解决方案2】:

字体模糊是由一个奇怪的 webkit 问题引起的,其中涉及 -webkit-backface-visibility。这花了我很长时间才弄清楚,而且我还没有在网络上的其他任何地方看到它。

我现在添加 -webkit-backface-visibility: hidden;到我网站的主体作为 CSS 重置样式。观看它锐化整个网站上的字体,这太棒了。您的转换不是 3d 的,所以无论如何这不会影响任何东西,但是如果您决定在站点的其他地方进行 3d 转换,只需添加 back -webkit-backface-visibility: visible;到特定元素。也应该修复闪烁。

【讨论】:

  • 不要这样做。这实际上是在整个页面上激活-webkit-font-smoothing: antialiased,这实际上是从默认-webkit-font-smoothing: subpixel-rendering 退后一步。有关更多背景信息,请参阅Please Stop "Fixing" Font Smoothing
  • 我明白你在说什么,但可见的结果令人难以置信的好。移动设备无论如何都不使用亚像素渲染,因此这不会影响它们。这也解决了闪烁问题,这是一个大问题,在我看来,这是你根本无法忍受的。你能建议一个更好的方法来停止闪烁和正确渲染字体吗?此外,您可以显式定义 -webkit-font-smoothing: subpixel-rendering;
  • 也许您应该发布一个包含这些要点的新问题,以便可以单独回答,我认为它们对于这里的 cmets 来说是题外话。
  • 也许吧,但相信现在访问这个问题的用户也会想知道答案。您没有为该问题提供任何解决方案,只是说我的解决方案不正确。而且,对于亚像素渲染的情况,还是见仁见智。许多浏览器和操作系统使用亚像素渲染做一些时髦的事情,可能会损害设计。在 css 转换过程中,亚像素渲染也会自动关闭,从而导致各种问题。随着当今开发中 css 转换的流行,我看到了在全球范围内使用抗锯齿渲染的有力案例
  • 这似乎对我有用。当页面的其余文本渲染应用于动画的特定元素时,我没有看到任何变化。
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多