背景遮罩(蒙层)实现方法

1. border

可响应事件,占据空间

border: 100px solid rgb(0,0,0,.5);

2. outline

不响应事件,不占据空间

outline: 100px solid rgb(0,0,0,.5);

outline 支持 outline-color, outline-style, outline-width 和broder一样可以调整风格

支持多边框 outline: thick double #32a1ce;
支持圆角 border-radius可以使outline圆角 (chrome 94,safari 16.4)
支持外移 outline-offset 可使边框与元素产生一个距离,是border没有的,可实现特殊效果

outline-offset支持负值,可以做向内阴影,甚至是全阴影,也很强大

例如:遮盖超链接中的图片


<a href><img src="1.jpg"></a>
[href] > img:only-child:active {
   outline: 999px solid rgba(0,0,0,.05);
   outline-offset: -999px;
   clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}

3. box-shadow

不响应事件,不占据空间

影分身,向内,向外,全阴影,多重影分身,非常牛B

box-shadow: 0 0 0 100px rgb(0,0,0,.5);

drop-shadow 不行,阴影放大后会渐变,很淡

4. 伪元素::after

涉及到层级问题,可能无法覆盖高层级元素,需要调整

.con::after{
    content: '';
    position: fixed;
    width: 100%;
    height: 100%;
    background: rgb(0,0,0,.5);
    top: 0;
    left: 0;
}

5. 额外元素

此种方法较为普通,在此不赘述

6. 按钮active反馈遮罩收集

body {
    -webkit-tap-highlight-color: rgba(0,0,0,0);  /*针对Safari*/
}
[href]:active,
button:active {
    background-image: linear-gradient(rgba(0,0,0,.05), rgba(0,0,0,.05));      /*方法1*/
    box-shadow: inset 0 0 0 999px rgba(0,0,0,.05);                            /*方法2*/
    border-image: linear-gradient(rgba(0,0,0,.05), rgba(0,0,0,.05)) 1 fill;   /*方法3*/
}
[href] img:active {
    outline: 999px solid rgba(0,0,0,.05);
    outline-offset: -999px;
    clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); /*裁切有用或者用overlfow:hidden*/
}

 

posted @ 2023-11-22 19:29  全玉  阅读(50)  评论(0编辑  收藏  举报