纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)


Posted in HTML / CSS onMay 07, 2014

下面我们来看看CSS渐变色(Gradients)技术基本的语法,浏览器支持情况和缺陷。

纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)

CSS渐变色(Gradients)术语和解释

CSS渐变色(Gradients)能让我们用一种颜色渐变的效果修饰一个空间——从一种颜色过渡到另外一种颜色——填充这个空间。渐变色有两个形式:linear (线性渐变) 和 radial (环形渐变)。很显然CSS渐变色(Gradients)技术是产生了一种视觉图案效果,而实现这种视觉效果很简单,能通过简单编程实现。CSS3里很早就引入了CSS渐变色(Gradients),但这种技术的推广却经历了很长时间。

CSS颜色线性渐变的语法

CSS颜色线性渐变的语法在各种浏览器里的实现稍微有些不同,但最后是统一标准的:

复制代码
代码如下:
background-image: linear-gradient(<point> || <angle>,]? <stop>, <stop> [, <stop>]*)

第一个参数是渐变起始点或角。第二个参数是一种颜色停止点(color stops)。至少需要两种颜色(起点和终点),你可以添加任意种颜色来增加颜色渐变的丰富程度。对颜色停止点的定义可以是一种颜色,或一种颜色加一个百分比:
复制代码
代码如下:

/* color-stop(percentage/amount, color) */
color-stop(0.20, red)

因为CSS渐变色(Gradients)技术是CSS3里比较新的技术,属于高级的CSS功能,于是每种浏览器对这种技术的实现都添加了一些自己的特色。例如以WebKIt为渲染引擎的谷歌浏览器,就对它实现了多种语法。下面的这段代码基本包括了所有自顶向下颜色渐变的所有情况:
复制代码
代码如下:

#example1 {
/* 底色 */
background-color: #063053;
/* chrome 2+, safari 4+; multiple color stops */
background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0.32, #063053), color-stop(0.66, #395873), color-stop(0.83, #5c7c99));
/* chrome 10+, safari 5.1+ */
background-image: -webkit-linear-gradient(#063053, #395873, #5c7c99);
/* firefox; multiple color stops */
background-image: -moz-linear-gradient(top,#063053, #395873, #5c7c99);
/* ie 6+ */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#063053', endColorstr='#395873');
/* ie8 + */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#063053', endColorstr='#395873')";
/* ie10 */
background-image: -ms-linear-gradient(#063053, #395873, #5c7c99);
/* opera 11.1 */
background-image: -o-linear-gradient(#063053, #395873, #5c7c99);
/* 标准写法 */
background-image: linear-gradient(#063053, #395873, #5c7c99);
}

注意,我们首先设定了一个背景色。这个颜色是在万一用户使用的浏览器不支持CSS渐变色(Gradients)技术时使用的颜色。CSS渐变色(Gradients)技术里还支持带有角度的渐变方向,而不仅仅只有直上直下或直左直右。我们可以用下面的语法实现它:
复制代码
代码如下:

#example2 {
/* fallback */
background-color:#063053;
/* chrome 2+, safari 4+; multiple color stops */
background-image:-webkit-gradient(linear, left bottom, right top, color-stop(0.32, #063053), color-stop(0.66, #395873), color-stop(0.83, #5c7c99));
/* chrome 10+, safari 5.1+ */
background-image:-webkit-linear-gradient(45deg, #063053, #395873, #5c7c99);
/* firefox; multiple color stops */
background-image:-moz-linear-gradient(45deg, #063053, #395873, #5c7c99);
/* ie10 */
background-image: -ms-linear-gradient(45deg, #063053 0%, #395873 100%);
/* opera 11.1 */
background-image: -o-linear-gradient(45deg, #063053, #395873);
/* The "standard" */
background-image: linear-gradient(45deg, #063053, #395873);
}

我们可以做的更复杂些….一个色彩缤纷的CSS颜色渐变?下面我们来做一个彩虹:
复制代码
代码如下:

/* example 3 - linear rainbow */
#example3 {
/* fallback */
background-color:#063053;
/* chrome 2+, safari 4+; multiple color stops */
background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0.20, red), color-stop(0.40, green), color-stop(0.6, blue), color-stop(0.8, purple), color-stop(1, orange));
/* chrome 10+, safari 5.1+ */
background-image:-webkit-linear-gradient(red, green, blue, purple, orange);
/* firefox; multiple color stops */
background-image:-moz-linear-gradient(top, red, green, blue, purple, orange);
/* ie10 */
background-image: -ms-linear-gradient(red, green, blue, purple, orange);
/* opera 11.1 */
background-image: -o-linear-gradient(red, green, blue, purple, orange);
/* The "standard" */
background-image: linear-gradient(red, green, blue, purple, orange);
}

关于IE对CSS颜色渐变技术的支持做一些说明:在早期IE是使用filter和-ms-filter语法实现渐变色,而最新版的IE里改为了-ms-linear-gradient语法。我们可以使用CSS里条件判断语句来解决这个问题:
复制代码
代码如下:

<!--[if lt IE 10]>
<style>
.gradientElement {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#063053', endColorstr='#395873');
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#063053', endColorstr='#395873')";
}
</style>
<![endif]-->

不是很理想,但这对设计一个网站很重要。

CSS环形颜色渐变(Radial Gradients)

CSS环形颜色渐变(Radial Gradients)跟线性渐变(linear gradients)不一样,它不是沿着一个方向渐变,而是以一个点为中心,向四周辐射渐变,360度的。目前除了IE外的所有浏览器都支持CSS环形颜色渐变(Radial Gradients),但它们也都有各自不同的语法…..我说的就是你,WebKit引擎的浏览器,WebKit曾经彻底修改了它的CSS环形颜色渐变(Radial Gradients)的语法。下面我们来看看老式的写法:

复制代码
代码如下:

/* basic */
background-image: -webkit-gradient(radial, center center, 0, center center, 220, from(orange), to(red));
/* color stops */
background-image: -webkit-gradient(radial, center center, 0, center center, 220, color-stop(0.20, red), color-stop(0.40, green), color-stop(0.6, blue), color-stop(0.8, purple), color-stop(1, orange));

而现在WebKit(主要代表是谷歌浏览器)里的新语法跟火狐浏览器的完全一致了:
复制代码
代码如下:
radial-gradient( [<position> || <angle>,]? [<shape> || <size>,]? <stop>, <stop>[, <stop>]*)

这种环形颜色渐变语法是最新的火狐和谷歌浏览器使用语法。还有一些常量可以使用在这种渐变技术中来设定渐变环形的大小:

closest-side: 对于原型,是指渐变图形扩散时需要到达的最近的一个边。对于椭圆,是指横向或纵向中要达到最近的一个边。
closest-corner: 是指渐变图形扩散时需要到达的最近的一个角
farthest-side: 跟 closest-side 相似,但到达到的是最远的一个边。
farthest-corner: 是指渐变图形扩散时需要到达的最远的一个角
contain: closest-side的同义词.
cover: farthest-corner的同义词
环形颜色渐变(Radial Gradients)的一个基本的用法是这样的:

复制代码
代码如下:

#example4 {
background-image: -moz-radial-gradient(orange, red);
background-image: -webkit-gradient(radial, center center, 0, center center, 220, from(orange), to(red)); /* old */
background-image: -webkit-radial-gradient(orange, red); /* new syntax */
background-image: radial-gradient(orange, red);
}

上面的例子没有设定位置和大小——只有两个颜色停止点。实际是可以使用无数颜色,就像下面我们制作的彩虹:
复制代码
代码如下:

#example5 {
background-image: -moz-radial-gradient(red,green,blue,purple,orange);
background-image: -webkit-gradient(radial, center center, 0, center center, 220, color-stop(0.20, red), color-stop(0.40, green), color-stop(0.6,blue), color-stop(0.8,purple), color-stop(1,orange)); /* old */
background-image: -webkit-radial-gradient(red, green, blue, purple, orange); /* new syntax */
background-image: radial-gradient(red, green, blue, purple, orange);
}

我们实现一个更复杂的,加上位置信息和更多的颜色停止点:
复制代码
代码如下:

#example6 {
background-image: -moz-radial-gradient(45px 45px 45deg, circle cover, yellow 0%, orange 100%, red 95%);
background-image: -webkit-radial-gradient(45px 45px, circle cover, yellow, orange);
background-image: radial-gradient(45px 45px 45deg, circle cover, yellow 0%, orange 100%, red 95%);
}

注意上面使用的颜色写法和长度的单位。是事实上你可以使用任何颜色写法或长度单位。

CSS颜色渐变(Gradients)的技巧和提示

CSS颜色渐变(Gradients)技术很有价值,但有时很难实现。有时你已经实现了想要的渐变,而浏览器的支持也会成为一个问题。下面是一些使用CSS颜色渐变(Gradients)的建议:

想让你的CSS颜色渐变(Gradients)表现一定的透明度?使用 rgba 颜色。
使用背景色垫底,这样防止当浏览器不支持时不注意没有任何颜色。
火狐浏览器和谷歌浏览器都支持repeating-linear-gradient 和 repeating-radial-gradient,用法是:

复制代码
代码如下:
#example7 {
background-image: -moz-repeating-linear-gradient(top left -45deg, green, red 5px, white 5px, #ccc 10px);
background-image: -webkit-repeating-linear-gradient(-45deg, green, red 5px, white 5px, #ccc 10px);
}

如果你对渐变效果要求很严格,例如图表,动画,我推荐你使用Dojo的GFX程序包,它是创建矢量图的利器。而且对IE的支持也非常好!

CSS颜色渐变底色

老式浏览器,例如IE6,IE8或早期的火狐,并不支持渐变色技术,所以,你最好设置一个缺省的底色,当遇到不支持的浏览器时,background颜色就起到作用了:

复制代码
代码如下:

/* example 1 - basic */
#example1 {
/* fallback */
background-color:#063053;
/* gradients below */
}

对于不支持的浏览器的另外一种方法是先用新式浏览器实现这个效果,然后截图,然后使用CSS条件判断来调整输出方式。

CSS颜色渐变技术是CSS的一种发展进化的结果,随着现代浏览器技术的越来越成熟,我们能更自信的使用这种技术了。

HTML / CSS 相关文章推荐
CSS3实现多背景展示效果通过CSS3定位多张背景
Aug 10 HTML / CSS
实例讲解CSS3中的border-radius属性
Aug 18 HTML / CSS
CSS3区域模块region相关编写示例
Aug 28 HTML / CSS
轻松掌握CSS3中的字体大小单位rem的使用方法
May 24 HTML / CSS
利用CSS3的3D效果制作正方体
Mar 10 HTML / CSS
HTML5+CSS3应用详解
Feb 24 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
Mar 15 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
Dec 17 HTML / CSS
HTML5拖放API实现自动生成相框功能
Apr 07 HTML / CSS
HTML5中的网络存储实现方式
Apr 28 HTML / CSS
canvas实现滑动验证的实现示例
Aug 11 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
Dec 08 HTML / CSS
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
May 07 #HTML / CSS
纯CSS绘制漂亮的圆形图案效果
May 07 #HTML / CSS
css3制作彩色边线3d立体按钮的示例(css3按钮)
May 06 #HTML / CSS
css3实现顶部社会化分享按钮示例
May 06 #HTML / CSS
css3圆角边框和边框阴影示例
May 05 #HTML / CSS
CSS3 Columns分列式布局方法简介
May 03 #HTML / CSS
css3 2D图片转动样式可以扩充到Js当中
Apr 29 #HTML / CSS
You might like
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
asp批量修改记录的代码
2008/06/25 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
.net软件工程师应聘上机试题
2015/03/10 面试题
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
群众路线批评与自我批评
2014/02/06 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
四下基层实施方案
2014/03/28 职场文书
一年级小学生评语
2014/04/22 职场文书
司法所长先进事迹
2014/06/02 职场文书
共青团员自我评价
2015/03/10 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
二手房购房意向书
2015/05/09 职场文书
教师节主题班会方案
2015/08/17 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
python munch库的使用解析
2021/05/25 Python