CSS3线性渐变简单实现以及该属性在浏览器中的不同


Posted in HTML / CSS onDecember 12, 2012

为了显示一个渐变而专门制作一个图片的做法是不灵活的,而且很快会成为一种不好的做法。但是遗憾的是,截至写这篇文章,可能还必须这样做,但是希望不会持续太久。多亏Firefox 和Safari/Chrome,我们现在可以使用最少的努力实现强大的渐变。在本文中,我们将展示CSS渐变的简单实现以及该属性在Mozilla和webkit内核浏览器中的不同。
PS:本文原文本来提供了一个视频,但是由于众所周知的原因,我们无法观看这个在Youtube上的视频,想看的同学请自己想办法观看(最高720P) : http://www.youtube.com/watch?v=9D2hyM5SSCE

Webkit
尽管Mozilla和Webkit通常对CSS3属性采取同样的语法,但是对于渐变,他们很不幸的不能达成一致。Webkit是第一个支持渐变的浏览器内核,它使用下面的结构:

复制代码
代码如下:

/* 语法,参考自: http://webkit.org/blog/175/introducing-css-gradients/ */
-webkit-gradient(<type>, <point> [, <radius>]?, <point> [, <radius>]? [, <stop>]*)
/* 实际用法... */
background: -webkit-gradient(linear, 0 0, 0 100%, from(red), to(blue));

CSS3线性渐变简单实现以及该属性在浏览器中的不同 
不要担心这些语法会让你看花眼,我也是这样的!只要记得我们需要用一个逗号来隔开这个参数组。
渐变的类型? (linear)
渐变开始的X Y 轴坐标(0 0 – 或者left-top)
渐变结束的X Y 轴坐标(0 100% 或者left-bottom)
开始的颜色? (from(red))
结束的颜色? (to(blue))

Mozilla
Firefox,从3.6版本才开始支持渐变,更喜欢和Webkit略微不同的语法。

复制代码
代码如下:

/* 语法,参考自: http://hacks.mozilla.org/2009/11/css-gradients-firefox-36/ */ -moz-linear-gradient( [
<point> || <angle>,]? <stop>, <stop> [, <stop>]* )
/* 实际用法*/
background: -moz-linear-gradient(top, red, blue);

CSS3线性渐变简单实现以及该属性在浏览器中的不同 
请注意我们将渐变的类型——linear——放到了属性前缀中了
渐变从哪里开始? (top – 我们也可以使用度数,比如-45deg)
开始的颜色? (red)
结束的颜色? (blue)

Color-Stops
如果你不需要从一个颜色到另一个颜色的100%渐变怎么办?这就是color stop起作用的时候了。一个普遍的设计技术是使用一个较短而细微的渐变,比如:
CSS3线性渐变简单实现以及该属性在浏览器中的不同
注意顶部的浅灰色到白色的细小的渐变
在过去,标准的做法就是制作一个图片,并将其设为一个元素的背景图片,然后让其水平平铺。然而使用CSS3,这是个小Case。

复制代码
代码如下:

background: white; /* 为较旧的或者不支持的浏览器设置备用属性 */
background: -moz-linear-gradient(top, #dedede, white 8%);
background: -webkit-gradient(linear, 0 0, 0 8%, from(#dedede), to(white));
border-top: 1px solid white;

这次,我们让渐变结束于8%,而不是默认的100%。请注意我们也在头部采用了一个边框,以形成对比。这很常用。
如果我们想要添加多一种(几种)颜色,我们可以这样做:
复制代码
代码如下:

background: white; /* 备用属性 */
background: -moz-linear-gradient(top, #dedede, white 8%, red 20%);
background: -webkit-gradient(linear, 0 0, 0 100%, from(#dedede), color-stop(8%, white), color-stop(20%, red);

对于-moz 版本,我们定义,从元素的20%的高度的地方开始是红色。
而对于-webkit,我们使用color-stop,采用两个参数:哪里开始停止,使用哪种颜色。

IE
IE并不支持CSS渐变,但是提供了渐变滤镜,可以实现最简单的渐变效果:

复制代码
代码如下:

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ff0000'); /* IE6,IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ff0000')"; /* IE8 */

PS:事实上,我们在《RGBa色彩的浏览器支持》提到的IE的解决方法,就是使用这个渐变滤镜。

关于CSS渐变的一些要点
尽可能的使用它。如果让IE用户看到一个固定的纯色,我鼓励你使用这种方法;
IE6/7/8, Opera, Safari 3, 和Firefox 3 不能渲染CSS3 渐变,Firefox 和Safari用户通常经常升级浏览器,而Chrome的自动升级机制会在后台自动升级,所以这并不是个大问题;
总是为不支持这些浏览器私有属性的浏览器应用一个默认的,纯色背景;
永远不要使用红色到蓝色的渐变,就像我用作例子的这种;
页面无须在每个浏览器里面看起来完全一样!
Firefox可以使用角度来设定渐变的方向,而webkit只能使用x和y轴的坐标。

HTML / CSS 相关文章推荐
纯CSS3实现质感细腻丝滑按钮
Mar 09 HTML / CSS
css3截图_动力节点Java学院整理
Jul 11 HTML / CSS
让IE6、IE7、IE8支持CSS3的脚本
Jul 20 HTML / CSS
CSS3实现多背景模拟动态边框的效果
Nov 08 HTML / CSS
CSS3 新增选择器的实例
Nov 13 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
Aug 04 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
May 10 HTML / CSS
HTML5教程之html 5 本地数据库(Web Sql Database)
Apr 03 HTML / CSS
用HTML5制作烟火效果的教程
May 12 HTML / CSS
HTML5语义化元素你真的用对了吗
Aug 22 HTML / CSS
使用Html5中的cavas画一面国旗
Sep 25 HTML / CSS
在HTML中引入CSS的几种方式介绍
Dec 06 HTML / CSS
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
Dec 10 #HTML / CSS
CSS3制作半透明边框(Facebox)类似渐变
Dec 09 #HTML / CSS
CSS伪类与CSS伪元素的区别及由来具体说明
Dec 07 #HTML / CSS
用CSS禁用输入法(CSS3 UI规范)实例解析
Dec 04 #HTML / CSS
html5 css3 动态气泡按钮实例演示
Dec 02 #HTML / CSS
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
Nov 29 #HTML / CSS
CSS3悬停效果案例应用
Nov 21 #HTML / CSS
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
python生成圆形图片的方法
2020/03/25 Python
python爬取网易云音乐评论
2018/11/16 Python
pandas的qcut()方法详解
2019/07/06 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
.NET面试题:什么是反射
2016/09/30 面试题
工程地质勘察专业大学生求职信
2013/10/13 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技