使用CSS3的box-shadow实现双透明遮罩层对话框
box-shadow介绍
在我之前的一篇文章《从天猫和支付宝身上学习opcity与rgba》中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba。他们需要分别依赖于不同的html结构。
例如用opacity方法:点我查看DEMO。
我一度认为实现这种双遮罩层的效果必须需要借助background,事实上利用CSS3的box-shadow属性可以轻松模拟出这种效果。再次查看Demo。
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示例:
<style>
.blue{top:20px;height:50px;width:150px;background:blue; }
.yellow{top:10px; left:20px;height:30px;width:100px;background:yellow;}
.red{top:0;left:50px;height:100px;width:50px;background:red;}
</style>
<div style="position:relative" class="blue">
<div style="position:absolute;z-index:1;" class="yellow"></div>
</div>
<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实现双透明遮罩层对话框的更多相关文章
- html中设置透明遮罩层的兼容性代码
说明:下面遮罩层的height视实际情况自行修改,要求显示的div层的样式需加上position:relative,位于遮罩层层div的下面一行.<div id="ceng" ...
- Virtual Box中 CentOS双网卡设置
Virtual Box中 CentOS双网卡设置: 在Virtual Box中安装CentOS x86-64 6.4(final),配置了双网卡,eth0 为桥接模式 , eth1为内网模式 ...
- CSS3 Flex Box(弹性盒子)
CSS3 Flex Box(弹性盒子) 一.简介 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及 ...
- CSS3学习笔记(5)—页面遮罩效果
今天把页面遮罩的效果发一下,之前遮罩都是用JS实现的,忽然发现CSS3里面的box-shadow属性除了做立体阴影外,还可以做页面的遮罩. 下面来看一下完成的动态效果: 从上图可以看出,就是当鼠标悬浮 ...
- jQuery css3鼠标悬停图片显示遮罩层动画特效
jQuery css3鼠标悬停图片显示遮罩层动画特效 效果体验:http://hovertree.com/texiao/jquery/39/ 效果图: 源码下载:http://hovertree.co ...
- 纯CSS3写的10个不同的酷炫图片遮罩层效果【转】
这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- 纯CSS3写的10个不同的酷炫图片遮罩层效果
这个是纯CSS3实现的的10个不同的酷炫图片遮罩层效果,可以欣赏一下 在线预览 下载地址 实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
- iOS开发必备HUD(透明指示层)
iOS开发必备HUD(透明指示层) 字数421 阅读2123 评论1 喜欢51 1.MBProgressHUD GitHub地址:https://github.com/jdg/MBProgressHU ...
- 解决css3遮罩层挡住下面元素事件的方法
比如大家常看到的鼠标移入图片中,会有一个挡住图片的黑色半透明遮罩层,上面还有文字介绍,这时候就会遇到该层遮挡住下面图片的跳转链接事件,这时候怎么办呢?有个简单的css3属性可以快速解决该问题:poin ...
随机推荐
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- Java 征途:行者的地图
前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走进或正在 Java 世界跋涉的程序员们. 第一张,基础图 大约在 2003 年我开始知道 Java 的(当时还在用 Delph ...
- 首个threejs项目-前端填坑指南
第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...
- node中的cmd规范
你应该熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件) exports.name = function() { console.log('M ...
- jQuery.template.js 简单使用
之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...
- [C#] C# 知识回顾 - 特性 Attribute
C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...
- Linux主机上使用交叉编译移植u-boot到树莓派
0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...
- FreeMarker:怎么使用
第一个FreeMarker程序 1. 建立一个普通的java项目:testFreeMarker 2. 引入freemarker.jar包 3. 在项目目录下建立模板目录:templates 4. 在t ...
- Html 制作相册
本文主要讲述采用Html5+jQuery+CSS 制作相册的小小记录. 主要功能点: Html5进行布局 调用jQuery(借用官网的一句话:The Write Less, Do More)极大的简化 ...
- Create a bridge using a tagged vlan (8021.q) interface
SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...