text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果。随着html5和CSS3的普及,这一特殊效果使用越来越普遍。

基本语法是{box-shadow:[inset] x-offset y-offset blur-radius spread-radiuscolor}

对象选择器 {box-shadow:[投影方式] X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色}

box-shadow属性的参数设置取值:

阴影类型:此参数可选。如不设值,默认投影方式是外阴影;如取其唯一值“inset”,其投影为内阴影;

X-offset:阴影水平偏移量,其值可以是正负值。如果值为正值,则阴影在对象的右边,其值为负值时,阴影在对象的左边;

Y-offset:阴影垂直偏移量,其值也可以是正负值。如果为正值,阴影在对象的底部,其值为负值时,阴影在对象的顶部;

阴影模糊半径:此参数可选,,但其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊;

阴影扩展半径:此参数可选,其值可以是正负值,如果值为正,则整个阴影都延展扩大,反之值为负值时,则缩小;

阴影颜色:此参数可选。如不设定颜色,浏览器会取默认色,但各浏览器默认取色不一致,特别是在webkit内核下的safari和chrome浏览器下表现为透明色,在Firefox/Opera下表现为黑色(已验证),建议不要省略此参数。

浏览器的兼容:

为了兼容各主流浏览器并支持这些主流浏览器的较低版本,在基于Webkit的Chrome和Safari等浏览器上使用box-shadow属性 时,我们需要将属性的名称写成-webkit-box-shadow的形式。Firefox浏览器则需要写成-moz-box-shadow的形式。

  1. .box-shadow{
  2. //Firefox4.0-
  3. -moz-box-shadow:投影方式 X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色;
  4. //Safariand Google chrome10.0-
  5. -webkit-box-shadow:投影方式 X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色;
  6. //Firefox4.0+、 Google chrome 10.0+ 、 Oprea10.5+ and IE9
  7. box-shadow:  投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色;
  8. }

注意:出于方便,后文的css属性有的地方只写了box-shadow属性,没有写-moz-和-webkit-前缀的形式,在使用中不要忘记加上。

为了更清楚的了解box-shadow的特征,做几个小测试,看效果:

相关代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  5. <title>CSS3属性:box-shadow测试</title>
  6. <script type="text/javascript" src="js/jquery.min.js"></script>
  7. <script type="text/javascript" src="js/jquery.boxshadow.js"></script>
  8. <style type="text/css">
  9. .box-shadow-1{
  10. -webkit-box-shadow: 3px 3px 3px;
  11. -moz-box-shadow: 3px 3px 3px;
  12. box-shadow: 3px 3px 3px;
  13. }
  14. .box-shadow-2{
  15. -webkit-box-shadow:0 0 10px #0CC;
  16. -moz-box-shadow:0 0 10px #0CC;
  17. box-shadow:0 0 10px #0CC;
  18. }
  19. .box-shadow-3{
  20. -webkit-box-shadow:0 0 10px rgba(0, 204, 204, .5);
  21. -moz-box-shadow:0 0 10px rgba(0, 204, 204, .5);
  22. box-shadow:0 0 10px rgba(0, 204, 204, .5);
  23. }
  24. .box-shadow-4{
  25. -webkit-box-shadow:0 0 10px 15px #0CC;
  26. -moz-box-shadow:0 0 10px 15px #0CC;
  27. box-shadow:0 0 10px 15px #0CC;
  28. }
  29. .box-shadow-5{
  30. -webkit-box-shadow:inset 0 0 10px #0CC;
  31. -moz-box-shadow:inset 0 0 10px #0CC;
  32. box-shadow:inset 0 0 10px #0CC;
  33. }
  34. .box-shadow-6{
  35. box-shadow:-10px 0 10px red, /*左边阴影*/
  36. 10px 0 10px yellow, /*右边阴影*/
  37. 0 -10px 10px blue, /*顶部阴影*/
  38. 0 10px 10px green; /*底边阴影*/
  39. }
  40. .box-shadow-7{
  41. box-shadow:0 0 10px 5px black,
  42. 0 0 10px 20px red;
  43. }
  44. .box-shadow-8{
  45. box-shadow:0 0 10px 20px red,
  46. 0 0 10px 5px black;
  47. }
  48. .box-shadow-9{
  49. box-shadow: 0 0 0 1px red;
  50. }
  51. .obj{
  52. width:100px;
  53. height:100px;
  54. margin:50px auto;
  55. background:#eee;
  56. }
  57. .outer{
  58. width: 100px;
  59. height: 100px;
  60. border: 1px solid red;
  61. }
  62. .inner{
  63. width: 60px;
  64. height: 60px;
  65. background-color: red;
  66. -webkit-box-shadow: 50px 50px blue;
  67. -moz-box-shadow: 50px 50px blue;
  68. box-shadow: 50px 50px blue;
  69. }
  70. </style>
  71. </head>
  72. <body>
  73. <div class="obj box-shadow-1"></div>
  74. <div class="outer">
  75. <div class="inner"></div>
  76. </div>
  77. <div class="obj  box-shadow-2" ></div>
  78. <div class="obj  box-shadow-3" ></div>
  79. <div class="obj  box-shadow-4" ></div>
  80. <div class="obj  box-shadow-5" ></div>
  81. <div class="obj  box-shadow-6" ></div>
  82. <div class="obj  box-shadow-7" ></div>
  83. <div class="obj  box-shadow-8" ></div>
  84. <div class="obj  box-shadow-9" ></div>
  85. <script type="text/javascript">
  86. $(document).ready(function(){
  87. if($.browser.msie) {
  88. $('.obj').boxShadow(-10,-10,5,"#0cc"); //obj元素使用了box-shadow
  89. }
  90. });
  91. </script>
  92. </body>
  93. </html>

结论:

1)  从.box-shadow-1的效果可以得出不指定属性阴影颜色的情况下,阴影在webkit内核下的safari和chrome浏览器下表现为透明色,在Firefox/Opera下表现为黑色。

2)  从内外两个div块inner、outer的对比来看,所有支持box-shadow的主流浏览器都表现为:内层阴影撑破外层容器将整个阴影效果呈现出来。W3C标准用图示的方式对box-shadow的原理和表现进行了解读:

从图中我们可以了解到:圆角border-radius,阴影扩展半径、阴影模糊半径以及padding是如何影响对象阴影的:非零值的
border-radius将会以相同的作用影响阴影的外形,但border-image不会影响对象阴影的任何外形;对象阴影同box模型的层次一样,
外阴影会在对象背景之下,内阴影会在边框之下背景之上。我们知道,默认情形背景图片是在背景颜色之上的。所以整个层级是:边框>内阴影>背景
图片>背景颜色>外阴影。

3)  从. box-shadow-2到. box-shadow-5的效果,我们可以了解到box-shadow取值的作用。

. box-shadow-2是xy没有偏移,阴影大小10px,没有扩展半径,颜色#0CC即rgba(0, 204,204, 1),这里我们使用的是颜色HEX值;效果

而. box-shadow-3是在. box-shadow-2效果的基础上,应用了rgba颜色值,好处是给box-shadow阴影添加了alpha透明效果。效果:

. box-shadow-4在. box-shadow-2效果的基础上添加了阴影扩展半径15px。

. box-shadow-5在. box-shadow-2效果的基础上,将外阴影设为内阴影。

4).
box-shadow-6一个元素使用了多个阴影,多个阴影之间用逗号分隔。给对象四边设置阴影效果,我们是通过改变x-offset和y-offset
的正负值来实现,其中x-offset为负值时,生成左边阴影,为正值时生成右边阴影,y-offset为正值是生成底部阴影,为负值时生成顶部阴影。并
且把模糊半径设置为0,如果不设置为0的话那么其他三边也将会有阴影。这点需要注意!

注意这样的写法是错误的:{box-shadow:-10px 0 10px red, box-shadow:10px 0 10px blue,box-shadow:0 -10px 10px yellow,box-shadow:0 10px 10px green}

并且此处还涉及到一个多阴影的顺序问题。当给同一个元素使用多个阴影属性时,需要注意它的顺序,最先写的阴影将显示在最顶层,如. box-shadow-7设为不同的模糊值:

.box-shadow-7{

box-shadow:0 0 10px 5px black,

0 0 10px 20px red;

}

将能看出层叠的顺序效果:

如果将两个阴影效果调一下,改为如下:

.box-shadow-8{

box-shadow:0 0 10px 20px red,

0 0 10px 5px black;

}

将只显示红色的阴影效果,因为红色阴影层在上面,模糊半径大,将后面的黑色阴影完全遮挡。

得出的结论是:如果前面的阴影模糊值小于后面的阴影模糊值,那么前面的显示在后面之上,如果前面阴影的模糊值大于后面的阴影模糊值,那么前面的阴影将遮住后面的阴影效果。

4)  类border边框效果(只设置阴影扩展半径和阴影颜色)

.box-shadow-9呈现的效果,同boder:1px solid
red相似,但box-shadow的效果与border效果在对象高度上有区别,正好要比border高度大一个扩展半径。而且阴影不影响页面的任何布
局,这一点可以通过查看firebug下的layout图得以证实。

5)  在ie下模拟css3中的box-shadow阴影效果

方法一:可以使用IE的Shadow滤镜

基本语法:filter:progid:DXImageTransform.Microsoft.Shadow(color=’颜色值’, Direction=阴影角度(数值),Strength=阴影半径(数值));

注意:该滤镜必须配合background属性一起使用,否则该滤镜失效。

IE下模拟css3中的box-shadow(阴影)代码:

  1. .box-shadow{
  2. filter: progid:DXImageTransform.Microsoft.Shadow(color='#969696',Direction=135, Strength=5);/*for ie6,7,8*/
  3. background-color: #ccc;
  4. -moz-box-shadow:2px 2px 5px #969696;/*firefox*/
  5. -webkit-box-shadow:2px 2px 5px #969696;/*webkit*/
  6. box-shadow:2px 2px 5px #969696;/*opera或ie9*/
  7. }

在六一儿童节的专题中,我是这么处理的:

  1. li.blk-item{
  2. width:423px;
  3. height:229px;
  4. float:left;
  5. padding:8px;
  6. margin:2px 18px 13px 21px;
  7. display:inline;
  8. border:1px solid #d3c998;
  9. border-radius:2px;
  10. filter:progid:DXImageTransform.Microsoft.Shadow(color='#d3c998', Direction=135,Strength=5);/*for ie6,7,8*/
  11. background-color: #fff;
  12. -moz-box-shadow:2px 2px 5px#d3c998;/*firefox*/
  13. -webkit-box-shadow:2px 2px 5px#d3c998;/*webkit*/
  14. box-shadow:2px 2px 5px #d3c998;/*opera或ie9*/
  15. }

方法二:有些js和.htc的hack文件可以实现IE中的阴影效果。

ie-css3.htc是一个可以让IE浏览器支持部份CSS3属性的htc文件,不只是box-shadow,它还可以让你的IE浏览器支持圆角属性border-radius和文字阴影属性text-shadow。

它的使用方法是:下载它并放到你的服务器目录

在你的<head></head>里面写入下面的代码:

这个脚本的缺点是IE只支持一部分的box-shadow值。需要注意:

  • 当你使用了这个htc文件后,你的CSS里面,只要写有box-shadow, -moz-box-shadow或-webkit-box-shadow的任何一种,IE就会渲染。
  • 当使用了这个htc文件后,你不能这样写box-shadow: 0 0 10px red; 而应该是box-shadow: 0px 0px 10px red; 否则IE中会失效。
  • 不支持RGBA值中的alpha透明度。
  • 不支持inset内阴影。
  • 不支持阴影扩展。
  • 阴影在IE中只会显示为黑色,不管你设置成其它什么颜色。

方法三:使用jQuery的插件jquery.boxshadow.js插件的下载地址是http://www.hintzmann.dk/testcenter/js/jquery/boxshadow/jquery.boxshadow.js

使用方法很简单,将该文件和jquery版本库引入head标签,插入以下js效果代码:

  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. if($.browser.msie) {
  4. $('.obj').boxShadow(-10,-10,5,"#0cc"); //obj元素使用了box-shadow
  5. }
  6. });
  7. </script>

注意:js中可以使用:obj.style.webkitBoxShadow=值(字符串);obj.style.MozBoxShadow=值(字符串);obj.style.boxShadow=值(字符串);

补充知识:CSS3的属性

border-top-left-radius:[<length> | <percentage> ] [ <length> | <percentage> ]?

默认值:0

取值:

<length>:

用长度值设置对象的左上角(top-left)圆角半径长度。不允许负值

<percentage>:

用百分比设置对象的左上角(top-left)圆角半径长度。不允许负值

说明:

设置或检索对象的左上角圆角边框。提供2个参数,2个参数以空格分隔,每个参数允许设置1个参数值,第1个参数表示水平
半径,第2个参数表示垂直半径,如第2个参数省略,则默认等于第1个参数。
如设置border-top-left-radius:5px10px;表示top-left这个角的水平圆角半径为5px,垂直圆角半径为10px。对
应的脚本特性为borderTopLeftRadius。

CSS3阴影演示工具http://www.css88.com/tool/css3Preview/Box-Shadow.html

CSS3阴影 box-shadow的使用和技巧总结的更多相关文章

  1. 5分钟让你掌握css3阴影、倒影、渐变小技巧!

    一.开始让大家看一张他们组合的图片再一步一步做: 二.先是建立两个文本不做处理运行如图 三.给第一个div字体加上阴影 text-shadow: 5px 5px 10px red; text-shad ...

  2. 【转】 CSS3阴影 box-shadow的使用和技巧总结

    text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果.随着html5和CSS3的普及,这一特殊效果使用越来越普遍. 基本语法是{box-shadow:[inset ...

  3. CSS3阴影 box-shadow的使用

      text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果.随着html5和CSS3的普及,这一特殊效果使用越来越普遍. 基本语法是{box-shadow:[ins ...

  4. CSS3阴影 box-shadow的使用总结

    text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果.随着html5和CSS3的普及,这一特殊效果使用越来越普遍. 基本语法是{box-shadow:[inset ...

  5. OpenGL阴影,Shadow Volumes(附源程序,使用 VCGlib )

    实验平台:Win7,VS2010 先上结果截图:    本文是我前一篇博客:OpenGL阴影,Shadow Mapping(附源程序)的下篇,描述两个最常用的阴影技术中的第二个,Shadow Volu ...

  6. OpenGL阴影,Shadow Mapping(附源程序)

    实验平台:Win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): 本文描述图形学的两个最常用的阴影技术之一,Shadow Mapping方法(另一种是Sh ...

  7. OpenGL 阴影之Shadow Mapping和Shadow Volumes

    先说下开发环境.VS2013,C++空项目,引用glut,glew.glut包含基本窗口操作,免去我们自己新建win32窗口一些操作.glew使我们能使用最新opengl的API,因winodw本身只 ...

  8. 阴影锥(shadow volume)原理与展望

    转记:找了不少关于shadow volume原理的资料,还是这个帖子讲解的一目了然,转帖在这里,方便查阅.引用链接:http://blog.donews.com/yyh/archive/2005/05 ...

  9. CSS3 Flex Box(弹性盒子)

    CSS3 Flex Box(弹性盒子) 一.简介 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及 ...

随机推荐

  1. Tableau10.0学习随记-度量的聚合设置(取消度量汇总-展示所有数据)

    度量的聚合与取消聚合 a.根据度量指标分析时,有的度量值在直接拖取后,所展示的结果如下图所示: b.此时,如果需要展示所有数据的散点图,则可以取消菜单中的“分析-聚合度量”选项,如下图所示: c.调整 ...

  2. MySql 获取当前节点及递归所有上级节点

    -- MySql 获取当前节点及递归所有上级节点 -- 参数说明:resultField:查询返回字段,idd 要查询的资源ID值,idFieldName ID字段名,parentIdFieldNam ...

  3. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  4. Scala 学习笔记(五)

    def main(args : Array[String]): Unit = { def add(x:Int,y:Int):Int = { return x+y; } def subtract:(In ...

  5. Provisioning Services 7.6 入门到精通系列之二:基础架构环境

    在阅读本博文之前强烈建议同学们提前了解Citrix XenDesktop和XenApp等产品,并对PVS相关产品概念架构有深入的理解.  1.1  以下是在上一章节中规划的本次测试环境的配置清单(后续 ...

  6. LeetCode 3 Longest Substring Without Repeating Characters 区间,想法 难度:1

    https://leetcode.com/problems/longest-substring-without-repeating-characters/ 思路:从某点结束所能取到的最早开头是到目前出 ...

  7. Linux Mint 17使用小结

    用过蛮多的linux系统 linux mint是我比较喜欢和常用的一个系统,装的是linux mint xfce 64位版本,在这里记录使用中遇到的一些问题及解决的方法,备忘,方便以后查看. 1.首先 ...

  8. 聊聊css hack

    什么是CSS hack CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如 ...

  9. Sql server 2008 中varbinary查询

    sqlserver2008中遇到一个坑爹的问题,使用以下语句添加的数据 insert into testtable ( username, password, productcode ) select ...

  10. R语言入门系列1--数学狗还是做数据好了

    nanana,作为一个不合格的数学专业学生,脑袋不好使,又穷逼,只好学点儿实用的东西,希望能养活自己~~~ 不瞎哔哔,想做数据方面工作的时候在犹豫是学R还是学python,一点儿python基础都没有 ...