box-shadow介绍

  在我之前的一篇文章《从天猫和支付宝身上学习opcity与rgba》中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba。他们需要分别依赖于不同的html结构。

  例如用opacity方法:点我查看DEMO

  我一度认为实现这种双遮罩层的效果必须需要借助background,事实上利用CSS3的box-shadow属性可以轻松模拟出这种效果。再次查看Demo

  1. box-shadow: 0 0 0 20px rgba(0, 0 ,0 ,0.5);

  五个参数依次代表:向右偏移量,向下偏移量,模糊度,阴影面积大小,颜色。

  之前说过,rgba非常强大,除了可以作用在background-color上,还可以作用在box-shadow等颜色值上。现在使对话框的box-shadow的模糊度为0,既完全不模糊,并且使其阴影面积为20px,背景透明,即可为对话框模拟出一个20px宽的透明border。

  可以给一个元素赋予多重box-shadow,这意味着从原则上来讲,我们可以给元素模拟出N个border。

  当然,虽然box-shadow可以模拟出border的效果,但它与border相去甚远。在W3C盒模型中,border的宽度会影响到元素所占面积,在IE盒模型中,border的宽度会影响content所占面积。但是box-shadow会被元素占位计算所无视,无论有多宽的box-shadow,元素都不会加宽哪怕一点。当多个相邻元素都有box-shadow时,他们的阴影便会根据元素的z-index进行遮盖,在默认情况下时,后边的元素的box-shadow会遮盖住前边的元素。

  当元素设置了opacity属性后,与其相关的border,background,以及子元素都会透明,box-shadow也会受其影响变为透明。

  我们可以这样理解,假如元素是集装箱中摆放的一个个盒子的话,box-shadow就是盒子的影子,它不能占用集装箱空间,但是它可以遮挡住其它盒子。

  查看Demo:box-shadow的占位与层级

关于z-index

  刚才提到使用z-index来改变box-shadow的遮挡顺序。其实改变的不是box-shadow,而是元素的层级。假如两个元素重合,z-index高者会遮挡住低者。那么到底什么是z-index呢?

  在 W3C CSS2.1 规范中,每个元素都具有三维的空间位置,除我们所熟悉的水平和垂直位置外,元素还可在 "Z轴" 方向上层层相叠、依次向前排开。

  当然,并不是说页面上所有的z-index会被统一管理。这里需要引入一个概念,叫做层叠上下文(stacking context)。同一个层叠上下文中,层叠级别大的显示在上,层叠级别小的显示在下,相同层叠级别时,遵循后来居上的原则(back-to-font);不同层叠上下文中,元素显示顺序以父级层叠上下文的层叠级别来决定显示的先后顺序。与自身的层叠级别无关;

  如何创建一个层叠上下文?

  1.当某个元素的 z-index 被显示定义且不为auto,position 不为 static 时,会产生新的局部层叠上下文。

  2.当opacity值小于1时,该元素会创建新的局部层叠上下文。

  下面看一个在IE6-7中的bug示例:

  1. <style>
  2. .blue{top:20px;height:50px;width:150px;background:blue; }
  3. .yellow{top:10px; left:20px;height:30px;width:100px;background:yellow;}
  4. .red{top:0;left:50px;height:100px;width:50px;background:red;}
  5. </style>
  6. <div style="position:relative" class="blue">
  7. <div style="position:absolute;z-index:1;" class="yellow"></div>
  8. </div>
  9. <div style="position:absolute;" class="red"></div>

  上面这段代码在IE8+及符合W3C规范的标准浏览器中,从高到底依次是yellow,red,blue。而在IE6-7中,从高到底依次是red,yellow,blue。这是由于在IE6-7中,没有设置z-index的定位元素仍然会创建一个层叠上下文。

  另外需要特别注意的是,虽然opacity小于1时可以创建一个层叠上下文,会对其子元素的定位造成影响,但是它本身的z-index是无法设置的,在与同层叠上下文中的其它元素相比时,z-index应看作0或auto。当然,如果这个透明元素是定位元素的话,自然可以设置z-index了。

  虽然我理解到了z-index之中的奥妙,但是可能文笔与实例不足,阅读者如果有困惑可以阅读下doyoe写的文章:你需要了解的z-index世界

  我与之相比犹如萤火之于皓月,本文中介绍z-index部分权当抛砖引玉吧!

  (完)

使用CSS3的box-shadow实现双透明遮罩层对话框的更多相关文章

  1. html中设置透明遮罩层的兼容性代码

    说明:下面遮罩层的height视实际情况自行修改,要求显示的div层的样式需加上position:relative,位于遮罩层层div的下面一行.<div id="ceng" ...

  2. Virtual Box中 CentOS双网卡设置

    Virtual Box中 CentOS双网卡设置:   在Virtual Box中安装CentOS x86-64 6.4(final),配置了双网卡,eth0 为桥接模式 , eth1为内网模式   ...

  3. CSS3 Flex Box(弹性盒子)

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

  4. CSS3学习笔记(5)—页面遮罩效果

    今天把页面遮罩的效果发一下,之前遮罩都是用JS实现的,忽然发现CSS3里面的box-shadow属性除了做立体阴影外,还可以做页面的遮罩. 下面来看一下完成的动态效果: 从上图可以看出,就是当鼠标悬浮 ...

  5. jQuery css3鼠标悬停图片显示遮罩层动画特效

    jQuery css3鼠标悬停图片显示遮罩层动画特效 效果体验:http://hovertree.com/texiao/jquery/39/ 效果图: 源码下载:http://hovertree.co ...

  6. 纯CSS3写的10个不同的酷炫图片遮罩层效果【转】

    这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  7. 纯CSS3写的10个不同的酷炫图片遮罩层效果

    这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  8. iOS开发必备HUD(透明指示层)

    iOS开发必备HUD(透明指示层) 字数421 阅读2123 评论1 喜欢51 1.MBProgressHUD GitHub地址:https://github.com/jdg/MBProgressHU ...

  9. 解决css3遮罩层挡住下面元素事件的方法

    比如大家常看到的鼠标移入图片中,会有一个挡住图片的黑色半透明遮罩层,上面还有文字介绍,这时候就会遇到该层遮挡住下面图片的跳转链接事件,这时候怎么办呢?有个简单的css3属性可以快速解决该问题:poin ...

随机推荐

  1. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  2. SQL数据库之DQL

    初来乍到,我是一个Java行业的小学生,刚学半年. 今天老师讲了数据库的操作语句,在这里与大家分享一下我学到的知识吧,要是有不足的地方麻烦大家指出来,共同进步,共同提高! 1.数据库中的各种符号 %: ...

  3. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

  4. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  5. 主成分分析(PCA)原理总结

    主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就 ...

  6. ObserverPattern(观察者模式)

    import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适 ...

  7. GitHub管理代码-随笔

    公司一直用的SVN进行项目管理,平时便自己折腾了下Git,这里做下GitHub的最简单的记录... 在git上创建仓库等就免谈了,网上也有好多教程,直接从创建之后记录: 在github的readme文 ...

  8. 如何使用dos命令查看MySQL当前使用的数据库?

    1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:

  9. Linux命令

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  10. Linux虚拟化学习笔记<一>

    关于虚拟化,原理的东西是非常复杂的,要想完全理解,没有足够的耐心是不不能完全学透这部分内容的.那下面我主要以资源汇总的形式把一些资料罗列出来,帮助大家快速理解虚拟化,快速使用和配置. 为什么要虚拟化: ...