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的loading动画加载相关的transition优化
May 18 HTML / CSS
关于css兼容性问题及一些常见问题汇总
May 03 HTML / CSS
用CSS3的box-reflect来制作倒影效果
Nov 15 HTML / CSS
css3实现冲击波效果的示例代码
Jan 11 HTML / CSS
如何在网站上添加谷歌定位信息
Apr 16 HTML / CSS
详解Html5微信支付爬坑之路
Jul 24 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
Jan 11 HTML / CSS
使用HTML5原生对话框元素并轻松创建模态框组件
Mar 06 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
Aug 06 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
Nov 18 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
Nov 04 HTML / CSS
如何用H5实现好玩的2048小游戏
Jul 23 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部分常见问题总结
2008/03/27 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
分享PHP header函数使用教程
2013/09/05 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
js加解密 脚本解密
2008/02/22 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
浅析Python中signal包的使用
2015/11/13 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python实现计算最小编辑距离
2016/03/17 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
任课老师推荐信范文
2013/11/24 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL