Firefox 3.6 中的 CSS 渐变

Firefox 3.6 包含许多 CSS 改进。在这篇文章中,我们将向您展示如何使用 CSS 渐变。

如果您正在运行最新的 Firefox 3.6 beta 版,您应该查看我们的 交互式演示 并查看相应的代码。使用单选按钮来打开或关闭不同的样式选项。

带有 CSS 渐变的背景

在背景中使用 CSS 渐变可以让您在两种或多种指定颜色之间显示平滑过渡,而无需使用图像。这反过来可以减少下载时间和带宽使用,在缩放时看起来更好,并可以让您创建更灵活的布局。

Firefox 3.6 支持两种类型的 CSS 渐变:线性 (-moz-linear-gradient) 和径向 (-moz-radial-gradient).

线性渐变

要创建 线性渐变,您需要设置一个起点和渐变的方向(或角度)以及定义颜色停靠点。

 -moz-linear-gradient( [ || ,]? ,  [, ]* )

起点。起点的工作方式与 背景位置 一样。您可以将水平和垂直位置设置为百分比、像素或使用 left/center/right 表示水平,以及 top/center/bottom 表示垂直。位置从左上角开始。如果您没有指定水平或垂直位置,它将默认设置为居中。

例如,以下是一个从蓝色到白色的线性渐变,从中心(水平)和顶部(垂直)开始。

basic_linear_bluetop

  .linear_gradient_square {
    width: 100px;
    height: 100px;
    border: 1px solid #333;
    background: -moz-linear-gradient(top, blue, white);
  }

另一个从左侧(水平)和居中(垂直)开始的渐变。

basic_linear_blueleft

    background: -moz-linear-gradient(left, blue, white);

以及一个从左侧(水平)和顶部(垂直)开始的渐变。

basic_linear_bluetopleft

    background: -moz-linear-gradient(left top, blue, white);

角度。如上所示,如果您没有指定角度,它将根据起始位置自动定义。如果您想要更精确地控制渐变的方向,您也可以设置 角度

例如,以下渐变具有相同的起始位置,即左侧居中,但右侧的渐变还具有 20 度的角度。

linear_gradient_angle

    background: -moz-linear-gradient(left 20deg, black, white);

在指定角度时,请记住它是在水平线和渐变线之间形成的角度,以逆时针方向计算。所以使用 0deg 会生成从左到右的水平渐变,而 90deg 会生成从下到上的垂直渐变。

linear_redangles

    background: -moz-linear-gradient(, red, white);

颜色停靠点。除了起始位置和角度之外,您还应该指定颜色停靠点。颜色停靠点是渐变线上的点,它们将具有在指定位置(以百分比或长度设置)指定的颜色。颜色停靠点的数量没有限制。如果您对位置使用百分比,则 0% 表示起点,100% 表示终点,但可以使用超过或低于这些值的数字来实现所需的效果。

以下是一个包含三个颜色停靠点的简单示例。由于没有为第一个和最后一个颜色指定点,它们将默认设置为 0% 和 100%。

linear_colorstops

    background: -moz-linear-gradient(top, blue, white 80%, orange);

如果未指定位置,颜色将均匀分布。

linear_rainbow

    background: -moz-linear-gradient(left, red, orange, yellow, green, blue);

透明度。渐变也支持透明度。例如,在堆叠多个背景时,这很有用。以下组合了两种背景:一张图像和一个从白色到透明白色的线性渐变。

linear_multibg_transparent

.multibackground_transparent {
    background: -moz-linear-gradient(right, rgba(255,255,255,0), rgba(255,255,255,1)), url(http://demos.hacks.mozilla.org/openweb/resources/images/patterns/flowers-pattern.jpg);
}

径向渐变

径向渐变的语法与线性渐变非常相似。

 -moz-radial-gradient([ || ,]? [ || ,]? , [, ]*);

除了您已经在线性渐变中看到的起始位置、方向和颜色之外,径向渐变还允许您指定渐变的形状(圆形或椭圆形)和大小(最近端、最近角、最远端、最远角、包含或覆盖)。

颜色停靠点。与线性渐变一样,您应该在渐变线上定义颜色停靠点。以下圆形具有相同的颜色停靠点,但左侧的渐变默认设置为均匀分布的颜色,而右侧的渐变为每种颜色设置了特定位置。

radial_gradient_stop

 background: -moz-radial-gradient(red, yellow, #1E90FF);
 background: -moz-radial-gradient(red 5%, yellow 25%, #1E90FF 50%);

形状。这里您可以看到两种可能的形状之间的区别,即圆形(左侧)和椭圆形(右侧),两者都以左下角为起点。

radial_circle_ellipse

 .radial_gradient_circle {
    background: -moz-radial-gradient(bottom left, circle, red, yellow, #1E90FF);
}
 .radial_gradient_ellipse {
    background: -moz-radial-gradient(bottom left, ellipse, red, yellow, #1E90FF);
}

大小。大小的不同选项(最近端、最近角、最远端、最远角、包含或覆盖)指的是用于定义圆形或椭圆形大小的点。

示例:椭圆形的最近端与最远角。
以下两个椭圆形具有不同的尺寸。左侧的椭圆形由起点(中心)到最近端的距离决定,而右侧的椭圆形由起点到最远角的距离决定。

radial_ellipse_size

  background: -moz-radial-gradient(ellipse closest-side, red, yellow 10%, #1E90FF 50%, white);
  background: -moz-radial-gradient(ellipse farthest-corner, red, yellow 10%, #1E90FF 50%, white);

示例:圆形的最近端与最远端。
左侧圆形的大小由起点(中心)到最近端的距离决定,而右侧圆形的大小由起点到最远端的距离决定。

radial_circle_size

 background: -moz-radial-gradient(circle closest-side, red, yellow 10%, #1E90FF 50%, white);
 background: -moz-radial-gradient(circle farthest-side, red, yellow 10%, #1E90FF 50%, white);

示例:包含的圆形。
这里您可以看到左侧的默认圆形,以及相同的渐变的包含版本(右侧)。

radial_contain

 background: -moz-radial-gradient(red, yellow, #1E90FF);
 background: -moz-radial-gradient(contain, red, yellow, #1E90FF);

重复渐变

如果您想重复渐变,您应该使用 -moz-repeating-linear-gradient-moz-repeating-radial-gradient

在下面的示例中,每种情况下都指定了四个颜色停靠点,并且它们被无限期地重复。

repeating_gradients

 .repeating_radial_gradient_example {
    background: -moz-repeating-radial-gradient(black, black 5px, white 5px, white 10px);
}
 .repeating_linear_gradient_example {
     background: -moz-repeating-linear-gradient(top left -45deg, red, red 5px, white 5px, white 10px);
}

演示

查看我们的 线性渐变和径向渐变的交互式演示 以获取更多示例。

请注意,渐变语法在 Firefox 3.6 beta 1 和 beta 2 之间有所变化,因此如果您在 beta 1 中使用过渐变,您可能需要更新您的代码。

关于 Alix Franquet

Alix Franquet 的更多文章…


56 条评论

  1. Gilberto Ramos

    非常有趣!=)

    2009 年 11 月 30 日 下午 11:22

  2. Asa Dotzler

    迫不及待地想看到它在 Firefox UI 中的效果。

    2009 年 11 月 30 日 下午 11:25

  3. lourdes

    非常好!

    2009 年 11 月 30 日 下午 11:35

  4. […] 更新:在我完成这篇文章后不久,Mozilla Hacks 发布了对新语法的深入探讨。[…]

    2009 年 11 月 30 日 下午 12:46

  5. Peter Gasston

    我刚刚写了两篇文章,将这种语法与 WebKit 团队最初提出的语法进行比较:第一部分第二部分

    2009 年 11 月 30 日 下午 12:48

  6. Wolf

    非常酷。我可以想象使用 moz 渐变在 body 元素上渲染 90 度 1px 黑色线条/1px 白色线条对浏览器渲染引擎来说会很重 - 这是真的吗?

    (例如,用于扫描线效果)

    2009 年 11 月 30 日 下午 12:55

    1. Tab Atkins

      并不特别。自己试试看。

      body { background: -moz-repeating-linear-gradient(white 0px, white 1px, black 1px, black 2px); }

      (注意 - repeating-*gradient() 函数不是标准的一部分。)

      2010 年 5 月 20 日 下午 16:39

  7. […] 关于 « Firefox 3.6 中的 CSS 渐变 […]

    2009 年 11 月 30 日 下午 14:10

  8. Neil Rashbrook

    从技术上讲,CSS 渐变是背景图像的一种形式。幸运的是,Gecko 1.9.2 支持多个背景图像,因此您可以在渐变前面放置一个图像。

    2009 年 12 月 1 日 上午 04:02

  9. Richard Taylor

    @Neil - 我想知道背景填充的堆叠顺序 - 会有办法操纵它吗?将图像 > 渐变更改为渐变 > 图像。

    2009 年 12 月 1 日 上午 04:09

    1. Tab Atkins

      是的,只需交换它们在 background 属性中出现的顺序即可。第一个出现的背景图像位于顶部,随后的图像绘制在其下方,直到遇到背景色,它位于任何图像的正下方。

      2010 年 5 月 20 日 下午 16:13

  10. Trompette

    有人知道 WebKit 团队是否计划使用这种出色的语法,而不是他们当前的语法吗?

    2009 年 12 月 1 日 上午 09:22

  11. Georgiy

    是的,与 WebKit 的语法相比,这种语法真的很棒。你们太棒了!

    2009 年 12 月 2 日 上午 01:37

  12. […] 3.6 允许您使用 CSS 背景做更多的事情:您可以使用渐变,设置背景大小,以及指定多个 […]

    2009 年 12 月 2 日 上午 11:49

  13. […] Firefox 3.6 中的 CSS 渐变 opisuje,w jaki sposób, będzie można wycisnąć gradienty ze zbliżającego się wielkimi krokami Firefoxa 3.6, […]

    2009 年 12 月 6 日 下午 14:30

  14. Alan Hogan

    我很失望地发现,无法选择渐变的“结束点”。 -webkit-gradient 允许我选择“左上角”作为起点和“右中心”作为线性渐变的终点。对于我正在使用的设计,它实际上有很大的区别。

    2009 年 12 月 20 日 下午 14:15

  15. Luiz Socrate

    @Alan Hogan:只需将结束点定义为双重停止点。
    例如:
    -moz-linear-gradient(top, blue, white 80%, white)
    这将呈现一个从上到下的蓝色到白色渐变,在 80% 处停止。

    ;)

    2009 年 12 月 21 日 下午 15:55

    1. Tab Atkins

      您甚至不需要双重指定结束点 - 只需编写 -moz-linear-gradient(top, blue, white 80%) 即可。最后一个颜色停止点用于任何在其之后的内容,因此从 80% 到 100%,以及永远,渐变将是白色(并且它在 0% 以下的所有百分比中都是蓝色)。

      2010 年 5 月 20 日 下午 15:42

  16. Jimmo

    哇!很棒的工作…

    2009 年 12 月 27 日 上午 12:04

  17. […] Firefox 渐变 […]

    2010 年 1 月 9 日 上午 08:59

  18. […] Firefox 3.6 中的 css 渐变 […]

    2010 年 1 月 18 日 上午 05:33

  19. […] Gradienter med CSS3 […]

    2010 年 1 月 20 日 上午 10:50

  20. […] https://hacks.mozilla.ac.cn/2009/11/css-gradients-firefox-36/ 了解更多 […]

    2010 年 1 月 21 日 上午 11:22

  21. Eric Newlon

    每个人都喜欢新功能,但真正需要的是跨浏览器标准化,这样您就不必编写特定于浏览器的代码。这些花哨的功能总是出现在特定浏览器的开发中,但没有人使用它们,因为使用旧方法更容易...就像 Firefox 中的圆角,它只在 Firefox 中有效 - 为什么网页设计师要花额外的时间和精力去使用它,而他们仍然需要使用图形方法在其他浏览器中工作呢? 我支持新功能的开发......但给我们一个休息的机会 - 我们需要标准化!

    2010 年 1 月 21 日 下午 14:31

    1. Vivek A. Bhosale

      我完全同意 Eric 的观点。这是 Firefox 做的一项很棒的工作。但从我们(网页设计师)的角度来看,在它不能在其他浏览器中运行之前,它是不可用的,或者我们只需要为 Firefox 制作网站。

      但积极的是,这是一项好工作。

      2010 年 1 月 28 日 下午 23:49

    2. Tab Atkins

      此功能实际上是标准化的 - 它出现在 CSS 图像模块级别 3 中。

      然而,webkit(Safari 和 Chrome)的渐变实现出现在它被标准化之前。事实上,标准化是因为 webkit 的实现,为了修复语法中发现的问题和弱点。

      Firefox 碰巧是第一个实现这个新属性的浏览器,但所有浏览器都应该在未来实现它。

      2010 年 5 月 20 日 下午 15:40

  22. Angel G.

    哇!这真不错!

    2010 年 1 月 21 日 下午 19:56

  23. […] 现在提供渐变、多个背景和可缩放的 […]

    2010 年 1 月 23 日 上午 01:53

  24. […] Firefox 3.6 中的 css 渐变 ✩ Mozilla Hacks - 网页开发者博客 Firefox 3.6 包含许多 CSS 改进。在这篇文章中,我们将向您展示如何使用 CSS 渐变。 […]

    2010 年 1 月 25 日 上午 10:18

  25. […] 您可以在 Firefox 3.6 中使用渐变,如果您感兴趣,我建议您查看 Mozilla Hacks,它有一套很棒的 […]

    2010 年 1 月 25 日 下午 13:39

  26. […] 去年 11 月底,Mozilla Hacks 宣布了在即将发布的 Firefox 3.6(最终版本刚刚发布)的背景中支持 CSS 渐变。 […]

    2010 年 1 月 28 日 下午 14:17

  27. DesignerSandbox

    看到这个很有趣。
    有点像在 Photoshop 中使用渐变,但使用的是 CSS。
    特别是像与背景图像一起使用的渐变。
    不错

    2010 年 2 月 2 日 下午 18:24

  28. Frank Bright

    嗨,我对 CSS 还比较陌生,把这段代码放到表格里效果还不错,但我想知道这段代码是否可以更直接地用于 body {} 部分,以指定一般的身体背景。

    我尝试过复制代码并把它放到 body 背景中,但没有出现任何东西 - 我只是得到纯白色。

    2010 年 2 月 6 日 上午 05:58

  29. Raff

    我添加了
    body {
    background:-moz-linear-gradient(top left 45deg, blue, white);
    background:-webkit-gradient(linear, top left,bottom right,from(blue), to(white));
    }
    在 FF3.6 中,渐变只平滑地延伸到页面最后一个元素的底部,然后它会重复自身。这不是我预期的,实际上它看起来很糟糕。在 Safari 中,颜色会一直延伸到窗口底部。

    2010 年 2 月 18 日 下午 14:21

  30. dev

    太棒了,真是太棒了,但语法并不友好

    2010 年 2 月 21 日 下午 15:23

  31. April Hollands

    非常感谢您:解释得很好,而且一路都有很棒的图形。

    2010 年 2 月 22 日 上午 02:37

  32. Raff

    我收回我的抱怨,通过在 body 标签中添加 height:100%,破损的模式得到了修复。现在它看起来很棒。
    太可惜了,如果我们想保持标准合规性,它就不能使用。

    2010 年 2 月 22 日 上午 12:57

  33. Dan

    为什么您不使用 background-repeat 属性来重复渐变?对我来说似乎合乎逻辑,或者是否存在任何向后兼容性问题或类似问题?

    2010 年 3 月 4 日 上午 05:37

  34. Steven Seagal

    太棒了!更多特定于浏览器的代码!!!!

    为什么我们不能增量更新 W3C CSS 标准,并让所有浏览器都支持该标准?

    2010 年 5 月 28 日 下午 18:23

  35. […] 我们将研究一个简单的示例,它使用新增的渐变功能(查看相关文章)。通过使用渐变和传统的 CSS 属性,可以创建出漂亮的斜面和浮雕效果 […]

    2010 年 6 月 23 日 下午 20:44

  36. […] 很容易理解,但渐变更难。使用 CSS3 渐变,您可以创建一些令人惊叹的形状 - 从飞镖盘到彩虹 - 所以您可以想象它有一个更复杂的语法。值得庆幸的是,我们不需要编码 […]

    2010 年 7 月 1 日 下午 19:18

  37. […] 3.6 支持更多 css 背景。渐变 (https://hacks.mozilla.ac.cn/2009/11/css-gradients-firefox-36/),背景图像大小 background size,以及多个背景图像 multiple […]

    2010 年 8 月 3 日 下午 22:45

  38. freakqnc

    为什么 W3C 总是把事情搞得过于复杂,而人们不得不求助于“黑客”来使事情正常工作? 有一次,拥有不需要任何黑客和秘密达芬奇密码的功能会很好!

    使用英语中的说明会不会更简单? 比如:top-bottom, 30deg linear-gradient [用逗号分隔的颜色和百分比数组],这种方式可以有一些变化,比如能够指定渐变的起始和结束坐标,也可以用于其他类型的渐变,比如椭圆形、菱形等等。

    是谁想出这些复杂的东西?!我们需要简化,而不是复杂化! 我们最终会用亚拉姆语编写代码来使其更便于浏览器使用吗???

    已经有了一种语言可以用来以逻辑的方式描述特定功能的属性,那就是英语! 这只是我的两分钱,您当然可以不同意它(特别是如果您是那些参与制定 W3C 标准的人之一;P),但也许我们应该开始在标记语言方面更有效地使用英语,而不是更“深奥和隐秘”的方式,以使每个人的生活更轻松! ;)

    2010 年 8 月 4 日 上午 08:47

  39. freakqnc

    顺便问一下,有人找到一种方法来使用这种方法,用一个简单的渐变填充页面的背景,该渐变会随着浏览器窗口大小的调整而拉伸吗? 我不想为 div 编写任何硬编码的大小。我只是想能够为页面的主体设置一个微妙的背景,并让内容根据需要浮动在顶部。 欢迎任何建议;)

    2010 年 8 月 4 日 上午 08:51

    1. cssdoodler

      对于 FF3.6 及更高版本,这条 CSS 规则似乎有效。渐变会填充视窗,并在窗口大小改变时重新填充。

      html {
      width: 100%;
      height: 100%;
      background-image: -moz-radial-gradient(200px 0, circle cover, blue, black);
      }

      如果您想填充整个视窗,设置宽度和高度属性为 100% 很重要。

      2010 年 8 月 13 日 上午 09:21

      1. BR

        “如果您想填充整个视窗,设置宽度和高度属性为 100% 很重要。”

        谢谢!一个小小的调整节省了大量的时间!

        2011 年 1 月 30 日 下午 18:27

  40. […] 此功能与 CSS 渐变和 SVG 图像的功能重叠,但在某些情况下非常有用,例如动画。例如,假设您 […]

    2010 年 8 月 24 日 下午 13:50

  41. Avik Mitra

    太棒了!很棒的工作…

    2010 年 9 月 21 日 上午 02:05

  42. ArielMacintosh™

    ¡Exelente!

    2010年11月11日 下午12:45

  43. […] 在背景中使用 CSS 渐变可以让你在两种或多种指定颜色之间显示平滑过渡,而无需使用图像。 这反过来可以减少下载时间和带宽使用,在缩放时看起来更好,并且可以让你创建更灵活的布局。 Firefox 3.6 支持两种类型的 CSS 渐变:线性(-moz-linear-gradient)和径向(-moz-radial-gradient)。 hacks.mozilla.org […]

    2011年1月12日 上午3:57

  44. […] Firefox 3.6 中的 css 渐变来自 Mozilla Hacks 博客的一篇很棒的文章,详细介绍了 Mozilla 3.6 多种渐变可能性 […]

    2011年2月3日 下午12:27

  45. […] https://hacks.mozilla.ac.cn/2009/11/css-gradients-firefox-36/ (Mozilla 详细说明) […]

    2011年8月19日 下午1:33

  46. id meneo

    非常好!这篇帖子对我非常有用,谢谢,因为现在到处都是渐变。

    2011年9月9日 上午9:29

  47. Gholamreza

    非常有帮助,谢谢

    2012年4月7日 上午4:13

  48. […] Firefox 3.6 中的 css 渐变来自 Mozilla Hacks 博客的一篇很棒的文章,详细介绍了 Mozilla 3.6 多种渐变可能性 […]

    2012年6月19日 下午9:09

  49. Ritesh P

    很棒的文章…………….

    2012年7月19日 下午6:54

本文的评论已关闭。