WebKit:模糊的文本与CSS规模+ translate3d
Chrome浏览器和其他WebKit浏览器大量模糊了也应用了translate3d的任何CSS缩放内容。
这是一个JS小提琴: http : //jsfiddle.net/5f6Wg/ 。 (在Chrome中查看)
.test { -webkit-transform: translate3d(0px, 100px, 0px); } .testInner { /*-webkit-transform: scale(1.2);*/ -webkit-transform: scale3d(1.2, 1.2, 1); text-align: center; }
<div class="test"> <div class="testInner"> This is blurry in Chrome/WebKit when translate3d and scale or scale3d are applied. </div> </div>
有没有已知的解决方法呢? 在上面这个简单的例子中,我可以简单地使用translate而不是translate3d – 这里的要点是将代码剥离到最基本的地方。
Webkit将3d变换的元素视为纹理而不是vector,以便提供硬件3D加速。 唯一的解决办法是增加文本的大小和缩小元素,实质上创build一个更高的res纹理。
看到这里: http : //jsfiddle.net/SfKKv/
请注意,抗锯齿仍然是underpar(茎损失),所以我用一些文字阴影增强了文本。
我发现使用:
-webkit-perspective: 1000;
在你的字体或图标集的容器上,在经历了一段时间的Android nexus 4.2问题的实验之后,为我保留了一些清爽的东西。
一个CSS滤镜效果是一个graphics操作,允许操纵任何HTML元素的外观。 由于Chromium 19这些filter是GPU加速,使他们超快。
CSS3引入了一组标准的滤镜效果,其中之一就是模糊滤镜:
-webkit-filter: blur(radius);
“半径”参数会影响屏幕上有多less像素相互混合,所以较大的值会产生更多的模糊。 零当然会使图像保持不变。
将半径设置为0将强制浏览器使用GPU计算并强制它保持您的html元素不变。 这就像应用“硬边缘”效应。
所以为了解决这个模糊的效果,对我来说最好的解决scheme是添加这个简单的代码行:
-webkit-filter: blur(0);
还有一个只影响视网膜屏幕的已知的错误。 (请参阅: 为什么不模糊(0)删除视网膜屏幕上的Webkit / Chrome的所有文字模糊? )。 所以为了使它也适用于视网膜,我build议添加这第二行:
-webkit-transform: translateZ(0);
尝试这个
...{ zoom:2; -webkit-transform: scale(0.5); transform: scale(0.5); }
或者,对于更确切的方法,您可以调用一个javascript函数,通过删除matrix的十进制值来重新计算转换matrix。 请参阅: https : //stackoverflow.com/a/42256897/1834212
当使用同位素插件(http://isotope.metafizzy.co/index.html)和zoom插件(http://janne.aukia.com/zoomooz/)时,我遇到了这个问题。; 我build立了一个jQuery插件来处理我的情况。 我把它扔在github回购中,以防有人从中受益。 – https://github.com/charleshimmer/jquery-hirestext 。
我用javascript来移动文本1px顶部,然后100ms后,回1px下来。 这几乎是不可感知的,并且完全跨浏览器解决了这个问题。
body { -webkit-font-smoothing: subpixel-antialiased; }
或者我认为你可以把它放在一个特定的元素上,但是我遇到了影响整个网站的一个元素的问题。
我认为这是自定义字体字体的问题。
Webkit将3d变换的元素视为纹理而不是vector,以便提供硬件3D加速。
这与它无关。 您会注意到您的混叠问题可以通过添加持续时间和方向信息(例如0.3线性)来解决。 你有一个母马试图在运行时渲染一切:
同上^