纯css完美解决背景半透明方案及less封装

6,185次阅读
没有评论

共计 1981 个字符,预计需要花费 5 分钟才能阅读完成。

前言

最近遇到了全浏览器兼容背景半透明的问题。大致有这么几个解决方案:

1. 使用半透明 png 图片平铺

2. 使用 opacity 属性

3. 使用 raba 颜色 +ie 的 filter 滤镜

总的来说,方法一最为简单,但 png 图片要比几行 css 大很多,还会增加服务器请求。方法二会使 opacity 下的子元素也全变透明,通过外部定位解决还会有一堆兼容问题。方法三是比较完美的解决方案,而且通过 less 把代码封装后能很方便的调用。

RGBA 颜色

rgba 颜色的四个属性分别表示 red 红色、green 绿色、blue 蓝色、alpha 透明度。通过这几个数值能够轻松实现背景透明。代码如下:

这样透明只对背景生效,对于非 ie 浏览器是非常完美的解决方案。
不幸的是 ie8 及以下不支持 rgba 属性,并且经测试 ie9 会把 rgba 解析为全透明。

IE Filter

通过 background: transparent 注释可解决 ie9 解析 rgba 全透明问题。通过 ie 的 filter 属性 便可让 ie 支持背景透明。代码如下:

能够看到 filter 中的 8 位 16 进制的半透明颜色 #99000000 为 argb 颜色,既#AARRGGBB,前两位是透明度,后面分别是红绿蓝。

如果我们希望透明度为 0.6,则需要将 0.6 乘以 255, 再转化为 16 进制。最简单的方法是利用 JavaScript,在浏览器的调试面板里输入:

纯 css 完美解决背景半透明方案及 less 封装
回车后可以看到结果为 99。这样透明度 0.6 的黑色的 argb 颜色即为#99000000

整合

将代码整合,完整的实现如下:

使用 LESS 封装

因为自己使用的 less,就用 less 封装了一下,开始时没在官方文档找到颜色值转换成 rgb 的方法(貌似 sass 直接使用 rgb($color)),然后在stackoverflow 搜索该问题,发现用hsla() 能够很完美解决。代码如下:

这样每次调用时只需输入颜色跟透明度这两个参数就好。

文章来源: 纯 css 完美解决背景半透明方案及 less 封装

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1981字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)