使用 CSS 渐变打造精美按钮

特别感谢 Ryan Doherty 建立了这个演示,并使我能够轻松地将其转化为教程。

在这个演示中,我们将逐步讲解在 Firefox 3.6 中即将推出的新渐变功能(参见相关文章)的简单用例。我们将使用渐变和现有的 CSS 属性构建一个看起来很不错的浮雕和斜面按钮。该按钮是为我们 Personas 网站的下一个版本而开发的。

使用基于 CSS 的方法来生成按钮是网页开发人员的一大进步。这意味着你无需每次更改文本时都重新生成图像,网页加载速度也会快很多,因为你无需下载单独的图像,并且还可以轻松地对文本进行本地化。在这种情况下,它还会从可访问性的角度使网页更出色 - 位于 <a href> 中的文本可以添加上下文。

您可以查看 此演示的最终版本,或者按照此处概述的步骤操作。

创建按钮

按钮只是一块带有链接的矩形空间。我们可以用一小段简单的 HTML 创建它

  
    Get Personas for Firefox
    It's free and installs in seconds
  

这将创建一个段落元素并设置一个固定宽度。内部的“按钮”实际上是一个简单的 <a> 链接,其中包含文本。

在设置了按钮的宽度后,我们需要强制 <a> 充当块级元素,这样内部的文本将作为单个元素的一部分流动,而不是显示为两个不同的部分

display: block;

我们希望选择一些更好的字体和更漂亮的样式

font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 138.5%;

text-align: center;
text-decoration: none;

并添加一些文本周围的填充,并设置圆角

padding: 10px;
-moz-border-radius: 10px;

我们在按钮周围设置了一个边框,并设置了一个背景色作为其他浏览器的回退。(当然,除了 IE。请参见下面的说明。)

border: 1px solid #659635;
background: #99ca28;

我们还希望设置文本的颜色,并添加一个漂亮的阴影,使文本看起来像是浮雕在按钮上的

text-shadow: -1px -1px 2px #777777;
color: #ffffff;

一旦我们有了这些,我们就可以使用 -moz-linear-gradient CSS 属性定义渐变,使其在顶部具有漂亮的斜面外观

background: -moz-linear-gradient(top, #CFE782 0%,
                                      #9BCB2A 2%,
                                      #5DA331 97%,
                                      #659635 100%);

这里的语法非常简单。“top”表示它从区域的顶部开始,一直到按钮的底部。其余的语法定义了所谓的“颜色停止”。这些允许你定义实际上跨越两种以上颜色的渐变过渡。这是在这种情况下的使用,因为斜面效果需要从一种颜色到另一种颜色的非线性过渡。

在上面的语法中,它定义了起始颜色 (0%)、斜面效果 (2%)、大部分过渡 (97%) 和用于结束的边框颜色 (100%)。这会产生一种效果,即它在顶部非常浅,仿佛有一个光源正在移动到靠近底部的更暗的颜色。

IE 说明

简要介绍一下我们亲爱的朋友 Internet Explorer。虽然较旧版本的 Firefox 和 Safari 都可以优雅地处理 background: -moz-linear-gradient,当它们遇到它们不知道如何处理的属性时不会影响背景呈现,但 IE 只显示白色背景。一个可能的解决方法是在一个单独的样式表中为 IE 包含一个后面的 background: 属性,该样式表会在加载此样式表后加载。可能还有其他方法来处理这个问题,但值得注意的是,这是一个问题。

关于 Christopher Blizzard

一次发布,让网页变得更好。

更多 Christopher Blizzard 的文章……


27 条评论

  1. Kamal

    看起来很酷... 但是它什么时候会在所有浏览器中标准 CSS 4 中实现?

    2009 年 11 月 30 日 下午 2:34

  2. Rich

    值得看看用于 JavaScript 的 Modernizr 库 - 它可以对诸如此类的东西进行功能检测,使你能够将不同的样式应用于在不支持该功能的浏览器中的元素。

    值得注意的是,Webkit 也支持渐变,但使用不同的语法,因此你可以在 Gecko 和 Webkit 中使用它,这意味着只有 IE 和 Opera 才会得到一个平面的按钮。对于那些浏览器,你可以选择提供一个渐变图像(如果是像背景那样的大块设计),或者完全不提供(如果是按钮)。

    2009 年 11 月 30 日 下午 3:07

  3. nemo

    嘿。感谢您的建议。
    到目前为止,我一直通过使用高背景图像或逐渐淡化为纯色的背景图像来处理任意长的站点内容。

    现在,感谢 hacks.mozilla.org 上的文章,我为支持的浏览器添加了一些我认为很漂亮的东西。
    http://melusine21cent.com/mag/node/42

    此页面现在在 Firefox 和 Safari 中逐渐淡化为深色 - 我还没有测试过 Safari。

    哦。如果你在评论中查看
    /mag/themes/melusine/style.css,你会看到我遇到一个我没有弄明白的问题。

    我想定义两个渐变,以更美观的方式处理没有背景图像的情况。我想让一个渐变从代表当前图像顶部的颜色过渡到当前图像底部,另一个则继续延伸到该位置之外。
    我尝试使用单个声明来实现它
    -moz-linear-gradient(#92dbd6, #077582 1052px, #022228)
    但这会导致明显的间断。颜色在 1052px 处并不完全匹配。

    然后我尝试了
    -moz-linear-gradient(#92dbd6, #077582 1152px), -moz-linear-gradient(#077582 1152px, #022228)

    但这根本行不通。

    这不是什么大问题,因为人们通常会启用该图像,但如果能正常工作,可能会更好,所以我才想问问。

    哦,对了,是的,我必须在 condcom 中添加一个覆盖,否则它确实会搞砸 background-image,选择卡在无效(从它的角度来看)行上,而不是将其丢弃。

    2009 年 11 月 30 日 下午 5:10

  4. nemo

    (使它正常工作的一个原因是 jpeg 很大,而平滑的渐变在加载时看起来会更漂亮)

    2009 年 11 月 30 日 下午 5:12

  5. Neil Rashbrook

    当你在设置背景色时,为什么不使用 background-color 属性?

    2009 年 12 月 1 日 上午 3:33

  6. Goulven

    一个内嵌的 box-shadow 也适用于简单的斜面。


    斜面链接文本

    使用 box-shadow、-moz-box-shadow 和 -webkit-box-shadow,它在所有现代浏览器中都能正常工作,包括 Firefox 3.5。

    2009 年 12 月 1 日 上午 5:45

  7. David Tenser

    非常酷。是否可以为整个按钮也获得一个阴影,就像我们在 http://support.mozilla.com/en-US/kb/(用于搜索框)上使用的那样?

    2009 年 12 月 1 日 上午 7:22

  8. Goulven

    我的上一条评论中的 style 属性已被删除,它应该包含以下内容

    a href=”#” style=”background: #000;box-shadow: 0 5px 10px #fff inset;-moz-box-shadow: 0 5px 10px #fff inset;-webkit-box-shadow: 0 5px 10px #fff inset;”
    斜面链接文本
    /a

    2009 年 12 月 1 日 上午 11:17

  9. Ryan Doherty

    @David: 是的,你可以使用 -moz-box-shadow https://mdn.org.cn/En/CSS/-moz-box-shadow

    2009 年 12 月 3 日 下午 11:22

  10. Jakob K…

    这个教程很棒!
    按钮很漂亮!

    2010 年 1 月 17 日 上午 10:57

  11. […] 使用 CSS 渐变打造精美按钮 ✩ Mozilla Hacks - 网页开发者博客 在这个演示中,我们将逐步讲解在 Firefox 3.6 中即将推出的新渐变功能(参见相关文章)的简单用例。我们将使用渐变和现有的 CSS 属性构建一个看起来很不错的浮雕和斜面按钮。[…]

    2010 年 1 月 25 日 上午 10:21

  12. Ryan Cowles

    太棒了!干净、专业,而且全部使用 CSS。感谢您的帖子!

    2010 年 5 月 1 日 上午 8:55

  13. Matthias

    可以这样使用

    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=’#9BCB2A’, endColorstr=’#5DA331′);

    以实现 IE 兼容性。它不如前面那样好,因为它不会有斜面效果,但它仍然比只是一个白色背景要好!

    2010 年 5 月 1 日 下午 1:32

  14. […] 原本:https://hacks.mozilla.ac.cn/2009/11/building-beautiful-buttons-with-css-gradients/ […]

    2010 年 6 月 23 日 下午 8:46

  15. […] 使用 CSS 渐变打造精美按钮 使用基于 CSS 的方法意味着你无需每次更改文本时都重新生成图像,网页加载速度也会快很多,并且还可以轻松地对文本进行本地化。在这种情况下,它还会从可访问性的角度使网页更出色 - 位于 <a href> 中的文本可以添加上下文。在这个演示中,我们将向你展示新渐变功能的简单用例,并学习如何使用渐变和现有的 CSS 属性构建一个看起来很不错的浮雕和斜面按钮。[…]

    2010 年 7 月 1 日 上午 8:14

  16. […] 使用 CSS 渐变打造精美按钮 […]

    2011 年 4 月 14 日 上午 5:32

  17. […] 使用 CSS 渐变打造精美按钮 […]

    2011 年 5 月 15 日 下午 12:34

  18. […] 使用 CSS 渐变打造精美按钮 […]

    2011 年 5 月 20 日 上午 10:56

  19. […] 使用 CSS 渐变打造精美按钮 […]

    2011 年 7 月 31 日 上午 6:01

  20. […] » 查看教程 HTML+CSS设计、html+css ← Web 移动应用:HTML5、CSS 和 JavaScript /* */ […]

    2011 年 8 月 30 日 下午 9:30

  21. […] » 查看教程 […]

    2011 年 8 月 31 日 下午 9:52

  22. […] 10. 使用 CSS 渐变打造精美按钮 […]

    2011 年 9 月 6 日 上午 7:15

  23. […] » 查看教程 Designy […]

    2011 年 9 月 7 日 上午 1:10

  24. Evan

    演示链接已失效,文章中也没有截图。糟糕。

    2011 年 10 月 13 日 下午 3:16

  25. […] » 查看教程 […]

    2011 年 12 月 28 日 晚上 8:31

  26. […] 使用 CSS 渐变打造精美按钮 […]

    2012 年 4 月 8 日 上午 5:53

  27. Carl

    完美,Chris :)

    非常感谢你,我目前正在工作网站上使用它(做了一两个小改动 :))

    2012 年 9 月 28 日 上午 4:03

本文评论已关闭。