Skip to content

所谓的 filter,实际上就是给网页的元素添加上滤镜,从而实现一些特殊的显示效果,例如修改这个元素的透明度,让这个元素变模糊,让这个元素变成黑白色,让这个元素反色,这些效果都可以通过 filter 实现。

滤镜释义
filter:blur(5px)模糊
filter:brightness(2.4)亮度
filter:contrast(200%)对比度
filter:drop-shadow(4px 4px 8px blue)投影
filter:grayscale(50%)灰度
filter:hue-rotate(90deg)色调旋转
filter:invert(75%)反相
filter:opacity(25%)透明度
filter:saturate(230%)饱和度
filter:sepia(60%)褐色

以上是 CSS 3 支持的滤镜,这里我们使用下面的两个图片来测试,网页结构如下:

html
<!DOCTYPE html>
<html lang="cmn-hans">
<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>Document</title>
    <style>
        * {
            margin: 0;
        }
        .grid-box {
            display: grid;
            grid-template: 400px/400px 400px;
            gap: 10px;
        }
    </style>
</head>
<body>
    <div class="grid-box">
        <div class="item">
            <img src="https://picsum.photos/400/400" alt="">
        </div>
        <div class="item filter">
            <img src="https://picsum.photos/400/400" alt="">
        </div>
    </div>
</body>
</html>

效果如图所示:

![Pasted image 20240507203807](/notes-assets/04.CSS3/assets/Pasted image 20240507203807.png)

由于图片使用的是随机生成的,所以每次添加滤镜后刷新图片都不一样。

blur ​

css
.filter {
	filter: blur(20px);
	/*
	blur()函数支持任意长度值,但是不支持百分比值。 blur()函数的参数值表示高斯函数的标准偏差值,可以理解为屏幕上互相融合的像素数量。因此,blur()函数的参数值越大,图像的模糊效果越明显。
	*/
}

![Pasted image 20240507204023](/notes-assets/04.CSS3/assets/Pasted image 20240507204023.png)

css
.filter {
	filter: brightness(2);
	/*brightness()函数的参数值支持数值和百分比值,范围是0到无穷大。参数值0或0%表示纯黑色,参数值1或100%表示正常的亮度,0~1或0%~100%的亮度是线性变化的。随着参数值逐渐大于1或大于100%,元素的亮度也会逐渐提升。*/
}

![Pasted image 20240507204248](/notes-assets/04.CSS3/assets/Pasted image 20240507204248.png)

contrast ​

css
.filter {
	filter: contrast(0.5);
	/*contrast()函数的参数值支持数值和百分比值,范围是0到无穷大。参数值0或0%表示毫无对比度,表现为纯灰色,色值是#808080,使用RGB色值表示为rgb(128,128,128),也就是gray颜色关键字对应的色值。注意,这里说的是纯灰色,图像会直接变成一个灰色色块,而不是图像灰度。参数值1或100%表示正常的对比度。随着参数值逐渐大于1,元素的对比度也会逐渐提升。*/
}

![Pasted image 20240507204528](/notes-assets/04.CSS3/assets/Pasted image 20240507204528.png)

注意,多个滤镜是可以混用的,直接调用多个函数然后用空格隔开即可,注意是空格隔开,而不是逗号,如果用逗号隔开,那么滤镜将失效

drop-shadow ​

使用 drop-shadow () 函数可以给元素设置符合真实世界阴影规则的投影效果。

这个滤镜可以看做是 box-shadow 的升级版,box-shadow 是盒子阴影,如果盒子的边框是虚线,阴影依旧是盒子的阴影,而 drop-shadow 则有显著的不同

![Pasted image 20240507210540](/notes-assets/04.CSS3/assets/Pasted image 20240507210540.png)

以上是对比

语法:filter: drop-shadow(x偏移 y偏移 模糊大小 色值);

注意,多个参数中间没有逗号

  • drop-shadow()函数不支持扩展,因为真实世界的投影是没有所谓的扩展的。
  • drop-shadow()函数没有内投影效果,而box-shadow属性可以使用inset关键字实现内阴影效果。
  • drop-shadow()函数不支持投影叠加,box-shadow属性则允许无限累加投影

grayscale ​

css
.filter {
	filter: grayscale(1);
	/*
	使用grayscale()函数可以实现元素的去色效果,让所有彩色值变成灰度值。grayscale()函数的参数值支持数值和百分比值,范围是0到无穷大。参数值为1或100%的时候表现为完全灰度;参数值大于1或100%的时候也表现为完全灰度。
	*/
}

![Pasted image 20240507211048](/notes-assets/04.CSS3/assets/Pasted image 20240507211048.png)

一些网站在某些日子,比如国家公祭日,会将网页全部设为灰色,就是通过改属性实现的。一些时候我们可能需要点亮图标这些操作,也可以这样实现,从而让设计少设计一张灰色的图片。

hue-rotate ​

hue-rotate()函数可以调整元素的色调,但饱和度和亮度保持不变

hue-rotate()函数的参数值支持角度值

css
.filter {
	filter: hue-rotate(180deg);
}

![Pasted image 20240507211830](/notes-assets/04.CSS3/assets/Pasted image 20240507211830.png)

相当于就是一个色相盘,按照一定的角度去旋转

该属性可以用来做一些动态的色调变化效果

invert ​

invert()函数可以让元素的亮度和色调同时反转 invert()函数的参数值支持数值和百分比值,范围是0到无穷大。

参数值为1或100%的时候图像表现为完全反相。单纯从语法上来说,值可以大于1或者大于100%,但是效果不会再进一步变化。0或0%表示正常的图像表现。

实际上这就是一个反色的效果

css
.filter {
	filter: invert(1);
}

![Pasted image 20240507212139](/notes-assets/04.CSS3/assets/Pasted image 20240507212139.png)

opacity ​

opacity()函数可以改变元素的透明度,效果和opacity属性类似

opacity()函数和opacity属性的区别在于,在部分浏览器中,使用opacity()函数可以启用硬件加速,性能会更好。不过由于opacity属性本身性能就非常好,因此没有任何必要使用opacity()函数。

css
.filter {
	filter: opacity(0.5);
}

![Pasted image 20240507212218](/notes-assets/04.CSS3/assets/Pasted image 20240507212218.png)

saturate ​

saturate()函数可以调整元素的饱和度

saturate()函数的参数值支持数值和百分比值,范围是0到无穷大。参数值0或0%表示毫无饱和度,表现为灰度效果,等同于grayscale(1);参数值1或100%表示正常的饱和度;随着参数值逐渐大于1,元素的饱和度也会逐渐提升。

css
.filter {
	filter: saturate(1.5);
}

![Pasted image 20240507212324](/notes-assets/04.CSS3/assets/Pasted image 20240507212324.png)

sepia ​

sepia()函数可以让元素的视觉效果向褐色靠拢.

sepia()函数的参数值支持数值和百分比值,范围是0到无穷大。当参数值为1或100%,或者大于1或100%时,图像均表现为深褐色;当参数值为0或0%时,图像还是原始效果。

css
.filter {
	filter: sepia(1);
}

![Pasted image 20240507212447](/notes-assets/04.CSS3/assets/Pasted image 20240507212447.png)

很显然,这个滤镜是一个类似于老照片的滤镜

注意,这里都是用图片进行演示,但是 CSS 滤镜不止可以给图片添加,任何 DOM 元素都可以添加,例如给 HTML 元素添加黑白滤镜,就可以实现全页面黑白的效果。

backdrop-filter ​

这个属性和 filter 类似,但是很不一样,filter 能用的滤镜函数,在 backdrop-filter 中都可以用,但是 filter 是直接给元素添加滤镜,而 backdrop-filter 给一个元素加上滤镜之后,并不会在这个元素上生效,而如果透过这个元素去看其他元素,就会产生这个滤镜效果,就类似一个滤镜镜片。

这个属性最典型的应用场景就是毛玻璃效果,如下所示

html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .grid {
        width: 500px;
        height: 500px;
        margin: 0 auto;
        display: grid;
        background-image: url(https://picsum.photos/500/500);
        place-items: center;
      }
      .item {
        width: 300px;
        padding: 20px 10px;
        background-color: rgba(255, 255, 255, 0.5);
        border-radius: 8px;
        backdrop-filter: blur(10px);
      }
    </style>
  </head>
  <body>
    <div class="grid">
      <div class="item">
        Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eum maiores
        cumque modi minima, ut mollitia accusamus! Dolorum praesentium mollitia
        inventore, eius in ipsa totam amet. Beatae eligendi ut sed minima!
      </div>
    </div>
  </body>
</html>

![Pasted image 20240507213324](/notes-assets/04.CSS3/assets/Pasted image 20240507213324.png)

此时就实现了毛玻璃效果。

混合模式 ​

混合模式:元素的内容应该与元素的直系父元素的内容和元素的背景如何混合

混合模式六大类混合模式类型background-blend-modemix-blend-mode
(一)覆盖组normal(默认值。设置正常的混合模式)✅✅
(二)去亮组darken(变暗模式)✅✅
-multiply(正片叠底模式)✅✅
-color-burn(颜色加深模式)✅✅
(三)去暗组lighten(变亮模式)✅✅
-plus-lighter(类似于亮色,但对中色调的影响更大)❌✅
-screen(滤色模式)✅✅
-color-dodge(颜色减淡模式)✅✅
(四)对比组overlay(叠加模式)✅✅
-soft-light(柔光模式)✅✅
-hard-light(强光模式)✅✅
(五)差值组difference(差值模式)✅✅
-exclusion(排除模式)✅✅
(六)色彩组hue(色调混合模式)✅✅
-saturation(饱和度模式)✅✅
-color(颜色模式)✅✅
-luminosity(亮度模式)✅✅

00585b5b1d107e0e3bdfafa96d2d59f2_MD592a50079eb6910921dc4923c1145e344_MD5

  1. normal: 默认值。内容不与背景混合。单纯的覆盖

  2. ** darken(变暗):**两张图在一起,谁亮就把谁丢了。(黑 + 灰) 得到的就是黑,黑色更暗

daff0783f802c41240a2526746205806_MD5

  1. multiply(正片叠底) : 图会更暗 (黑 + 任何 = 黑,白 + 任何 = 任何)

6a2d31bbe679ba388d685b6bfc430455_MD5

  1. color-burn(颜色加深):暗的地方会变暗,甚至变黑,亮的地方不变,用的比较少

b3d2e790ebb820abe66944a3d4fc4f25_MD5

  1. lighten(变亮模式):两张图在一起,谁暗就把谁丢了, 与darken模式相反

6f393536c4cbff626d5d41b53f94712b_MD5

  1. screen(滤色模式):整体颜色变亮(滤白得白,滤黑无效)

43b071aefcf175fb77d05756a8dff10e_MD5

  1. color-dodge(颜色减淡模式):亮的更亮,暗的不管

21b75acad145d8e7b3077d301dab2e46_MD5

  1. overlay(叠加模式): 亮的更亮,暗的更暗(正片叠底和滤色的后代)

c4295e2d5d3c9a4e8a661efd35fb6a2b_MD5

  1. hard-light(强光模式)

0fab289155e294fd77f5a646049994cf_MD5公式一样,取决于顺序。

  1. soft-light(柔光模式):会更柔和

4f252345630253bb175ae9b1dcd59c4d_MD5

  1. difference(差值模式)

70ef5a31ab72d9359f84edb911570b4a_MD5

  1. hue(色相混合模式) : 不改变饱和度和亮度

  2. saturation(饱和度模式):不改变色相和亮度

  3. color(颜色模式):同时改变色相和饱和度

  4. luminosity(亮度模式) :只控制亮度不修改色相和饱和度

以笔记为镜,可以知得失