【问题标题】:is there any solution to get support of CSS Gradient in firefox 3.5 and lower?是否有任何解决方案可以在 Firefox 3.5 及更低版本中获得对 CSS Gradient 的支持?
【发布时间】:2011-03-05 17:26:09
【问题描述】:

是否有任何解决方案可以在 firefox 3.5 及更低版本中获得对 CSS Gradient 的支持?

http://hacks.mozilla.org/2009/11/building-beautiful-buttons-with-css-gradients/

【问题讨论】:

  • 他们为什么要这样做?它甚至不是 W3C 批准的财产。使用 2KB 的空间来添加渐变图像真的会杀了你吗?

标签: xhtml css


【解决方案1】:

我强烈建议您只使用 BG 图像。我知道每个人都迫不及待地想要开始使用所有最新的 whiz-bang CSS3 功能,但我们都只需要等待 CSS3 的这些部分被主流浏览器采用(这将在 CSS3 到达 W3C 之前发生)推荐)。

使用特定于供应商的扩展是 IMO 的一种不好的做法,并且似乎回到了没有人关心 Web 标准的时代,Web 开发人员也只是为单个浏览器编写代码(以及俗气专为IE 按钮),或者必须以多种方式编写相同的代码来支持不同的浏览器。现在所有主流浏览器都支持 PNG alpha 层透明度。所以强制使用 CSS 来生成渐变并没有什么好处。它只会引入不必要的代码冗余。

如果您仍然坚持绝对不使用 BG 图像,那么唯一的选择就是使用 JavaScript。这是一个应该在 Firefox 3 及更高版本,甚至可能是 Firefox 2 中工作的脚本:JavaScript Gradient Roundrects

代码如下所示:

var style = {
    'gradient-start-color': 0x99ddff,
    'gradient-end-color': 0xffffff,
    'border-radius': 1
};
OSGradient.applyGradient(style, $('#Disp')[0]);

但这仍然是一种迂回的方式来实现可以使用简单的 1x50 像素 PNG 图像获得的结果。

【讨论】:

    【解决方案2】:

    虽然本文“Cross-Browser CSS Gradient”解释了如何在所有浏览器中使用 css3 渐变功能,但仍仅限于 FireFox 3.6+。

    因此,2006 年 List Apart “Super-Easy Blendy Backgrounds” 的这篇旧文章可能会提供替代方案(但并非适用于您可能需要的所有用例)

    CSS3 将实现一个 background-size 属性,但由于 CSS3 的 ETA 为 never,所以现在没有任何帮助。那么我们该怎么做呢?
    好吧,我们使用可以缩放的东西,比如 img 元素。除了使用背景来显示 PNG 混合,我们可以使用 img 元素,并将宽度和高度设置为 100%。

    ,CSS 如下:

    <style type="text/css">.grad img {
      height: 100%;
      left: 0px;
      position: absolute;
      top: 0px;
      width: 100%;
      z-index: 0;
    }
    .box {
      border: solid orange 2px;
      float: left;
      margin: 1px;
      position: relative;
      width: 165px;
      padding: 5px;
    }
    .box * {
      margin: 0px;
      position: relative;
      z-index: 1;
    }
    * html .grad {
      filter: progid:DXImageTransform.Microsoft.AlphaImage »
    Loader (src='grad_white.png', sizingMethod='scale');
    }
    * html .grad img {
      display: none;
    }
    * html .box {
        position:static;
    }
    .blue { 
      background-color: #2382a1; 
    }
    .green { 
      background-color: #4be22d; 
    }
    .pink { 
      background-color: #ff009d;
    }
    </style>
    
    <!--[if IE 7]>
    <style type="text/css">
    .box {
      border: solid red 2px;
      height:2.5em;
    }
    </style>
    <![endif]-->
    

    和标记:

    <div class="box grad blue">
      <img src="grad_white.png" alt="blur gradient box" />
      <p><a href="#">Ooo, linked text</a>!</p>
    
    </div>
    <div class="box grad pink">
      <img src="grad_white.png" alt="pink gradient box" />
      <p><a href="#">Ooo, linked text</a>!</p>
    </div>
    
    <div class="box grad green">
      <img src="grad_white.png" alt="green gradient box" />
      <p><a href="#">Ooo, linked text</a>!</p>
    </div>
    

    【讨论】:

    • 感谢您的回复我知道这篇文章。我要求在不使用任何图像的情况下获得渐变。
    • @metal-gear-solid:我想你可能会,但这是我所知道的 css-gradient 的唯一替代品。我发现在这里引用它很合适。
    • 自我注意:在stackoverflow.com/questions/665239/…(第 1000 个答案)和stackoverflow.com/questions/2027649/…(第 2000 个答案)之后,这是我在 SO 上的第 3000 个答案 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多