【教程】jQuery打造动态渐变按钮

  这是写给web设计者和前端开发者的教程,我们将演示如何使用Photoshop创建按钮的sprite图,然后是如何使用jQurey打造动态渐变效果。本教程分为以下三步:

Step1 - Photoshop

Step2 - HTML/CSS

Step3 - JavaScript(jQuery)

Step4 - CSS修改

 

  最终结果如下:

  您可以点击查看演示,也可以点击下载源代码

 

Step1 - Photoshop

1. 新建文件

  按钮的尺寸是100px X 80px,但由于我们需要创建一个有两种状态的CSS sprite背景图,所以我们在Photoshop中创建(Ctrl+N)一个长宽为200px X 160px的图片文件,如下图:

2. 创建参考线

  为了使绘制按钮更容易,我们创建参考线,从标尺中拉出参考线,如果你找不到标尺,可以按Ctrl+R显示,如下图:

3. 绘制形状

  选择工具面板中的矩形工具,设置圆角半径为10px,在画布上绘制形状,如下图:

4. 设置形状样式

  接上图最后一步,双击层,打开图层样式窗口,设置形状的样式,首先选择渐变叠加,设置渐变颜色从#3d3d3d到#8b8b8b,如下图:

  然后,选择“内发光”,设置混合模式为“正常”,不透明度为100%,颜色设置为#ffffff,图素大小设置为3像素,如下图:

  之后,再选择“描边”,设置大小为1像素,位置为“内部”,颜色为黑色#000000,如下图:

5. 添加字体

  输入文本,设置文字相对水平和垂直居中,字体为方正准圆简体,字号36点,加粗平滑,颜色为白色(#FFFFFF),如下图:

6. 设置字体样式

  同样的双击文字图层,打开文字图层样式,设置字体样式,点击“投影”,设置混合模式为“正常”,颜色为#3e3e3e,不透明度为100%,角度为90度,距离为1像素,大小为2像素;点击“内阴影”,设置混合模式为“正常”,颜色为#454545,不透明度为75%,角度为90度,距离为1像素,大小为2像素,如下图所示:

  至此,我们就完成链接状态下的按钮背景图,效果如下:

7. 悬停背景图

  制作鼠标悬停状态下的按钮背景图,把图层放入组内,复制组,移动,并重命名,如下图:

8.背景图属性

  修改hover背景图的样式属性,打开背景图的图层样式窗口,选择“描边”,修改边框颜色为#004d77;选择“渐变叠加”,修改渐变从#1671a3到#5baedc,如下图:

 

9. 设置字体样式

  打开字体图层样式,选择“投影”,修改投影颜色为#207aad;选择“内阴影”,修改字体颜色为#0d4f74,如下图:

10. 图层半透明

  添加图层半透明效果,按以上步骤修改,鼠标悬停背景图如下,最后是再加上一层半透明层,先添加一个200px X 40px的白色层,置顶并设置白色层的透明度为10%,如下图:

  最后,我们完成的CSS sprite背景图如下,您也可以点击下载PSD文件

 

Step2 - HTML/CSS

  按钮的HTML代码很简单:

<a class=”button”>前端档案</a>

  再通过CSS设置一下背景图片就可以了,CSS代码如下:

/*链接按钮样式*/
.button {
	width:200px;
	height:80px;
	display:block;
	background:url(bg_button.gif) top no-repeat;
	text-indent:-9999px;
}
/*按钮悬停样式*/
.button:hover{
	background:url(bg_button.gif) bottom no-repeat;
}

  按照我们前面设计的图片,按钮的长宽为200px X 80px,背景图为黑色按钮。这段CSS就能够实现我们示例中的第一种效果(纯CSS效果)。

 

Step3 - JavaScript/jQuery

  通过JavaScript,我们可以让按钮更加炫酷一些,我们需要在之前基础上加一个<span>元素,作为鼠标悬停时候显示的背景层,那么HTML会在DOM加载完成后修改成为:

<a class=”button”><span class=”hover”>前端档案</span></a>

  <span>元素在鼠标悬停前是全透明的,鼠标经过时,逐渐不透明,以达到渐变的效果,动画过程如下图:

通过以上分析,我们可以写出jQuery代码如下,在DOM加载完成后,为按钮链接添加<span>层作为鼠标经过时的背景图,在为<span>元素添加鼠标悬停事件,鼠标经过时,渐变至不透明,鼠标离开时,渐变至全透明。

//把文本包含到<span>元素中,再附加到.button中
$('.jsbutton,.viewbutton,.downloadbutton').wrapInner('<span class="hover"></span>').css('textIndent','0').each(function () {
	//先设置<span>元素中全透明,再添加鼠标悬停事件
$('span.hover').css('opacity', 0).hover(function () {
		$(this).stop().fadeTo(650, 1); //渐变至不透明
	}, function () {
		$(this).stop().fadeTo(650, 0); //渐变至全透明
	});
});

至此,我们完成了JS代码,还要注意一个步骤,CSS修改,见Step4。

 

Step4 - CSS修改

  在纯CSS效果的示例中,我们是利用:hover伪类来实现sprite图片的切换,当我们使用jQuery后,是引入一个<span>层作为鼠标经过时背景图,所以CSS需要做如下修改:

/*之前的按钮悬停样式*/
.button:hover{
	background:url(bg_button.gif) bottom no-repeat;
}

修改为

/*不需要在设置:hover的样式,而是设置span.hover的样式*/
.button span.hover {
	/*注意要使用绝对定位*/
position: absolute; 
	display: block;
	width:200px;
	height:80px;
	background:url(bg_button.gif) bottom no-repeat;
	text-indent:-9999px;
}

 

总结

  以上我们按4个步骤实现了一个动态渐变按钮,在演示中,我还提供了一个扩展示例,您可以跟着自己实现一个,也可以下载源代码修改定制,当然,您有什么好的提议或者有什么问题,欢迎给我留言。

  查看最终效果

  下载源代码

本文地址:http://www.cnblogs.com/wiky/articles/gradual-change-button.html

PS:本文由维奇原创,如有转载请注明出处,谢谢!

标签: jQuery, Tutorials
posted @ 2010-04-21 13:28 漫凯维奇 阅读(12446) 评论(49) 编辑 收藏

 回复 引用 查看   
#1楼[楼主] 2010-04-21 13:33 漫凯维奇      
因为有一些园友问到博客皮肤还有页面设计的问题,还有人问我拿图标PSD原稿,为此,在此教程中详细的演示按钮的制作过程,如果对这部分不感兴趣的朋友可以跳过直接看Step2。另,下载也提供了按钮图片的PSD原稿。

推荐阅读《jQuery打造动态下滑菜单

 回复 引用 查看   
#2楼 2010-04-21 13:42 麦舒      
文章不错!
 回复 引用 查看   
#3楼 2010-04-21 13:59 Mr.King      
前端设计师....
 回复 引用 查看   
#4楼 2010-04-21 14:02 Dozer      
那张动态渐变过程 的图很强大~
 回复 引用 查看   
#5楼[楼主] 2010-04-21 14:08 漫凯维奇      
引用Dozer:那张动态渐变过程 的图很强大~

我觉得前端开发设计更多的是设计理念和思路,对于如何表达这个过程,鄙人算是苦思已久,用3D图勉强表达得出来~

 回复 引用 查看   
#6楼 2010-04-21 14:25 Sunny Peng      
@漫凯维奇
用这种方式做圆角按钮?
不错,能够玩一下PS了,谢谢博主。

 回复 引用 查看   
#7楼 2010-04-21 14:45 匡匡      
一直做不出这种效果的按钮,今天学到了,谢谢了!
 回复 引用 查看   
#8楼 2010-04-21 15:45 Hello,world      
博主主页样式设计得不错
 回复 引用 查看   
#9楼 2010-04-21 16:10 Xex0r      
很久很久就想做這樣的東東出來,可以一直沒有,因為做的不滿意,看了樓主的教程,受益匪淺,真心感謝
 回复 引用 查看   
#10楼 2010-04-21 17:19 Freewind      
很强大,学习```
 回复 引用 查看   
#11楼 2010-04-21 17:41 沛沛      
咨询下LZ:

但是这种,有多少按钮就得写多少CSS,同时文字还得做图片上
可不可以文字不用作在图片上?

 回复 引用 查看   
#12楼[楼主] 2010-04-21 17:49 漫凯维奇      
@沛沛
一个网站也不会全是这样的按钮,一般是用在注册按钮,下载,甚至可以做成导航菜单;如果很多地方用,用相同的class名,也不用每个按钮都写CSS啊~~

 回复 引用 查看   
#13楼 2010-04-21 18:17 Jason Deign      
不错不错,不但代码写的好,图图也不错哦...
 回复 引用 查看   
#14楼 2010-04-21 21:27 Sam Lin      
请问如何制作动态渐变那张图,个人觉得非常不错
 回复 引用 查看   
#15楼 2010-04-21 23:12 joe wang      
楼主加油,多出这样的好文章!
 回复 引用 查看   
#16楼[楼主] 2010-04-21 23:28 漫凯维奇      
引用joe wang:楼主加油,多出这样的好文章!

谢谢支持!~

 回复 引用   
#17楼 2010-04-22 09:39 360[未注册用户]
jquery 就是强大,支持了.
 回复 引用 查看   
#18楼 2010-04-22 09:40 半夜喝茶      
写得很详细
 回复 引用 查看   
#19楼 2010-04-22 11:38 雪痕-shawen      
非常好。。。
能提供一些博皮给大家么?
灰常感谢!!

 回复 引用 查看   
#20楼 2010-04-22 13:41 WebClerk      
哇,这个好漂亮,呵呵,谢谢楼主啊,,
 回复 引用 查看   
#21楼 2010-04-24 11:08 只睡5小时      
写的非常仔细,向楼主学习
第Step1 第9,貌似有笔误:
“修改字体颜色为#0d4f74”,应该是“设置投影颜色为#0d4f74”吧

我在写样式表的时候总是感觉不知道用什么颜色好

 回复 引用 查看   
#22楼 2010-05-06 08:44 Jason Deign      
@Sam Lin
那不是都给你写的清清楚楚了吗?一步一步教你做还不会?你是不是认真看完?

 回复 引用   
#23楼 2010-05-08 08:40 波澜不惊[未注册用户]
我这鼠标放到按钮上时总是出现忙碌的状态,不知道咋回事
 回复 引用   
#24楼 2010-05-09 10:54 软件网[未注册用户]
嗯。。写得真详细,谢谢博主分享。
 回复 引用   
#25楼 2010-05-10 12:58 imdonkey[未注册用户]
如此详细的教程真是少见~~辛苦啦~
 回复 引用 查看   
#26楼 2010-05-10 17:18 Prince.Wei      
有个问题
为什么在IE6下hover和out的时候页面会做刷新一样的闪动状?
不知道你们的是什么情况。

活用jQuery的好例子

PS:您的评论系统很糟糕

 回复 引用 查看   
#28楼 2010-05-12 11:07 LoneSea      
引用Prince.Wei:
有个问题
为什么在IE6下hover和out的时候页面会做刷新一样的闪动状?
不知道你们的是什么情况。


同问

貌似用mootools不会出现鼠标乱闪的状态 不知道是不是jquery fade 的问题


 回复 引用   
#29楼 2010-05-12 16:18 4444444444[未注册用户]
CSS里的text-indent:-9999px;

JS里的.css('textIndent','0')

各自是什么意思?为什么要用这个

 回复 引用   
#30楼 2010-05-13 16:03 botao1[未注册用户]
text-indent:-9999px是为了把<a>标签的内容隐藏起来而不是删除掉,
是图片替换文字的一种解决方案;

不明白的是最后CSS样式里为什么要用:

/*注意要使用绝对定位*/
position: absolute;

 回复 引用   
#31楼 2010-05-18 14:30 jmtbai[未注册用户]
position: absolute;不用这个的话,text-indent好像就对span不起作用了,也不知道是为什么
 回复 引用   
#32楼 2010-05-23 22:35 长岛冰泪[未注册用户]
WPG要有你这样的人才多好啊
 回复 引用 查看   
#33楼 2010-06-04 11:28 桃酥      
强大的教程。以后多关注您的教程,受益匪浅。
 回复 引用   
#34楼 2010-06-24 11:15 三达[未注册用户]
问下博主,IE6.0只支持a伪类,为什么在IE6下纯CSS也有效果。
 回复 引用   
#35楼 2010-07-12 21:45 Knightpbo[未注册用户]
博主,你的这个教程,可不可以修改成鼠标移动到一个DIV层上时,层背景动态渐变呀?
 回复 引用 查看   
#36楼 2010-07-23 12:59 xiaohupi      
我发现如果不加任何文字的话是不行的
 回复 引用   
#37楼 2010-08-11 09:02 天下知[未注册用户]
写的真够详细的,学习了。
能和博主的博客做个链接不
http://www.tianxiazhi.net/blog

 回复 引用   
#38楼 2010-08-25 12:18 诳人[未注册用户]
哥,太膜拜你了,一进来就迷住了,界面好,内容很清晰,经常来学习了
 回复 引用 查看   
#39楼 2010-10-30 16:14 kwinsp      
<script type="text/javascript">
$('.jsbutton,.viewbutton,.downloadbutton').wrapinner('<span class="hover"></span>').css('textindent','0').each(function (){
${'span.hover','0'}.stop().fadeto(650,1)
;},function () {$(this),stop(),fadeto(650.0):))
</script>
没效果 怎么修改才能正常?

 回复 引用 查看   
#40楼 2010-11-30 16:31 空逸云      
不得不说 .LZ的确是一个很细心.很有耐心的人.先不说文章内容.单单是截图.就深深的被LZ所折服.不知LZ写一篇博文要耗费多少时间?估计大部分时间都是在图片的美化上吧.赞一个.
 回复 引用 查看   
#41楼 2010-12-01 16:09 luyue868      
LZ人太好啦!希望经常更新,谢谢
 回复 引用 查看   
#42楼 2010-12-09 12:24 功夫熊猫123      
引用Dozer:那张动态渐变过程 的图很强大~


 回复 引用 查看   
#43楼 2011-01-07 11:30 wtq      
谢谢楼主,我又学到了一些新的知识了。
 回复 引用 查看   
#44楼 2011-01-07 11:45 wtq      
我对你代码的理解 :<a class="button" style="text-indent: 0px; "><span class="hover" style="opacity: 0; ">前端档案</span></a>
在标签a中有设置背景图片,

也就是说元素a的内容都会放在元素a的背景图片上,所以上面的span元素(也有背景图片,这时)span元素的背景图片将会置于元素a的背景图片上。这时两个背景图片重叠(元素a和元素span的图片)元素a的图片被覆盖。而当将span元素的opacity甚至为0时,表示span元素将会看不到,只看到元素a的背景图片。当span元素的opacity中的值变为1时,元素a的背景图片被覆盖了。从而达到渐变的效果。这种效果其实是两张图片的变化,而不是一张图片的背景颜色的变化。
不知道对不对,麻烦你给我看一下。谢谢

 回复 引用 查看   
#45楼[楼主] 2011-01-08 15:50 漫凯维奇      
@wtq
在你说的“这种效果其实是两张图片的变化,而不是一张图片的背景颜色的变化。”这句话之前,都是对的,但这里并不是两张图片在变化,a元素和span元素引用同一张背景图(sprites),图片背景是没有变的,变化的是span元素的透明度。a元素的透明度是一直不变的,动画的效果来自于span元素越来越不透明的过程。

 回复 引用 查看   
#46楼 2011-05-24 23:10 吴亚辉      
厉害~
 回复 引用 查看   
#47楼 2011-05-27 09:12 李俊      
讲解的如此详细,真费了楼主不少功夫吧

有实力,有耐心,楼主现在或者以后必定钱途无量

 回复 引用 查看   
#48楼 2011-07-31 10:51 棋怜      
博主写的文章都很实用,为什么没有继续更新了!
 回复 引用   
#49楼 2011-08-25 14:23 cooki[未注册用户]
衷心感谢楼主,我找这个效果找到哭,效果本来不复杂,但就是不好形容,一直都找不到,终于在这找到,而且楼主写的很直观简洁,让我这样外行的人都能看懂,太好了,支持楼主!
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1716761 RDjx4hkWFT0=