css 透明度引发的思考

模态框实现

想要实现个模态框的效果,背景有一层蒙版,第一个想法就是设置背景淡灰色并给个透明度,so easy!

background-color: rgba(0,0,0);
opacity: 0.55;

下面图片可以看到,模态框内部的文字也继承了 opacity 的透明度属性,即便给内部子元素设置个 opacity=1 也没有什么卵用。

opacity 实现的透明度会强行传给子元素
opacity 实现的透明度会强行传给子元素

除了 opacity 之外,还有一种设置透明度的方法是 background-color: rgba(0,0,0,0.55) ,注意是 rgba 不是 rgb,前者最后那个字母 a 也是设置透明度的,这种方法就不会将透明属性传给子元素了,效果如下。

rbga() 实现的透明度不会继承给子元素
rbga() 实现的透明度不会继承给子元素

源码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>模态框-练习</title>
    <style>
        body {
            color: #333;
        }
        .modal {
            position: fixed;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            z-index: 1000;
            background-color: rgba(0,0,0, 0.55);
        }
        .modal-dialog {
            position: relative;
            margin: 100px auto;
            max-width: 500px;
            border: 1px solid rgba(0,0,0,.2);
            border-radius: 6px;
            box-shadow: 0 3px 9px rgba(0,0,0,.5);
            background: #fff;
        }
    </style>
</head>
<body>
    <h1>hello world!</h1>
    <div class="modal">
        <div class="modal-dialog">
            <h1>模态框内部</h1>
        </div>
    </div>
</body>
</html>

到这里为止效果是弄出来了,又想着去参考 Bootstrap 和 Antd 的代码,看看它们的模态框怎么整的?发现这两货都是整了个空 div(.madal-mask) 来设置背景蒙版,另一个兄弟元素 div(/modal-dialog) 作为模态框的内容。为什么这样写?猜测是为了避免透明度继承的问题,但是一看 modal-mask 代码透明度是用 rgba 属性设置的,压根不存在透明度继承的问题,那么这种写法的意义又何在??

<div>
  <div class="modal-mask"/>  <!-- 设置背景蒙版,透明度 -->
  <div class="modal-dialog"> <!-- 模态框内容 -->
    
  </div>
</div>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 距离我正儿八经写作,也有四年了,上一次写作大概是高考吧。后来断断续续也有在微博上写过一些东西,算不上文章,只是一段...
    魔法棒少女阅读 1,225评论 0 0
  • 年少时不知愁是何滋味, 为赋新词强说愁哀。 你梦里的暮年, 是否也有文字的清茗。 谁只年少才轻狂, 理想也曾三旬。...
    桉鸣阅读 3,982评论 1 2

友情链接更多精彩内容