【问题标题】:Compass background-image(linear-gradient) not working on IE指南针背景图像(线性渐变)在 IE 上不起作用
【发布时间】:2013-11-28 16:04:57
【问题描述】:

这个使用 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 版本,以及您需要它工作的版本。CSS 渐变在旧 IE 版本中需要不同的语法。
  • @Spudley 我添加了我在问题上使用的版本。我需要它在 IE9+ 上工作

标签: internet-explorer css sass gradient compass-sass


【解决方案1】:

您必须为 IE6-9 使用如下过滤器:

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

对于 IE10+

-ms-linear-gradient

我相信 IE6-9 可能只支持 2 个色标。我能给你的最好的帮助是:

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)支持完整的多级渐变。 为所有具有渐变的元素添加一个“渐变”类,并将以下覆盖添加到您的 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

【讨论】:

  • IE10+ 不需要-ms-。没有稳定版本的 IE 使用 -ms- 进行渐变。否则的每个来源都是错误的。
  • 没错,没有稳定版本可以,它应该是consumer preview 版本。但是添加它不会有什么坏处,如果您要支持所有其他浏览器前缀,您还可以添加另一个:P
  • 当然,如果你想给你的样式表添加不必要的膨胀,无论如何,但请不要推荐给其他人。正是这种态度让前缀变得如此脆弱。
  • 你打电话是不必要的膨胀,我称之为覆盖所有基地。当然,它在使用浏览器的市场份额中所占的比例很小,但如果你要竭尽全力支持其他一切,我认为它没有问题。我宁愿提供信息并让他做出决定,也不愿假设我知道什么对他最有利。
  • @DanielRamirez-Escudero 如果您在 colorzilla 链接上的代码下勾选 IE9 Support 复选框,它将为您提供额外的代码和解释。本质上,您必须取消为 IE6-8 支持添加的过滤器并通过外观使用 SVG。查看我的编辑
【解决方案2】:

这在 IE11 中不起作用

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

这项工作和展示就像当时的 webkit 版本

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

webkit 也支持 ...deg 模式,但不像资源管理器那样工作,这在 webkit 中是等价的。

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

注意:Chrome 像 explorer 一样理解 no webkit 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多