【问题标题】:CSS (perhaps with Compass): Cross-browser gradientCSS(也许用 Compass):跨浏览器渐变
【发布时间】:2011-08-05 14:48:09
【问题描述】:

我想在 CSS 中获得一个渐变(可能通过Compass),它适用于所有主流浏览器,包括 IE7+。有没有一种简单的方法可以做到这一点(无需编写大量代码,也无需自定义图像文件)?

我查看了 Compass 的 gradient mixin,但它不适用于 Internet Explorer。

有什么想法吗? (它不需要是 Compass ——我很乐意安装其他东西。)

编辑:我想要得到的是一些框架(如 Compass?),它生成的代码类似于 Blowsie 发布的代码,这些代码已经过跨浏览器测试。基本上就像我提到的Compass gradient mixin,但支持IE。 (我有点担心只是滚动我自己的 SCSS mixin 并粘贴到像 Blowsie 的代码这样的块中,因为我还没有测试过它并且没有资源这样做。)

【问题讨论】:

    标签: css background cross-browser gradient compass-sass


    【解决方案1】:

    我刚刚注意到当前的 Compass beta (0.11.beta.6) 支持在 compass/css3/images 模块中生成 IE 渐变(它取代了之前的渐变模块),因此您可以生成总共两个渐变短命令:

    @import "compass/css3/images";
    @import "compass/utilities/general/hacks";  /* filter-gradient needs this */
    
    .whatever {
      /* IE; docs say this should go first (or better, placed in separate IE-only stylesheet): */
      @include filter-gradient(#aaaaaa, #eeeeee);
      /* Fallback: */
      background: #cccccc;
      /* CSS 3 plus vendor prefixes: */
      @include background(linear-gradient(top, #aaaaaa, #eeeeee));
    }
    

    这会生成以下大量 CSS:

    .whatever {
      *zoom: 1;
      -ms-filter: "progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFAAAAAA', endColorstr='#FFEEEEEE')";
      filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#FFAAAAAA', endColorstr='#FFEEEEEE');
      background: #cccccc;
      background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #aaaaaa), color-stop(100%, #eeeeee));
      background: -moz-linear-gradient(top, #aaaaaa, #eeeeee);
      background: -o-linear-gradient(top, #aaaaaa, #eeeeee);
      background: linear-gradient(top, #aaaaaa, #eeeeee);
    }
    

    我想我宁愿在一次调用中同时使用 IE 和非 IE 渐变代码,但由于 IE 的 DXImageTransform 渐变功能非常有限,这可能是不可能的。

    【讨论】:

    • 更新:Smart people say 你不应该在 IE6-IE8 上制作渐变,因为它们会导致性能和布局问题。所以这些天我可能会省略filter-gradient 行。
    • -那你为 IE 渐变、图片做了什么?
    • 只是一个单色背景(上面的“后备”行)。
    • @JitendraVyas 添加$experimental-support-for-svg: true
    【解决方案2】:

    我用于所有浏览器渐变的代码..

                background: #0A284B;
                background: -webkit-gradient(linear, left top, left bottom, from(#0A284B), to(#135887));
                background: -moz-linear-gradient(top, #0A284B, #135887);
                background: -o-linear-gradient(#0A284B, #135887);
                filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0A284B', endColorstr='#135887');
                zoom:1;
    

    您需要指定高度或缩放:1 以将 hasLayout 应用于元素,以便在 ie 中工作

    【讨论】:

      【解决方案3】:

      虽然渐变的复杂性有限,但它们足够复杂,需要您认为“大量代码”。

      考虑:

      • 开始颜色、结束颜色和在一种和另一种之间转换所需的十六进制数学
      • “步数”
      • 每一步的宽度/高度
      • 由于没有纯 CSS 方式来执行此操作,这意味着渲染 HTML,每个颜色/步骤一个元素,而不会弄乱您现有的 HTML

      所以,不,如果没有为您完成所有这些工作的插件,则需要一些代码或图像。

      【讨论】:

      • 实际上,我认为您不必为此编写 HTML 代码。例如,请参阅webdesignerwall.com/tutorials/cross-browser-css-gradient 以了解实现方式。 (这对我来说太冗长了,所以我正在寻找一种使用 CSS 框架以编程方式完成它的方法。)
      • 我想说的是,没有简单的答案。你想要一个,但没有一个。这并不意味着我的回答值得一票否决。
      • 很公平,虽然“没有纯粹的 CSS 方式来做到这一点”是不正确的(CSS 3 支持渐变)——并且建议生成 HTML(或使用 JS)而不是额外编写在我看来,那些不支持它的浏览器的 CSS 是有问题的建议。
      猜你喜欢
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多