前面的话

  本文将详细介绍CSS遮罩效果和毛玻璃效果

遮罩效果

普通遮罩

  一般地,处理全屏遮罩的方法是使用额外标签

<style>
.overlay{
position:fixed;
top: 0;right: 0;left: 0;bottom: 0;
background:rgba(0,0,0,0.8);
}
.lightbox{
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
margin:auto;
z-index:1;
width: 100px;
height: 100px;
background-color: white;
}
</style>
<div class="overlay"></div>
<div class="lightbox"></div>

  效果如下

阴影遮罩

  对于简单的应用场景和产品原型来说,我们可以利用box-shadow来达到调暗背景的效果

box-shadow: 0 0 0 999px rgba(0,0,0,0.8);

  这个初步的解决方案有一个明显的问题,就是它无法在较大的屏幕分辨率(如>2000px)下正常工作。要么加大数字来缓解这个问题,要么换用视口单位来一劳永逸地解决它,只有这样才能确保"遮罩层"总是可以覆盖(至超出)视口

box-shadow: 0 0 0 50vmax rgba(0,0,0,0.8);

  这个技巧非常简洁易用,但它存在两个非常严重的问题,从而制约了其使用场景

  1、由于遮罩层的尺寸是与视口相关,而不是与页面相关的,滚动页面时,遮罩层的边缘就露出来了,除非给它加上position:fixed这个样式,或者页面并没有长到需要滚动的程度

  2、这种效果无法防止用户的鼠标与页面的其他部分发生交互

<style>
.lightbox{
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
margin:auto;
z-index:1;
width: 100px;
height: 100px;
background-color: white;
box-shadow: 0 0 0 50vmax rgba(0,0,0,0.8);
}
</style>
<div class="lightbox"></div>

模糊遮罩

  把关键元素之外的一切都模糊掉,用来配合(或取代)阴影效果,这个效果的真实感更强,因为它营造出了"景深效果。视线聚焦在距离较近的物体上时,远处的背景就是虚化的

filter:blur(5px);

  下面是一个实例,鼠标移出弹出框时, 模糊消失

毛玻璃效果

  下面来逐步实现毛玻璃效果

半透明颜色

  半透明颜色最初的使用场景之一就是作为背景。将其叠放在照片类或其他花哨的背层之上,可以减少对比度,确保文本的可读性

  下面是一个实例

<style>
.outer{
position:relative;
height: 200px;
width: 200px;
background: hsl(20,40%,90%);
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
}
.inner{
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
font: bold 20px/1.5 '宋体';
height: 160px;
width: 180px;
margin:auto;
background:hsla(0,0%,100%,.3);
}
</style>
<div class="outer">
<div class="inner">前端入门容易精通难,说的是前端,更指javascript</div>
</div>

【增大不透明度】

  设置为30%的不透明度,文字难以看清。当然,可以通过提升不透明度来增加文本可读性,但效果整个效果就没有那么生动了

background:hsla(0,0%,100%,.6);

模糊处理

  在传统的平面设计中,通常把文本层所覆盖的那部分图片区域作模糊处理。模糊的背景看起来不那么花哨,因此在它之上的文本就相对比较易读了。过去,由于模糊运算的性能消耗极其巨大,以致于这个技巧在网页设计中鲜有用武之地。不过,随着GPU的不断进化以及硬件加速的不断普及,眼下这个技巧已经逐渐流行起来

【父元素模糊】

  如果直接对父元素设置模糊,则文本本身也会被模糊处理

<style>
.outer{
position:relative;
height: 200px;
width: 200px;
background: hsl(20,40%,90%);
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
filter:blur(5px);
}
.inner{
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
font: 20px/1.5 '宋体';
height: 160px;
width: 180px;
margin:auto;
background:hsla(0,0%,100%,.6);
}
</style>
<div class="outer">
<div class="inner">前端入门容易精通难,说的是前端,更指javascript</div>
</div>

【伪元素模糊】

  因此,对一个伪元素进行处理,然后将其定位到元素的下层

<style>
.outer{
position:relative;
height: 200px;
width: 200px;
z-index:1;
background: hsl(20,40%,90%);
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
}
.inner:before{
content:'';
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
filter:blur(5px);
background: rgba(255,0,0,0.5);
z-index:-1;
}
.inner{
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
font: 20px/1.5 '宋体';
height: 160px;
width: 180px;
margin:auto;
background:hsla(0,0%,100%,.3);
}
</style>
<div class="outer">
<div class="inner">前端入门容易精通难,说的是前端,更指javascript</div>
</div>

背景复制

  下面复制父级元素的背景来替换半透明的红色。如果保证毛玻璃下的背景正好与父元素背景的图案相吻合呢?使用fixed即可,将父元素和伪元素的背景设置为相同,且都相对于视口设置,可实现目标

<style>
.outer{
position:relative;
height: 200px;
width: 200px;
z-index:1;
background: hsl(20,40%,90%) fixed;
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
}
.inner:before{
content:'';
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
filter:blur(5px);
background: hsl(20,40%,90%) fixed;
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
z-index:-1;
}
.inner{
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
font: 20px/1.5 '宋体';
height: 160px;
width: 180px;
margin:auto;
background:hsla(0,0%,100%,.3);
}
</style>
<div class="outer">
<div class="inner">前端入门容易精通难,说的是前端,更指javascript</div>
</div>

  效果如下

样式封装

  毛玻璃样式封装如下

.frostedglass{
width: 100px;
height: 100px;
font-size:16px;
/*计算值为 height - width*top*2*/
line-height: 70px;
z-index:1;
border-radius:50%;
position:relative;
overflow: hidden;
text-align:center;
background: hsl(20,40%,90%) fixed;
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
}
.frostedglass-inner:before{
content:'';
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
filter:blur(5px);
background: hsl(20,40%,90%) fixed;
background-image:linear-gradient(90deg,#fb3 11px,transparent 0),
linear-gradient(90deg,#ab4 23px,transparent 0),
linear-gradient(90deg,#655 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;
z-index:-1;
}
.frostedglass-inner{
position:absolute;
top: 15%;right: 15%;left: 15%;bottom: 15%;
background:hsla(0,0%,100%,.3);
}

  下面是一个例子

<div class="frostedglass">
<div class="frostedglass-inner">前端开发</div>
</div>
<div class="frostedglass">
<div class="frostedglass-inner">HTML</div>
</div>

CSS遮罩效果和毛玻璃效果的更多相关文章

  1. 《CSS揭秘》之毛玻璃效果知识点

    实现代码: CodePen:毛玻璃效果 Dabblet:毛玻璃效果 HTML: <main> <blockquote> <em>"The only way ...

  2. CSS 奇思妙想 | 全兼容的毛玻璃效果

    通过本文,你能了解到 最基本的使用 CSS backdrop-filter 实现磨砂玻璃(毛玻璃)的效果 在至今不兼容 backdrop-filter 的 firefox 浏览器,如何利用一些技巧性的 ...

  3. 用CSS伪类实现毛玻璃效果

    效果图: 思路: 内容容器需要一个before伪类,负责引用跟背景容器相同的背景图,还需要一个after伪类,用来加上半透明的白色背景.这两个伪类的层级需都为-1,而内容容器本身的层级为1,这样做可以 ...

  4. 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果

    去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...

  5. [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时, ...

  6. CSS技巧收集——毛玻璃效果

    先上 demo和 源码 其实毛玻璃的模糊效果技术上比较简单,只是用到了 css 滤镜(filter)中的 blur 属性.但是要做一个好的毛玻璃效果,需要注意很多细节. 比如我们需要将上图中页面中间的 ...

  7. css透明度、毛玻璃效果

    透明度: 1.opacity    背景颜色和字体同时透明 2.background:rgba(255,255,255,0.2);   只是背景颜色透明,字体不透明 代码: .info{ backgr ...

  8. 实现一个成熟的底层毛玻璃效果(纯CSS)

    写在前面 毛玻璃背景是一个很常见的网页样式,想要实现,其实并不难,但经过我在网上的搜索发现,大量实现方法都较为不规范,且把问题复杂化了(例如各种z-index属性和position的定位)现提供一个代 ...

  9. css实现毛玻璃效果

    css实现毛玻璃效果,效果图 1,html代码 <div class="mainHolder"> <div class="textHolder" ...

随机推荐

  1. OpenCV3计算机视觉Python语言实现笔记(二)

    1. 图像与原始字节之间的转换 从概念上讲,一个字节能表示0到255的整数.目前,对于多有的实时图像应用而言,虽然有其他的表示形式,但一个像素通常由每个通道的一个字节表示. 一个OpenCV图像是.a ...

  2. ESP8266开发综合篇第十四节(LUA)-8266作为TCP服务器,Android客户端连接,显示温湿度,控制继电器

    前几节先略过,我先补充上大部分人迫切的需求 编写Android TCP客户端  用Android Studio 先做一下界面 然后放一个输入对话框,因为没有显示出来这个控件.所以就手写 剩下的自己研究 ...

  3. SQL Server 分析函数和排名函数

    分析函数基于分组,计算分组内数据的聚合值,经常会和窗口函数OVER()一起使用,使用分析函数可以很方便地计算同比和环比,获得中位数,获得分组的最大值和最小值.分析函数和聚合函数不同,不需要GROUP ...

  4. @Vue/Cli 3 Invalid Host header 检测关闭

    Invalid Host header 在本地开发等一般情况下,无论是 local,还是 ip,或者是 0.0.0.0,在 cli 中都默认为合法的,但是有些场景可能会被不支持,比如远程开发,或者是云 ...

  5. java 一次CPU占用过高问题的排查及解决

    最近一段时间  某台服务器上的一个应用总是隔一段时间就自己挂掉      用top看了看  从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...

  6. 【博客迁移】hyrepo.com

    博客迁移至 www.hyrepo.com

  7. Java 控制语句:循环、条件判断

    基础很重要,基础很重要,基础很重要.重要的事情说三遍,. 程序设计中的控制语句主要有三种:顺序.分支和循环.我们每天写的代码,除了业务相关,里面会包含大量的控制语句.但是控制语句的基本使用,是否有些坑 ...

  8. [LeetCode] Rank Scores -- 数据库知识(mysql)

    Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...

  9. Python学习第三篇——访问列表部分元素

    dongman =["huoying","sishen","si wang bi ji","pan ni de lu lu xiu ...

  10. pip国内镜像

    [国内镜像] 中国科学技术大学 : https://pypi.mirrors.ustc.edu.cn/simple 清华:https://pypi.tuna.tsinghua.edu.cn/simpl ...