代码改变世界

精通CSS滤镜(filter)(实例解析)

2012-06-05 10:50  臭小子1983  阅读(197)  评论(0编辑  收藏  举报

  好久没弄弄美工了,前端时间由于学校的一个小网站的老师需要网站整体为绿色风格,但是他们又不能提供相关素材,这个项目就一直拖着,需求也定不下来。后台基本功能都已经哦了,就等页面了,本来是想好好学学别的东西,巩固下Java一些基础,但是这事拖着,还是够不爽的。security框架的例子也不好弄,于是还是决定总结一下最近学习的CSS滤镜。Css滤镜比较帅,可以取代一部分PS才能实现的效果,但是缺点也比较明显,浏览器并不是都支持。但考虑到IE6,7...占的市场份额还是挺很大的,所以有学习的必要。网上不缺CSS滤镜的知识,但是大多是长篇大论,或不够全面。现在结合自己做的例子和网上的资料,自己的学习心得总结如下。毕竟我不是专业搞美工,所以这篇随笔,是基本是面向初学者,并使其快速掌握。也了解现在的CSS都能做什么。

  为了充实内容,顺便给出jQuery实现弹出层特效的源码。

  CSS(Cascading Style Sheets) 层叠样式表单。1998年5月12日,Cascading Style Sheets,level 2 成为了W3C的新标准。同时,”W3C CoreStyles '和CSS2 Validation Service' 以及“CSS Test Suite' 宣布成立。它是一组样式,样式中的属性在HTML元素中依次出现,并显示在浏览器中。样式可以定义在HTML文档的标志(TAG)里,也可以在外部附加文档作为外加文档。此时,一个样式表单可以作用于多个页面---甚至整个站点,因此具有更好的易用性和扩展性。


  对于滤镜和渐变效果,前者是基础,因为后者就是滤镜效果的不断变化和演示更替。当滤镜和渐变效果结合到一个基本的SCRIPT小程序中后,网页设计者就可以拥有一个建立动态交互文档的强大工具。也就是CSS FILTER+ SCRIPT, 这就说明想要建立动态的文档还要一些SCRIPT (脚本语言)的基础。


  可视化滤镜属性只能用在HTML控件元素上,不能使用div的id,class定义。所谓的HTML空间元素就是它们在页面上定

  义了一个矩形空间,浏览器的窗口可以显示这些空间。下面列出了HTML合法的控件和它们的说明。

元素 说明 


BODY 网页文档的主体元素,所有的可见范围都在元素内
BUTTON 表单域的按钮,可以有“发送(submit)”、“重置(reset)”等形式
DIV 定义了网页上的一个区域,这个区域的高度、宽度或者绝对位置都是以知的
IMG 图片元素,通过指定“src'属性来指定图片的来源
INPUT 输入表单域
MARQUEE 移动字幕效果
SPAN 定义了网页上的一个区域,这个区域的高度、宽度或者绝对位置都是以知的
TABLE 表格
TD 表格数据单元格
TEXTAREA 文本区域
TFOOT 多行输入文本框
TH 表格标题单元格
THEAD 表格标题
TR 表格行

////////////////////////////////////////


IE4.0以上支持的滤镜属性表

滤镜效果 描述 :
Alpha 设置透明度
Blru 建立模糊效果
Chroma 把指定的颜色设置为透明
DropShadow 建立一种偏移的影象轮廓,即投射阴影
FlipH 水平反转
FlipV 垂直反转
Glow 为对象的外边界增加光效
Grayscale 降低图片的彩色度
Invert 将色彩、饱和度以及亮度值完全反转建立底片效果
Light 在一个对象上进行灯光投影
Mask 为一个对象建立透明膜
Shadow 建立一个对象的固体轮廓,即阴影效果
Wave 在X轴和Y轴方向利用正弦波纹打乱图片
Xray 只显示对象的轮廓


下面分别阐述:
1、Alpha 滤镜
语法:{FILTER:ALPHA(opacity=opacity,finishopacity=finishopacity,style=style,startx=startx,
starty=starty,finishx=finishx,finishy=finishy)}


'Alpha'属性是把一个目标元素与背景混合。设计者可以指定数值来控制混合的程度。这种“与背景混合”通俗地说

就是一个元素的透明度。通过指定坐标,可以指定点、线、面的透明度。他们的参数含义分别如下:


“opacity'代表透明度水准。默认的范围是从0 到 100,他们其实是百分比的形式。也就是说,0代表完全透明,

100代表完全不透明。”finishopacity'是一个可选参数,如果想要设置渐变的透明效果,就可以使用他们来指定

结束时的透明度。范围也是0 到 100。“style' 参数指定了透明区域的形状特征。其中0代表统一形状、1代表线形、2代表放射状

、3代表长方形。”STARTX“和”STARTY“代表渐变透明效果的开始X和Y坐标。”

FINISHX“和”FINISHY“代表渐变透明效果结束X和Y 的坐标。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{FILTER:ALPHA(opacity=50,finishopacity=80,style=2}
</style>
</head>
<body>
<div class="try"><font color="#CC33C2">施杨de编程世界</font></div>
<div><img src="image/ch2.gif" /></div>
</body>
</html>



2、Blur 滤镜
语法:对于HTML:{filter:blur(add=add,direction=direction,strength=strength)}
对于Script语言: [oblurfilter=] object.filters.blur
用手指在一幅尚未干透的油画上迅速划过时,画面就会变得模糊。”Blur'就是产生同样的模糊效果。

“ADD”参数是一个布尔判断“TRUE(默认)”或者“FALSE”。它指定图片是否被改变成印象派的模糊

效果。模糊效果是按顺时针的方向进行的,“DIRECTION”参数用来设置模糊的方向。其中0度代表垂直

向上,然后每45度为一个单位。它的默认值是向左的270度。“STRENGTH“值只能使用整数来指定,

她代表有多少像素的宽度将受到模糊影响。默认是5个。


代码如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{filter:blur(add=ture,direction=135,strength=200)}
</style>
</head>
<body>
<div class="try"><font color="#CC33C2">施杨de编程世界</font></div>
<div><img src="image/ch2.gif" /></div>
</body>
</html>


3、FlipH, FlipV 滤镜
语法:{filter:filph} ,{filter:filpv} 分别是水平反转和垂直反转

4、Chroma 滤镜
语法:{filter:chroma(color=color)}
使用”Chroma'属性可以设置一个对象中指定的颜色为透明色,参数COLOR即要透明的颜色。
代码如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{filter:chroma(color=#CC33C2)}
</style>
</head>
<body>
<div class="try"><font color="#CC33C2">施杨de编程世界</font></div>
<div><img src="image/ch2.gif" /></div>
</body>
</html>




可以屏蔽颜色,大有用处。

5、DropShadow 滤镜 
语法:{filter:dropshadow(color=color,offx=ofx,offy=offy,positive=positive)}


“DropShaow'顾名思义就是添加对象的阴影效果。其工作原理是建立一个偏移量,加上较深。

'Color'代表投射阴影的颜色,'offx'和'offy'分别是X方向和Y方向阴影的饿偏移量。


'Positive'参数是一个布尔值,如果为“TRUE(非0)”,那么就为任何的非透明像素建立可见的投影。

如果为“FASLE(0)”,那么就为透明的像素部分建立透明效果 代码如下:

dropshadow(color=gray,offx=5,offy=5.positive=0)

效果:


6、Glow 滤镜
语法:{filter:glow(color=color,strength)}

当对一个对象使用'glow'属性后,这个对象的边缘就会产生类似发光的效果。“COLOR”是指定

发光的颜色,“STRENGTH”则是强度的表现,可以从1到255之间的任何整数来指定这个力度。
filter:glow(color=red,strength=10) 后的效果

filter:glow(color=#ffff00,strength=5) 后的效果


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{filter:glow(color=red,strength=10)}
.try{ margin-left:30px;}
</style>
</head>
<body>
<br /><br />
<div class="try"><font color="#CC33C2">施杨de编程世界</font><br />
<br />
<div><img src="image/ch2.gif" /></div><br /><br /></div>
</body>
</html>




7、Gray ,Invert,Xray 滤镜
语法:{filter:gray} ,{filter:invert},{filter:xray}

Gray滤镜是把一张图片变成灰度图;(汶川大地震后很多网站色调都变灰色,就是用的这一点代码实现的)
Invert滤镜是把对象的可视化属性全部翻转,包括色彩、饱和度、和亮度值;
Xray滤镜是让对象反映出它的轮廓并把这些轮廓加亮,也就是所谓的“X”光片。



8、Light 滤镜
语法:Filter{light}

这个属性模拟光源的投射效果。一旦为对象定义了“LIGHT'滤镜属性,那么就可以调用它的“方法(Method)'来设置或者改变属性。“LIGHT'可用的方法有:

·AddAmbient 加入包围的光源
·AddCone 加入锥形光源
·AddPoint 加入点光源
·Changcolor 改变光的颜色
·Changstrength 改变光源的强度
·Clear 清除所有的光源
·MoveLight 移动光源

addAmbient (iRed,iGreen,iBlue,iStrength) : 为滤镜添加环境光。环境光是无方向的,并且均匀的洒在页面的表面。环境光有颜色和强度值,可以为对象田家更多的颜色。它通

常和其他光一起使用。无返回值。参数见下表。
iRed : 必选项。整数值(Integer)。 指定红色值。取值范围为 0 - 255 。
iGreen : 必选项。整数值(Integer)。 指定绿色值。取值范围为 0 - 255 。
iBlue : 必选项。整数值(Integer)。 指定蓝色值。取值范围为 0 - 255 。
iStrength : 必选项。整数值(Integer)。 指定光强度。取值范围为 0 - 100 。

changeColor (iLightNumber,iRed,iGreen,iBlue,fAbsolute) : 改变光的颜色。无返回值。参数见下表。
iLightNumber : 必选项。整数值(Integer)。 指定光的标识符。
iRed : 必选项。整数值(Integer)。指定红色值。取值范围为 0 - 255 。
iGreen : 必选项。整数值(Integer)。指定绿色值。取值范围为 0 - 255 。
iBlue : 必选项。整数值(Integer)。指定蓝色值。取值范围为 0 - 255 。
fAbsolute : 必选项。布尔值(Boolean)。指定改变是替换当前设置的绝对值,还是加到当前设置的相对值。此参数不等于零表示采用绝对值。否则表示采用相对值。


可以定义光源的虚拟位置,以及通过调整X轴和Y轴的数值来控制光源焦点的位置,还可以调整光源的形式(点光源或者锥形光源)指定光源是否模糊边界、光源的颜色、亮度等属

性。如果动态的设置光源,可能回产生一些意想不到的效果。

实现图片自动变色效果


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{}
.try{ margin-left:30px;}
</style>
</head>
<body>
<br /><br />
<div class="try"><font color="#CC33C2">施杨de编程世界</font><br />
<br />
<div><img src="image/ch2.gif" style="filter:light(); width:400; height:300" onload="javascript:this.filters.light.addAmbient(10,250,100,55)"

onmousemove="javascript:this.filters.light.changeColor(0,150,100,50,0)"/></div><br /><br /></div>
</body>
</html>



9、Mask 滤镜
语法:{filter:mask(color=color)}

使用'MASK'属性可以为对象建立一个覆盖于表面的膜,其效果就象戴者有色眼镜看物体一样。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{ filter:mask(color=yellow);}
#try{ margin-left:30px;}
</style>
</head>
<body>
<br /><br />
<div id="try"><font color="#CC33C2">施杨de编程世界</font><br />
<br />
<div><img src="image/ch2.gif" /></div><br /><br /></div>
</body>
</html>


虽然实现,但是效果并不想想象的那样帅,不好用。

10、Shadow 滤镜
语法:{filter:shadow(color=color,direction=direction)}

利用“Shadow”属性可以在指定的方向建立物体的投影,COLOR是投影色,DIRECTION是设置投影的方向。其中0度代表垂直向上,然后每45度为一个单位。它的默认值是向左的270

度。

filter:shadow(color=red,direction=225)
filter:shadow(color=blue,direction=225)
filter:shadow(color=gray,direction=225)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{ filter:shadow(color=red,direction=225);}
#try{ margin-left:30px;}
</style>
</head>
<body>
<br /><br />
<div id="try"><font color="#CC33C2">施杨de编程世界</font><br />
<br />
<div><img src="image/ch2.gif" /></div><br /><br /></div>
</body>
</html>


效果:



11、Wave 滤镜 语法:{filter:wave(add=add,freq=freq,lightstrength=strength,phase=phase,strength=strength)}

'wave' 属性把对象按垂直的波形样式打乱。默认是“TRUE(非0)”,
“ADD”表示是否要把对象按照波形样式打乱,
“FREQ”是波纹的频率,也就是指定在对象上一共需要产生多少个完整的波纹,
“LIGHTSTRENGTH”参数可以对于波纹增强光影的效果,范围0----100,
“PHASE”参数用来设置正弦波的偏移量。
“STRENGTH”代表振幅大小。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>css滤镜</title>
<style>
body{ filter:wave(add=add,freq=freq,lightstrength=strength,phase=phase,strength=20);}
#try{ margin-left:30px;}
</style>
</head>
<body>
<br /><br />
<div id="try"><font color="#CC33C2">施杨de编程世界</font><br />
<br />
<div><img src="image/ch2.gif" /></div><br /><br /></div>
</body>
</html>



效果:



jQuery弹出层源码:

页面:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0045)http://interface.eyecon.ro/demos/windows.html -->
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD><TITLE>Resizeable demo - Interface plugin for jQuery</TITLE>
<META http-equiv=Content-Language content=en>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<SCRIPT
src="js/jquery.js"
type=text/javascript></SCRIPT>
<SCRIPT
src="js/interface.js"
type=text/javascript></SCRIPT>
<link href="css/div_show.css" rel="stylesheet" type="text/css" media="all">
<META content="MSHTML 6.00.6000.16735" name=GENERATOR>
</HEAD>
<BODY><A id=windowOpen>管理员登陆</A>
<DIV id=window>
<DIV id=windowTop>
<DIV id=windowTopContent>登陆界面</DIV>
<IMG id=windowMin
src="css/images/window_min.jpg">
<IMG id=windowMax
src="css/images/window_max.jpg">
<IMG id=windowClose
src="css/images/window_close.jpg">
</DIV>
<DIV id=windowBottom>
<DIV id=windowBottomContent></DIV></DIV>
<DIV id=windowContent>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P></DIV><IMG id=windowResize
src="css/images/window_resize.gif">
</DIV>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<P></P>
<SCRIPT type="text/javascript" src="js/div_show.js"></SCRIPT>
<SCRIPT language=JavaScript type=text/javascript>var client_id = 1;</SCRIPT>

</BODY></HTML>





css源码:


BODY {
BACKGROUND: #fff; HEIGHT: 100%
}
#window {
DISPLAY: none; LEFT: 200px; OVERFLOW: hidden; WIDTH: 400px; POSITION: absolute; TOP: 100px; HEIGHT: 300px
}
#windowTop {
BACKGROUND-POSITION: right top; BACKGROUND-IMAGE: url(images/window_top_end.png); OVERFLOW: hidden; CURSOR: move; BACKGROUND-REPEAT: no-repeat; POSITION: relative; HEIGHT: 30px
}
#windowTopContent {
BACKGROUND-POSITION: left top; FONT-WEIGHT: bold; FONT-SIZE: 14px; BACKGROUND-IMAGE: url(images/window_top_start.png); OVERFLOW: hidden; COLOR: #6caf00; TEXT-INDENT: 10px; LINE-HEIGHT: 30px; MARGIN-RIGHT: 13px; BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: Arial, Helvetica, sans-serif; HEIGHT: 30px
}
#windowMin {
RIGHT: 25px; CURSOR: pointer; POSITION: absolute; TOP: 10px
}
#windowMax {
DISPLAY: none; RIGHT: 25px; CURSOR: pointer; POSITION: absolute; TOP: 10px
}
#windowClose {
RIGHT: 10px; CURSOR: pointer; POSITION: absolute; TOP: 10px
}
#windowBottom {
BACKGROUND-POSITION: right bottom; BACKGROUND-IMAGE: url(images/window_bottom_end.png); BACKGROUND-REPEAT: no-repeat; POSITION: relative; HEIGHT: 270px
}
#windowBottomContent {
BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(images/window_bottom_start.png); MARGIN-RIGHT: 13px; BACKGROUND-REPEAT: no-repeat; POSITION: relative; HEIGHT: 270px
}
#windowResize {
RIGHT: 3px; CURSOR: se-resize; BOTTOM: 5px; POSITION: absolute
}
#windowContent {
BORDER-RIGHT: #6caf00 1px solid; BORDER-TOP: #6caf00 1px solid; FONT-SIZE: 11px; LEFT: 10px; OVERFLOW: auto; BORDER-LEFT: #6caf00 1px solid; WIDTH: 375px; MARGIN-RIGHT: 10px; BORDER-BOTTOM: #6caf00 1px solid; FONT-FAMILY: Arial, Helvetica, sans-serif; POSITION: absolute; TOP: 30px; HEIGHT: 255px; BACKGROUND-COLOR: #fff
}
#windowContent * {
MARGIN: 10px
}
.transferer2 {
BORDER-RIGHT: #6baf04 1px solid; BORDER-TOP: #6baf04 1px solid; FILTER: alpha(opacity=30); BORDER-LEFT: #6baf04 1px solid; BORDER-BOTTOM: #6baf04 1px solid; BACKGROUND-COLOR: #b4f155; -moz-opacity: 0.3; opacity: 0.3
}




js源码:


$(document).ready(
function()
{
$('#windowOpen').bind(
'click',
function() {
if($('#window').css('display') == 'none') {
$(this).TransferTo(
{
to:'window',
className:'transferer2',
duration: 400,
complete: function()
{
$('#window').show();
}
}
);
}
this.blur();
return false;
}
);
$('#windowClose').bind(
'click',
function()
{
$('#window').TransferTo(
{
to:'windowOpen',
className:'transferer2',
duration: 400
}
).hide();
}
);
$('#windowMin').bind(
'click',
function()
{
$('#windowContent').SlideToggleUp(300);
$('#windowBottom, #windowBottomContent').animate({height: 10}, 300);
$('#window').animate({height:40},300).get(0).isMinimized = true;
$(this).hide();
$('#windowResize').hide();
$('#windowMax').show();
}
);
$('#windowMax').bind(
'click',
function()
{
var windowSize = $.iUtil.getSize(document.getElementById('windowContent'));
$('#windowContent').SlideToggleUp(300);
$('#windowBottom, #windowBottomContent').animate({height: windowSize.hb + 13}, 300);
$('#window').animate({height:windowSize.hb+43}, 300).get(0).isMinimized = false;
$(this).hide();
$('#windowMin, #windowResize').show();
}
);
$('#window').Resizable(
{
minWidth: 200,
minHeight: 60,
maxWidth: 700,
maxHeight: 400,
dragHandle: '#windowTop',
handlers: {
se: '#windowResize'
},
onResize : function(size, position) {
$('#windowBottom, #windowBottomContent').css('height', size.height-33 + 'px');
var windowContentEl = $('#windowContent').css('width', size.width - 25 + 'px');
if (!document.getElementById('window').isMinimized) {
windowContentEl.css('height', size.height - 48 + 'px');
}
}
}
);
}
);

再下载两个jquery的文件分别是:

interface.js,jquery.js