【发布时间】:2014-10-24 18:23:34
【问题描述】:
如果我使用 CSS scale() 缩放元素,它在过渡时会变得像素化。但过渡完成后又恢复正常(参考截图 1)。但是它只发生在 webkit 浏览器中(在 Chrome 和 Opera 中测试过)
.foo {
background: #4FC093;
display: block;
position: absolute;
width: 20px;
height: 20px;
box-shadow: 0 0 10px inset;
margin: 0 auto;
border-radius: 50%;
left: 50%;
top: 50%;
cursor: pointer;
-webkit-transition: all 3s ease;
-moz-transition: all 3s ease;
-ms-transition: all 3s ease;
transition: all 3s ease;
}
.foo:hover {
-webkit-transform: scale(20);
-moz-transform: scale(20);
-ms-transform: scale(20);
transform: scale(20);
}
<div class="foo"></div>
截图 1
一种可能的解决方法
我也尝试过使用scale3d() 来反转这个div 的比例,正如here 所建议的那样
但它在 Google Chrome 中导致 div 周围出现锯齿状边缘。
.foo {
background: #4FC093;
display: block;
position: absolute;
width: 400px;
height: 400px;
box-shadow: 0 0 200px inset;
margin: 0 auto;
border-radius: 50%;
cursor: pointer;
-webkit-transition: all 3s ease;
-moz-transition: all 3s ease;
-ms-transition: all 3s ease;
transition: all 3s ease;
-webkit-transform: scale3d(0.05, 0.05, 0.05);
-moz-transform: scale3d(0.05, 0.05, 0.05);
-ms-transform: scale3d(0.05, 0.05, 0.05);
transform: scale3d(0.05, 0.05, 0.05);
}
.foo:hover {
-webkit-transform: scale3d(1, 1, 1);
-moz-transform: scale3d(1, 1, 1);
-ms-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
}
<div class="foo"></div>
我不希望边缘呈锯齿状。我曾尝试在这里使用-webkit-backface-visibility: hidden,但没有运气。我知道有一个名为-webkit-font-smoothing 的属性,我们可以将字体平滑设置为antialiased。有什么方法可以将antialiased 设置为div?
截图 2
最后,这不是我的问题的解决方案,我想避免使用这种解决方法,因为我必须手动计算 scale3d() 的参数值。
我在这里期待第一种情况的解决方案。
【问题讨论】:
-
在 Retina Macbook Pro 上 OSX 上的 Chrome 39 上,它不是像素级的,但阴影是一系列矩形。您也许可以将圆圈的大小放大一点,例如宽度:100 像素,高度:100 像素,然后从 0.2 的初始比例开始,然后将其放大到 5(或任何值),这对我来说似乎更好。那么这只会扩大一点,这似乎可以解决错误。
-
感谢您的信息。我在 Windows 上使用 Chrome 37 64 位。这是您建议的更新小提琴:jsfiddle.net/aniskhan001/bk96d9vo/1 .. 我仍然看到它是像素化的,但比以前少了一点。这只是一个例子。在我的项目中,我将不得不将 div 变得更大。
-
imgur.com/hb8RAHY 对我来说是这样的 - 根本没有像素化,但嵌入的阴影确实不好。代替嵌入阴影,也许您可以尝试径向渐变?
-
刚刚用 Chrome 39 试了一下,对我来说,它看起来比你现在发布的要好。 imgur.com/f6vy3j6 我认为这取决于 GPU 渲染。我使用的是 NVIDIA GTX 560。但是,Chrome 37、Opera 23 等其他浏览器呢?
-
我认为这是一个 @2x 屏幕而不是 GPU 问题的错误 - 不过可能是错误的。你试过径向渐变吗?您可能会发现巧合地解决了这个问题。我会在这里为 chrome 提交两个问题 - 一个针对您拥有的像素版本,另一个针对缩放插入框阴影的问题。
标签: css google-chrome webkit css-transitions