Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CSS 穿墙术,太强了

CSS 穿墙术,太强了

作者头像
@零一
发布于 2022-05-25 04:29:00
发布于 2022-05-25 04:29:00
68500
代码可运行
举报
文章被收录于专栏:前端印象前端印象
运行总次数:0
代码可运行

大家好,我是零一,今天给大家分享 CSS 中一个神奇的属性:filter,为什么说它神奇?正如我标题所说的,我突然发现它能帮我们轻松实现 穿墙特效,类似这种的????

看起来就跟我们在科幻电影里看到的经过一个穿梭门时的效果一样,真的很酷!然而这个效果对于开发者来说毫无难度,因为只设置了两个属性

从这个例子引出的 CSS 中超级牛逼的 filter 属性,到底还有哪些牛逼属性呢?一起来了解一下!

filter 支持的属性

借用了一下 MDN 上的例子,filter 一共支持以下这些属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);

这些属性既可以单独用,也可以组合使用,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filter: contrast(175%) brightness(3%);

ps: 属性组合使用时可能有奇效!

案例

本文就介绍一些神奇的案例吧,大概率不会讲清楚每个属性的原理,因为我也不是很清楚

blur

blur 属性平时用的还是挺多的,主要是做高斯模糊的,最近几年特别火的毛玻璃效果就可以通过这个实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  .blur {
    width: 400px;
    height: 400px;
    border-radius: 10px;
    background: rgba(255, 255, 255, 0.5);
    position: relative;
  }
  
  .blur::before {
    content: "";
    position: absolute;
    inset: 0 0 0 0;
    background: inherit;
    filter: blur(10px);
  }
style>

<div class="blur"/>

效果如下:

其实这种毛玻璃效果并不是太好,可能达不到 UI 的要求,想要效果好的毛玻璃,可以用 backdrop-filter 实现,但后者没有前者兼容性好

brightness

brightness 属性是用来修改亮度的。值可以是百分比,也可以是数值(0.5 = 50%),默认值是 1,但不能是负数。当值越接近 0,画面越黑,当等于 0 时,整个画面几乎就成纯黑的了;值理论上可以趋于无限大,当大到一定值时,画面就几乎成纯白了

能用来干啥呢?有一个非常常见的效果想必大家都看过:

不知道你们当时看到这个效果时,脑海里有没有想过该如何实现?哈哈,其实一个属性就够了!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
.brightness {
  width: 100px;
  height: 100px;
  border-radius: 8px;
  cursor: pointer;
  background: #333;
  font-size: 45px;
}

.brightness:hover .icon {
  filter: brightness(1.3);
}
style>

<div class="brightness">
  <img src="apple.png" class="icon"/>
div>

contrast

contrast 可以用来调整图像的对比度,这个词有些专业,设计师是经常接触的,用简单易懂的话来讲,对比度 = 图像中 最白的色值 / 最黑的色值,按照这个公式又可以理解为:

  • 对比度越,白色越(亮)、黑色越(暗),图像越
  • 对比度越,白色越(暗)、黑色越(白),图像越

contrast() 的值可以写百分比,也可以写数值(0.5 = 50%),默认值是 1,该值可以无限大,那样画面就会更亮,但不能为负数

简单了解了概念,实战一下看看效果:

可以看到,值大于 0 且小于 1 时,画面被蒙上了灰色的蒙层;值大于 1 时,画面中很多光亮元素更亮了,而很多暗黑元素就更黑了

这个属性看起来没啥用,既不能让图像更有画面感,又不能让图像更精致,是吧?我也这么觉得!但要知道 contrastbrightness 两个属性跟 UI 设计是强相关的,这让我想到了 PS 里的一个图像调整,我切换到英文版的 PS 给大家看看:

正好就对应了 PS 中图像调整的两个设置属性值

大家都知道,在讲到 前端性能优化 时,其实能够感知到的最大优化就是在于 图片,其它的优化点的 ROI 几乎都没图像优化来得高

那么有没有可能:用 PS 降低图像的亮度、对比度,以此来降低图片的质量**,再用 contrastbrightness提升图像的亮度、对比度,以此来恢复图片原有效果呢?**

先来看看降低图片的亮度和对比度能否降低质量。为此我特地找了个高达 4M 的高清图:

然后再用 PS 适当降低其亮度和对比度,一定要选择 “旧版”,因为只有这种模式下的亮度、对比度的优化规则跟我们 CSS 的类似

看一下修改后的图片大小

可以看到随便调整了一些属性,图片大小大约减少了 1M

那能否再恢复成原来图片的效果和质量呢?

在控制台微调属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filter: brightness(1.2) contrast(1.7);

得到结果如下:

可以看到几乎是没啥差别,而且肉眼看上去图像的损耗我觉得也是可接受范围内的,反而觉得还比原图更有画面感,可能这就是对比度的魔力吧!

这仅仅是降低了一点点对比度的效果,图片体积下降了 25% 左右,先不讨论到底能够极致优化多少图片的大小,但至少 25% 的优化空间已经很 nice 了

另外上文提到了 filter 的有些属性组合使用会有奇效,其中就包括 contrast,它和 blur 一起用就能实现本文开头提到的 穿墙效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
body {
  width: 100vw;
  background-color: black;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.container {
  width: 100px;
  height: 100px;
  border: 4px solid aquamarine;
  background-color: #222;
  overflow: hidden;
  border-radius: 50%;
  font-size: 36px;
  filter: blur(6px) contrast(6); /* 主要靠这行代码 */
  display: flex;
  justify-content: center;
  align-items: center;
}

.box {
  width: 1em;
  height: 1em;
  transform: translate(0px, 0px);
  background-color: aquamarine;
  animation: move 2s linear infinite;
}

@keyframes move {
  from {
    transform: translateX(-100px);
  }

  to {
    transform: translateX(100px);
  }
}
style>

<div class="container">
  <div class="box">div>
div>

这样就实现了:

再次感叹 CSS 牛逼

drop-shadow

drop-shadow 能够给图像设置阴影效果,使用方式其实跟 box-shadow 一样,区别就是:drop-shadow 能够识别图像中的透明元素,给图像内容的每个边打上引用;box-shadow 只能给元素整个轮廓加阴影效果。用一张图来展示它俩的区别:

grayscale

国内但凡遇上一些社会性的天灾人祸,影响比较大的,很多网站都会将页面置灰,表示哀悼。那时候有很多人在分析 “网页置灰” 这个功能该如何实现,其实用 filter 的 grayscale 实现是最简单快速的了

咱们随便找个网页,就拿网易云举例吧,先看正常页面的效果:

我们给它的 body 加上置灰属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body {
  filter: grayscale(1);
}

页面置灰的效果就完成了

hue-rotate

hue-rotate 用于调整元素的色相,色相的概念可以在 HSL 中看到,即:

  • H:色相
  • S:饱和度
  • L:亮度

那改变色相就如下图的过程一样:

hue-rotate 的值的单位是角度(deg),每 360deg 一个变换周期

这有啥用呢?直播间的点赞,狂按时会有很多的漂浮物出来,比如:

我们可以通过修改 filter: hue-rotate(0deg) 的值来改变每个爱心的颜色

这里我又想到了另外一个 CSS 属性,那就是 counter-reset,用其初始化一个计数器,然后用 counter 函数拿到当前计数赋值给 hue-rotate,这样是不是就能实现颜色自动变化了?(当然了我还没实验过,只是在写这篇文章时的一些想法)

invert

invert 是用来翻转图像的,其实我也无法很好地解释什么叫翻转图像,不过可以借另一个例子来给大家解释

图中左侧是抖音最近很火的热成像特效,可以把拍到的东西都以热成像的效果呈现出来,右侧是我们加了 filter: invert(1) 实现的效果,差不多可以看清热成像之前的样子是如何的

所以,相信大家都知道了,invert 跟我们手机里的 颜色翻转 的功能是一模一样的,给大家演示一下

有时候用上 invert 这个滤镜会有意想不到的效果哦,例如我之前的文章里,给我自己画的抖音Logo加了翻转效果,又成了一个崭新的 Logo,话说抖音不打算请我去设计一下么?

其余

其它未提到的属性,要不就是比较简单,一看就知道怎么用了;要不就是平时不怎么用,比较冷门;大家感兴趣的可以去 MDN 自行查看,或者自己试一下

最后

本文由一个比较有意思的效果开头,然后去了解了相关的其它属性,从中又延伸出来很多其它知识点,爆出了很多的想法和思考。这就是我自己的完整思路,所以写文章出来也是这个顺序和逻辑

完了,我是切图仔的身份已经没法隐藏了,本文好多地方需要用到 PS,得亏还记得些内容,不然这篇文章都写不出来

希望本文对大家有所帮助~ 我在用心写文章,希望大家也不要吝啬你们的赞????????哦~

我是零一,分享技术,不止前端!下期见~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/05/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「趣学前端」filter滤镜,CSS的PS特技
这一切都要从一次磨砂效果说起,之前做手机屏幕特效,主控按键的指纹效果,是真没有方向。后来想老款手机带软膜的,有点磨砂的感觉,所以我想到用滤镜功能实现它。
叶一一
2022/10/24
8340
「趣学前端」filter滤镜,CSS的PS特技
CSS3 filter滤镜详细介绍及示例
filter是css3的一个属性,大家应该都很少用到,很多人只是知道有这个属性。Webkit率先支持了这几个功能,不过现在大部分浏览器也都做了兼容性,下面大家就一起来学习吧。
Javanx
2019/09/04
5540
CSS3 filter滤镜详细介绍及示例
原 CSS3 filter
作者:汪娇娇 日期:2016.10.9 其实之前几乎都没用过filter属性,就算知道也只是在脑中留了点浅浅的印象,直到最近因为项目的原因,才对filter进行了一个大致的学习。filter是css3的一个属性,Webkit率先支持了这几个功能,感觉效果很不错。不过现在大部分浏览器也都做了兼容性,下面大家就一起来学习吧。 现在规范中支持的效果有: grayscale 灰度                 值为0-1之间的小数  sepia 褐色        值为0-1之间的小数 saturate 饱和度 
jojo
2018/05/03
5670
原                                                                                CSS3  filter
CSS3 -webkit-filter 滤镜
HTML5学堂:在早期网页要实现图片的色相旋转、灰色度的变化,只能用ie的滤镜来实现。直到CSS3出来之后,可以用filter来实现了,接下来详细的了解filter的使用 语法: 选择器 { filter: none | <filter-value> [ <filter-value> ]* } 语法分析: 属性值的归纳 none–默认值 grayscale(value)–灰度,value:0~1; sepia(value)–褐色,value:0~1; saturate(value)–饱和度,value:
HTML5学堂
2018/03/12
7570
CSS3 -webkit-filter 滤镜
CSS3 filter(滤镜)
filter属性可以应用于所有元素,在SVG中,它适用于除<defs>元素外的容器元素和所有图形元素。此属性不是继承属性,其计算值为指定值,动画类型为滤镜函数列表。
用户4547779
2024/10/30
2380
CSS3 filter(滤镜)
CSS3 Filter 特效应用
Filters主要是运用在图片的一些特效,也可以应用到一些视频上面。 常被称为滤镜 浏览器支持:     目前来说,我知道的是webkit可以较好的支持 下面来看看各种效果: 有以下几种效果可以使用
py3study
2020/01/14
6110
css3 filter滤镜属性使用
最近在修改内网门户的时候,恰好遇到了需要使用滤镜的地方;刚开始用的是两张图片;鼠标滑过背景变成渐变;图标切换;但是后台配置了图标后;导致鼠标滑过图标不能正常切换;于是就想到了滤镜的效果来处理。所以顺便学习了一下常用的滤镜效果。
微芒不朽
2022/04/28
1.3K0
b站全灰,但我一下把它弄回来了——css 滤镜
首先,职业下意识就打开了控制台。为什么呢?是想看看怎么实现的,是css自定义属性吗?是引入一份css吗?是预处理器修改全局变量吗?结果,打开控制台,浏览了一下,最后定位发现在于一行css代码,关掉就变成彩色了
lhyt
2019/12/17
2.3K0
b站全灰,但我一下把它弄回来了——css 滤镜
简单说 CSS滤镜 filter属性
注意: 这个 drop-shadow 与 box-shadow 都是在说阴影,但还是有区别的,看下图。
FEWY
2019/05/27
8270
毛玻璃 CSS 特效的兼容性方案探究
UI 小姐姐非要让我在 Android 系统自定义的 Webview 上支持实现我们俗称的“毛玻璃”效果,说是一定要实现,不实现这种效果就失去了设计的灵魂,奈何我百般解释,她就要,就要,要!
小东同学
2022/07/29
2K0
毛玻璃 CSS 特效的兼容性方案探究
CSS常用滤镜属性讲解
但是我们发现图片的边缘也模糊了 如何解决这个问题,也很简单.只要在外面包一层div 设置超出隐藏就行了
心安事随
2024/07/29
2440
CSS常用滤镜属性讲解
CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
一、前言                                  IE特有的滤镜常常作为CSS3各种新特性的降级处理补充,而Adobe转向HTML5后与Chrome合作推出CSS3的Filter特性,因此当前仅Webkit内核的浏览器支持CSS3 Filter,而FF和IE10+则需要使用SVG滤镜(svg effects for html)或Canvas作为替代方案处理了,而IE5.5~9则使用IE滤镜、JS+DIV或VML处理!本篇为先占个坑,以后慢慢填^_^!!!   CSS3 Filter
^_^肥仔John
2018/01/18
2K0
CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
CSS3 滤镜 -webkit-filter 的介绍和使用
大家可能对 Instagram 这款 iPhone APP 上的滤镜效果很感兴趣,其实 CSS3 开始也有滤镜(不是 IE 的那种滤镜),这些滤镜效果最初是用于 SVG 的,W3C 将其引入到 CSS3 中,然后制定了 CSS Filter Effects 1.0 的规范,Webkit 率先支持了它。
Denis
2023/04/14
5940
CSS3 滤镜 -webkit-filter 的介绍和使用
你所不知道的 CSS 滤镜技巧与细节
承接上一篇你所不知道的 CSS 动画技巧与细节,本文主要介绍 CSS 滤镜的不常用用法,希望能给读者带来一些干货! 系列 CSS 文章汇总在我的 Github ,持续更新,欢迎点个 star 订阅收藏。 OK,下面直接进入正文。本文所描述的滤镜,指的是 CSS3 出来后的滤镜,不是 IE 系列时代的滤镜,语法如下,还未接触过这个属性的可以先简单到 MDN -- filter 了解下: { filter: blur(5px); filter: brightness(0.4); filt
Sb_Coco
2018/05/28
1.1K0
CSS3滤镜效果可在动画中使用
<!doctype html> <html> <head> <style> img{display:block;} .box{width:600px;} .box img{width:100%;} /*灰度效果*/ @keyframes changeGrayscale{ from{-webkit-filter:grayscale(0%);} to{-webkit-filter:grayscale(100%);} } .filter_grayscale{animation:changeGraysca
用户1730674
2018/05/02
1.3K0
CSS3滤镜效果可在动画中使用
JavaScript|你不知道的CSS属性-Filter(滤镜)
当在拍照、p图时,有一个东西必不可少那就是滤镜,适当地运用滤镜可以使图片更加的赏心悦目,而作为网页的美化技术来说,CSS同样也具有滤镜的属性。CSS 3 Filter属性就提供了相当于滤镜的模糊和改变元素颜色的功能,使图像产生更加绚丽多彩的效果。接下来就来学习一下CSS3的Filter属性。
算法与编程之美
2020/03/26
1.4K0
JavaScript|你不知道的CSS属性-Filter(滤镜)
什么? CSS 阴影竟然还有这种操作 !
本文由 IMWeb 社区 imweb.io 授权转载自腾讯内部 KM 论坛,原作者:cocoqiao。点击阅读原文查看 IMWeb 社区更多精彩文章。 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧(https://www.cnblogs.com/coco1s/p/5592136.html),介绍了一些关于 box-shadow 的用法。 最近一个新的项目,CSS-Inspiration(https://github.com/chok
用户1097444
2022/06/29
5330
什么? CSS 阴影竟然还有这种操作 !
5分钟实现漂亮的CSS加载动画,纯CSS实现加载动画
视频地址:https://www.bilibili.com/video/BV1D5411H7Tc
AlbertYang
2020/12/31
2.5K0
巧用 CSS3 filter(滤镜) 属性
filter 属性定义了元素(通常是<img>)的可视效果(例如:模糊与饱和度)。
唐志远
2022/10/27
1.6K0
巧用 CSS3 filter(滤镜) 属性
与我一起学css3:background-size,-clip
大家好,今天与大家一起学习分享css3中的background-size,background-clip使用与实践。
RobinsonZhang
2018/08/28
7100
与我一起学css3:background-size,-clip
相关推荐
「趣学前端」filter滤镜,CSS的PS特技
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验