如何使用IE9,IE8,IE7和Opera在罗盘中进行跨浏览器渐变混音?

时间:2012-01-19 14:36:41

标签: css3 compass-sass sass

我想为所有浏览器制作mixin,包括IE9 IE9,IE8,IE7和Opera。

http://www.colorzilla.com/gradient-editor/生成代码

生成

background: #1e5799; /* Old browsers */
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzFlNTc5OSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzI5ODlkOCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUxJSIgc3RvcC1jb2xvcj0iIzIwN2NjYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3ZGI5ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top,  #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */
background: linear-gradient(top,  #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-8 */

对于IE9,我们需要设置filter:none

  

使用IE9支持完整的多站梯度(使用SVG)。添加一个   “渐变”类对所有具有渐变的元素进行添加   以下覆盖HTML以完成IE9支持:

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

指南针有渐变http://compass-style.org/reference/compass/css3/images/的最新模块,我们可以在调用$experimental-support-for-svg: true之后使用它,例如像这样使用

.gradient {@include linear-gradient(#000000, #ff0000)}

这给出了像这样的输出

.gradient {
  background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmMDAwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
  background-size: 100%;
  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #000000), color-stop(100%, #ff0000));
  background-image: -webkit-linear-gradient(#000000, #ff0000);
  background-image: -moz-linear-gradient(#000000, #ff0000);
  background-image: -o-linear-gradient(#000000, #ff0000);
  background-image: -ms-linear-gradient(#000000, #ff0000);
  background-image: linear-gradient(#000000, #ff0000);
}

如果我们将 compass Image 代码与colorzilla代码进行比较

  • 它缺少IE6-8

    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr ='#1e5799',endColorstr ='#7db9e8',GradientType = 0); / * IE6-8 * /

  • 和旧浏览器background: #1e5799; /* Old browsers */
  • 并使用background-image代替background
  • 并且它有一个额外的属性background-size: 100%;
  • 此页面上没有说明 http://compass-style.org/reference/compass/css3/images/如何 解决IE9所需的filter:none

我的问题:

  1. background-size: 100%;的好处是什么?
  2. 使用background-image代替background
  3. 有什么好处
  4. 有没有办法只为IE9中的元素添加filter:none 罗盘?
  5. 如何在指南针中获取IE6-8兼容代码,例如filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );

2 个答案:

答案 0 :(得分:2)

  

背景大小有什么好处:100%;?

     

使用背景图片代替背景有什么好处?

SVG图像是背景图像,该属性的内容是以编程方式生成的图像。为了保持一致,Compass使用背景图像。此外,指定background-image可以允许编码人员指定不会被混音影响的background-color

设置background-size可确保图像实际伸展以填充元素的空间,而不是图像本身的大小。

  

有没有办法在Compass中为IE9添加filter:none?

     

如何在指南针中获得IE6-8兼容代码,例如此过滤器:progid:DXImageTransform.Microsoft.gradient(startColorstr ='#1e5799',endColorstr ='#7db9e8',GradientType = 0);?

这两个选项有三种选择:

  1. 扩展mixin /编写自己的mixin。包含的mixins只是存储在Compass安装位置的文件,因此您可以随时编辑它们,或者使用它们来创建自己的mixins。
  2. Use CSS3 PIE with Compass.
  3. 将特定于IE的代码放入一个或多个特定于IE的样式表中(如果PIE不是一个选项,这是我首选的方法,因为它对CSS进行沙箱化,因此您无需执行hack即可获得一个版本或忽略给定的CSS行。)

答案 1 :(得分:1)

首先在_base.scss

中尝试一下
@import "compass/support";
$legacy-support-for-ie7: true;
$legacy-support-for-ie8: true;
$experimental-support-for-microsoft: true;
$experimental-support-for-pie: false;
$experimental-support-for-svg: true;

然后加入

@import filter-gradient($ start-color,$ end-color,$ orientation)