层的半透明实现方案

一、使用 opacity + Alpha Filter

看起来手挺简单的吧?嗯。挺简单的… 希望你能很方便实现这个方案!其实见到这个的时候,我们的第一想法当然是 background +
opacity,在不支持 opacity 的 IE 使用 filter 的 alpha 滤镜来实现。然后,我们得到这样的效果:

CSS代码

  1. .opacity{
  2. background:#000;
  3. opacity:0.3;
  4. filter: alpha(opacity=30);
  5. }

无一例外,最外层,最内层和文字,都被设置了 opacity(alpha 也是使用 opacity ) 。当然,我们可以给各层设置 opacity 变回来。但这是多麻烦的事(不信试一下)。

二、最佳实践:rgba色彩 + Gradient Filter

其实我们可以选用 background-color: rgba() 来实现,同样可以实现透明效果,并且只应用于当前元素,不继承。而 IE 的
filter
有很多滤镜效果。其中的渐变滤镜,只要变通一下,就可以实现我们想要的效果,并且这个滤镜不会被下级元素继承,这样元素的内容就不会被虚化。代码如下:

CSS代码

  1. /*
  2. * filter 渐变滤镜详细用法,[参见这里]
  3. * StartColorStr 和 EndColorStr:
  4. *    #4c000000 是 30% 透明度的 #000000 的意思
  5. *    组成: # + 透明度 + 颜色
  6. *    算法: Math.floor(0.6 * 255).toString(16);
  7. */
  8. .rgba{
  9. background:rgba(0, 0, 0, 0.3);
  10. filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=‘#4c000000′, EndColorStr=‘#4c000000′);
  11. }

不过,我们得到的效果是这样的,IE9 的透明度竟然有 60%!! 这显然不是我们想法的。原因是:IE9 也支持 filter,使得 filter 的结果和 background-color 叠加,所以是 60%。具体参见 DEMO 和示例图:

那么我们可以利用IE HACK,单独把 IE9 的 filter 变成透明度为 0 即可。高级浏览器大部分支持 :root 伪类,但不支持 filter 属性,而 IE 只有 IE9 支持,所以我们可以这样写。代码如下:

CSS代码

  1. :root .rgba{    filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=‘#00000000′, EndColorStr=‘#00000000′);
  2. }

当然,第二种方法可以应用于 background,也可应用于 border 上。

整体的代码可参见DEMO。

时间: 2024-12-20 02:51:05

层的半透明实现方案的相关文章

jQuery给页面弹出层添加半透明背景

1.弹出层的设计 使用的东西是很简单的,需要两个div,一个做为弹出层背景的,另一个做为在半透明背景上面一层显示内容的. 在底层半透明div样式: 显示内容的div样式(不重要) jQuery的调用方式,在显示弹出框之前先把背景显示出来:

Oracle统一访问代理层方案

目标 提供一个oracle数据库统一访问代理层,统一管理所有oracle数据库用户名的连接池,让多个应用系统相同的数据库用户公用连接池以节省oracle服务器的总连接数,并且提供统一管理oracle能力. 由访问层维护后端oracle不同用户的连接池,应用通过jdbc协议告知访问层需要操作的数据库对象的用户名,访问层即从对应用户名的连接池中取出一条数据库连接执行sql.达到相同用户名连接复用效果.例如,user2&sql传入访问层,访问层engine定位到第一个oracle的user2用户名连接

移动端弹出层滚动穿透问题总结

移动端弹出层(简称layer)时,层内有大量文字需要滚动,但是背景层(简称body)会随着layer的滚动而滚动,用户体验较差.参考了网上的一些资料,总结解决方案如下: .scrollFix{ height: 100%; overflow: hidden; position: relative;}.scrollFix body{ height: 100%; overflow: hidden;} 弹出层前: //防止body层向下滚动后出现内容显示不全的问题$('html,body').anima

5(计算机网络)从物理层到MAC层

故事就从我的大学宿舍开始讲起吧.作为一个八零后,我要暴露年龄了. 我们宿舍四个人,大一的时候学校不让上网,不给开通网络.但是,宿舍有一个人比较有钱,率先买了一台电脑.那买了电脑干什么呢? 首先,有单机游戏可以打,比如说<拳皇>.两个人用一个键盘,照样打得火热.后来有第二个人买了电脑,那两台电脑能不能连接起来呢?你会说,当然能啊,买个路由器不就行了. 现在一台家用路由器非常便宜,一百多块的事情.那时候路由器绝对是奢侈品.一直到大四,我们宿舍都没有买路由器.可能是因为那时候技术没有现在这么发达,导

物理层到MAC层

第一层(物理层) ? 使用路由器,是在第三层上.我们先从第一层物理层开始说. ? 物理层能折腾啥?现在的同学可能想不到,我们当时去学校配电脑的地方买网线,卖网线的师傅都会问,你的网线是要电脑连电脑啊,还是电脑连网口啊? ? 我们要的是电脑连电脑.这种方式就是一根网线,有两个头.一头插在一台电脑的网卡上,另一头插在另一台电脑的网卡上.但是在当时,普通的网线这样是通不了的,所以水晶头要做交叉线,用的就是所谓的1-3.2-6 交叉接法. ? 水晶头的第 1.2 和第 3.6 脚,它们分别起着收.发信号

hybrid几种模式

native和web适合的场景 Native: 用户体验要求高 业务变动很小(如首页) 性能要求高 Web: 业务变化频繁(如广告) 性能要求低 展示性内容 hybrid App其实会有不同的分支 方案一:使用PhoneGap.AppCan之类的中间件, 以WebView作为用户界面层, 以Javascript作为基本逻辑,以及和中间件通讯, 再由中间件访问底层API的方式,进行应用开发. 这种架构一般会非常依赖WebView层的性能. 方案二:使用Adobe Air.RubyMotion.Ap

[读书笔记]逻辑思维,只要五步

零.五个技巧 MECE分析法 本质上是分类问题,问题.原因.方案等等皆可用MECE分析法,以保证思考范围没有遗漏和重复 一维分类,二维分类 公式分析:销售额 = 单价 × 数量 思维定势(四笔连九点|拓展思考范围) 假设思考VS随时应对思考 零基础思考VS经验前提思考 其实还是MECE分析法 其他 理由 -联系-> 结论 Question - Answer - Reason 一.金字塔图(表达) 并列: 串联 理由 -> 规律 -> 结论(演绎) 注意事项: 规律是由事实归纳得来,有适用

Ceph Newstore存储引擎介绍

在Ceph被越来越多地应用于各项存储业务过程中,其性能及调优策略也成为用户密切关注讨论的话题,影响性能表现关键因素之一即OSD存储引擎实现:Ceph基础组件RADOS是强一致.对象存储系统,其OSD底层支持的存储引擎如下图所示: 其中,ObjectStore层封装了下层存储引擎的所有IO操作,向上层提供对象(object).事务(Transaction)语义的接口,MemStore为基于内存的实现:KeyValueStore主要基于KV数据库(如leveldb, rocksdb等)实现接口功能,

《TCP/IP详解卷2:实现》笔记--域和协议

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Net/3组把协议关联到一个域,并且用一个协议族常量来标识每个域.Net/3还通过所有的编址方法将协议分组.在一个域中</span> 的每个协议使用同类地址,并且每种地址只被一个域使用.作为结果,一个域能通过它的协议族或地址族常量唯一标识. 下图是是我们讨论的协议和常量. 1