IE11 翻译比例模糊图像

Posted

技术标签:

【中文标题】IE11 翻译比例模糊图像【英文标题】:IE11 translate scale blurry image 【发布时间】:2017-10-02 17:56:15 【问题描述】:

我正在尝试创建气球飞行的动画。除了 IE11 之外,所有现代浏览器都很好。

我使用 translateX 和 translateY 没有任何问题,但缩放导致图像变得模糊。

@media (min-width: 1100px) 
	.balloon-outer,
	.balloon-inner,
	.balloon 
		height: 100%;
		position: absolute;
		width: 100%;
		bottom: 0;
		right: 0;
		animation-duration: 60s;
		animation-delay: 0;
		animation-iteration-count: infinite;
		animation-direction: normal;
		will-change: transform;
		pointer-events: none;
	
	.balloon-outer overflow-y: hidden;
		transform-origin: 50% 50%;
		animation-name: travel-x;
		animation-timing-function: ease-in;
		transform: translateX(-20%);
	
	.balloon 
		transform-origin: 50% 50%;
		animation-name: travel-y;
		animation-timing-function: ease-out;
		transform: translateY(90%);
	
	.balloon-inner background:url("https://www.inty.com/wp-content/uploads/balloon.png") no-repeat scroll 100% 100% / auto 40%;
		transform-origin: 100% 100%;
		animation-name: scale;
		animation-timing-function: linear;
		transform: scale(3);
	


	@keyframes scale  
		0% transform: scale(3);
		80% transform: scale(0);
		100% transform: scale(0);
	
	@keyframes travel-x  
		0% transform: translateX(-10%);
		80% transform:translateX(-45%);
		100% transform:translateX(-45%);
	
	@keyframes travel-y  
		0% transform: translateY(120%);
		80% transform:translateY(-70%);
		100% transform:translateY(-70%);
	
<div class="balloon-outer"><div class="balloon"><div class="balloon-inner"></div></div></div>

http://codepen.io/rachelreveley/pen/xdLGEO

我已经尝试过这个我在几个地方看到过的技巧,但没有任何区别。

-webkit-backface-visibility: hidden; 
-ms-transform: translateZ(0); /* IE 9 */
-webkit-transform: translateZ(0); /* Chrome, Safari, Opera */
transform: translateZ(0);

【问题讨论】:

这似乎是导致模糊的变换比例。 可以附上截图吗? 您是否尝试过使用 caniuse.com 上列出的 cssSandpaper 库? js 的 url 是 github.com/zoltan-dulac/cssSandpaper 你也可能会发现这个其他资源很有帮助 useragentman.com/IETransformsTranslator (也在 caniuse 上列出) 嗨@RReveley,你能在IE中看到这个codepen:codepen.io/anon/pen/jGzddY来验证模糊效果是否消失了吗?如果是,那么我认为 IE11 的主要问题是 transform3d 导致 gpu 处理加速,而 IE11 的硬件加速渲染会产生模糊的图像。不过,这在 Edge 上不是问题。面临同样的问题,但很难找到问题的实际原因。这是我最接近合理化 IE 行为的方法。 【参考方案1】:

尝试将您所有的translateXtranslateY 更改为translate3d,例如:

@keyframes travel-x  
    0% transform: translate3d(-10%,0,0);
    80% transform:translate3d(-45%,0,0);
    100% transform:translate3d(-45%,0,0);

@keyframes travel-y  
    0% transform: translate3d(0,120%,0);
    80% transform:translate3d(0,-70%,0);
    100% transform:translate3d(0,-70%,0);

在您的示例中使用translates 的所有地方都这样做。 translate3d 启用硬件加速,这将有助于动画。 您可以查看this post 了解更多信息。

【讨论】:

我已经根据您的建议更新了 Codepen,但遗憾的是它没有任何区别。不过感谢您的建议。 当您在 IE11 上尝试使用 codepen 时,您仍然看到图像模糊吗?我在 IE 11.0.10586 上看到它很好 仍然模糊。 IE 11.873.10586.0 似乎是引起问题的比例转换。 实际上,translate3d(和任何其他硬件加速转换)会导致 IE 中的文本模糊。只有 2d 变换产生清晰的渲染。【参考方案2】:

您可以使用供应商前缀“-ms-transform”来回退到 IE-11。

例如:

.balloon-outer overflow-y: hidden;
        transform-origin: 50% 50%;
        animation-name: travel-x;
        animation-timing-function: ease-in;
        transform: translateX(-20%);
        -ms-transform: translateX(-20%);
    

在这里查看答案。

CSS3 transform:scale in IE

【讨论】:

这没什么区别。 IE 正在执行转换,它只是以一种模糊的方式进行。 好吧,我读到 IE 有它自己的缩放变换算法,但你应该用供应商前缀来称呼它:transform: -ms-scale(3);。你试过了吗? 我很怀疑,但我确实尝试过 :( 好的,我会做一些测试,让你知道它是否有效。

以上是关于IE11 翻译比例模糊图像的主要内容,如果未能解决你的问题,请参考以下文章

CSS 翻译在 SVG g 上的 IE11 中不起作用

在 IE 11 中使用 max-width 和 max-height 保持图像比例

在 Chrome 中翻译后字体看起来很模糊

在IE 11中使用max-width和max-height保持图像比例

翻译Motion Blur for mobile devices in Unity

如何限制 ipad 屏幕外的图像翻译