指南针背景图(linear-gradient)在IE浏览器上无法工作

5
这个使用SASS和Compass完成的渐变在任何版本的Internet Explorer中都无法工作:
@include background-image(linear-gradient(left, rgba(241,236,236,0.95), rgba(241,236,236,0.9), rgba(241,236,236,0.85), rgba(241,236,236,0.8), rgba(241,236,236,0.75), rgba(241,236,236,0.4)));

这将转换为以下CSS:

  background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, rgba(241, 236, 236, 0.95)), color-stop(20%, rgba(241, 236, 236, 0.9)), color-stop(40%, rgba(241, 236, 236, 0.85)), color-stop(60%, rgba(241, 236, 236, 0.8)), color-stop(80%, rgba(241, 236, 236, 0.75)), color-stop(100%, rgba(241, 236, 236, 0.4)));
  background-image: -webkit-linear-gradient(left, rgba(241, 236, 236, 0.95), rgba(241, 236, 236, 0.9), rgba(241, 236, 236, 0.85), rgba(241, 236, 236, 0.8), rgba(241, 236, 236, 0.75), rgba(241, 236, 236, 0.4));
  background-image: -moz-linear-gradient(left, rgba(241, 236, 236, 0.95), rgba(241, 236, 236, 0.9), rgba(241, 236, 236, 0.85), rgba(241, 236, 236, 0.8), rgba(241, 236, 236, 0.75), rgba(241, 236, 236, 0.4));
  background-image: -o-linear-gradient(left, rgba(241, 236, 236, 0.95), rgba(241, 236, 236, 0.9), rgba(241, 236, 236, 0.85), rgba(241, 236, 236, 0.8), rgba(241, 236, 236, 0.75), rgba(241, 236, 236, 0.4));
  background-image: linear-gradient(left, rgba(241, 236, 236, 0.95), rgba(241, 236, 236, 0.9), rgba(241, 236, 236, 0.85), rgba(241, 236, 236, 0.8), rgba(241, 236, 236, 0.75), rgba(241, 236, 236, 0.4));

那么,你如何解决IE的问题呢?

我正在使用Internet Explorer 11进行测试。我需要它能够在IE9+中运行。

就像下面的帮助所提到的,目前我找到了覆盖IE10+的答案,这对我很有帮助:

background: -ms-linear-gradient(left, rgba(241,236,236,0.95), rgba(241,236,236,0.9), rgba(241,236,236,0.85), rgba(241,236,236,0.8), rgba(241,236,236,0.75), rgba(241,236,236,0.4)); /* IE10+ */

尝试以下方法对于IE9无效:

filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f1ecec', endColorstr='#fffafa',GradientType=1 );

我可以用什么来覆盖令人烦恼的IE9?

请指定您正在测试的IE版本,以及您需要它在哪些版本中运行。在旧版IE中,CSS渐变需要不同的语法。 - Spudley
@Spudley,我在问题中添加了我使用的版本。我需要它能够在IE9+上运行。 - Daniel Ramirez-Escudero
2个回答

3

您需要为IE6-9使用一个过滤器,它看起来像:

filter: progid:DXImageTransform.Microsoft.gradient(...)

并且适用于IE10及以上版本

-ms-linear-gradient

我认为IE6-9只支持两种颜色渐变。我能提供的最好帮助是这个网址:http://www.colorzilla.com/gradient-editor/ 这是一个非常棒的工具,可以用来创建渐变效果。如果您将CSS导入到该工具中,您会得到以下结果:
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YxZWNlYyIgc3RvcC1vcGFjaXR5PSIwLjk1Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iI2YxZWNlYyIgc3RvcC1vcGFjaXR5PSIwLjc1Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMWVjZWMiIHN0b3Atb3BhY2l0eT0iMC40Ii8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=);
background: -moz-linear-gradient(top, rgba(241,236,236,0.95) 0%, rgba(241,236,236,0.75) 80%, rgba(241,236,236,0.4) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(241,236,236,0.95)), color-stop(80%,rgba(241,236,236,0.75)), color-stop(100%,rgba(241,236,236,0.4))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(241,236,236,0.95) 0%,rgba(241,236,236,0.75) 80%,rgba(241,236,236,0.4) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(241,236,236,0.95) 0%,rgba(241,236,236,0.75) 80%,rgba(241,236,236,0.4) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(241,236,236,0.95) 0%,rgba(241,236,236,0.75) 80%,rgba(241,236,236,0.4) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(241,236,236,0.95) 0%,rgba(241,236,236,0.75) 80%,rgba(241,236,236,0.4) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2f1ecec', endColorstr='#66f1ecec',GradientType=0 ); /* IE6-8 */

为了实现IE9下的完整多段渐变,需要使用SVG进行支持。 在所有有渐变的元素上添加“gradient”类,并按照以下方式重写HTML以完成IE9支持:

<!--[if gte IE 9]>
  <style type="text/css">
    .gradient {
       filter: none;
    }
  </style>
<![endif]-->

...或者SCSS版本

// needs latest Compass, add '@import "compass"' to your scss
@include filter-gradient(#f2f1ecec, #66f1ecec, vertical); // IE6-8
// IE9 SVG, needs conditional override of 'filter' to 'none'
$experimental-support-for-svg: true;
@include background-image(linear-gradient(top,  rgba(241,236,236,0.95) 0%,rgba(241,236,236,0.75) 80%,rgba(241,236,236,0.4) 100%));

这是一个链接,可以帮助你导入css:http://www.colorzilla.com/gradient-editor/#f1ecec+0,f1ecec+100&0.95+0,0.75+80,0.4+100;Custom


该链接提供了一个可定制的渐变色代码编辑器,可以让你快速创建自定义渐变色并将其应用到你的网站上。

2
IE10+不需要使用“-ms-”。没有任何稳定版本的IE使用渐变的“-ms-”前缀。任何声称相反的来源都是错误的。 - BoltClock
是的,没有稳定版本支持它,只有“消费者预览版”才支持。但是如果您要支持所有其他浏览器前缀,添加另一个前缀也无妨:P - Lee
如果你想在样式表中添加不必要的膨胀,那么可以这样做,但请不要向他人推荐。正是这种态度使前缀变得如此脆弱。 - BoltClock
你觉得这个调用是不必要的臃肿,我认为这是为了应对所有可能性。当然,使用浏览器的市场份额很小,但如果你要为其他所有事物提供支持,我认为这没有问题。与其假设我知道什么对他最好,我宁愿提供信息并让他自行决定。 - Lee
1
@DanielRamirez-Escudero,如果你在colorzilla链接下的代码中勾选“IE9支持”复选框,它将为你提供额外的代码和解释。本质上,你需要取消添加IE6-8支持的过滤器,并使用SVG。请参见我的编辑。 - Lee
显示剩余5条评论

2

这在IE11中不起作用。

background-image: linear-gradient(top, #ff0000,#ffff00);

这份工作和展示看起来像是webkit版本。
background-image: linear-gradient(180deg, #ff0000,#ffff00);

Webkit同样支持...deg模式,但与Explorer不同的是,它的工作方式不同。以下是在webkit中的等效操作。

-webkit-linear-gradient(270deg, #ff0000,#ffff00);

注意: Chrome将不带webkit版本视为IE所做的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接