< CSS小技巧:filter滤镜妙用>

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在这里插入图片描述

文章目录


👉 前言

在前端开发中所有页面都是以渲染的方式通过HTML + CSS渲染出来的。本质来说就是一些可以根据逻辑互动的图形元素组成而在有些时候我们往往需要拿我们对图片的理解去实现一些样式。为此CSS中存在filter滤镜这个属性去实现一些比较特殊的图形渲染方式。

👉 简述

基本概念CSS滤镜是对常规的CSS的一个扩展子集可以使应用对象(文字,图片,HTML元素…)产生类似于PhotoShopPS中的模糊,通透,边缘发光等效果。

作用: 合理的使用CSS滤镜,可以减少网页使用图片的数量,从而减少网页大小;也可以通过直接修改CSS中滤镜的参数或者用JS动态的修改CSS滤镜参数,从而达到快速更新页面的效果。CSS滤镜丰富了网页作为多媒体向用户提供丰富多彩的资讯内容的展现方式。

👉 基本语法及案例

CSS filter 属性将模糊或颜色偏移等图形效果应用于元素形成滤镜滤镜通常用于调整图像背景和边框的渲染。它的值可以为 filter 函数 <filter-function> 或使用 url 添加的svg滤镜。

》语法简述

filter: <filter-function> [<filter-function>]* | none
filter: url(file.svg#filter-element-id)

可以用于 filter点击跳转文档backdrop-filter点击跳转文档 属性。

它的数据类型由下列过滤器函数之一指定。每个函数需要一个参数如果参数无效则滤镜不会生效。

以下是对滤镜函数含义的解释

  • blur(CSS单位值)模糊图像
  • brightness(百分比 / 值) 让图像更明亮或更暗淡大于1 / 100% 曝光 小于则反之
  • contrast(百分比)增加或减少图像的对比度作用和brightness差不多
  • drop-shadow(x偏移, y偏移, 模糊大小, 色值)在图像后方应用投影
  • grayscale(百分比)将图像转为灰度图
  • hue-rotate(度数deg)改变图像的整体色调
  • invert(百分比)反转图像颜色
  • opacity(百分比)改变图像透明度和平时用的透明度一样
  • saturate(百分比)超饱和或去饱和输入的图像
  • sepia(百分比)将图像转为棕褐色

》案例

/* 使用SVG filter */
filter: url("filters.svg#filter-id");
/* 使用filter函数 */
filter: blur(5px);
filter: brightness(1.5);
filter: contrast(.5);
filter: grayscale(100%);
filter: hue-rotate(120deg);
filter: invert(1.5);
filter: opacity(.6);
filter: saturate(3);
filter: sepia(1);
/* 多个filter */
filter: contrast(175%) brightness(3%);
/* 不使用filter */
filter: none;
/* 全局变量 */
filter: inherit;
filter: initial;
filter: unset;

效果图
在这里插入图片描述

👉 拓展

1. drop-shadow 更加智能的阴影效果

在给元素添加阴影的时候我们一般采用 box-shadow 属性通过 box-shadow(x偏移, y偏移, 模糊大小, 阴影大小, 色值, inset) 的语法形式很容易为元素添加阴影效果但 box-shadow 也有一个缺点就是在给透明图片添加阴影效果时无法穿透元素只能添加到透明图片元素的盒模型上。

这个时候filter 属性的 drop-shadow 方法就能很好的解决这个问题用它添加的阴影可以穿透元素而不是添加到元素的盒模型边框上。

drop-shadow 添加的阴影除了可以穿透透明元素外阴影效果和 box-shadow 是相同的如果浏览器支持硬件加速的话使用 filter 添加的阴影效果会更加逼真。

tips: 注意drop-shadow需要源图片是透明背景的png

在这里插入图片描述

.box-shadow {
  box-shadow: 1px 1px 15px rgba(0, 0, 0, .5);
}
.drop-shadow {
  filter: drop-shadow(1px 1px 15px rgba(0, 0, 0, .5));
}

2. 网页置灰

发生重大灾害事故或其他哀悼日时国企政府网站往往有网页全部置灰的需求。或者很多网页中有鼠标 hover 悬浮到灰色元素上时变成彩色的样式效果。此时就可以使用 filter 属性的 grayscale 方法实现它可以调整元素灰度通过给页面元素设置 filter: grayscale(100%) 就可将页面元素置灰。

或者拓展一下思路配合Javascript实现鼠标探照灯的功能网页全局置灰鼠标悬浮区域圆圈范围内grayscale(0) 不置灰。

以下示例中body 标签下添加样式全局置灰。实际开发可根据具体情况置灰某个区域。
在这里插入图片描述

在这里插入图片描述

当需要紧急置灰网页时上线一段时间往往需要撤掉这个功能我们还可以在首次上线时添加以下类似的方法来控制置灰效果的自动上下线时间这样到达预定时间就可自动撤去不用反复部署。

例如 国家哀悼日一整天前天的235959 至 隔天 000000。

(function setGray() {
  var endTime = Date.parse("Apr 06 2077 00:00:01");
  var timestamp = Date.parse(new Date());
  if (timestamp <= endTime) {
    document.querySelector('body').classList.add('gray');
  }
})();

3. 元素强调、高亮

brightness 方法实现元素高亮的效果可以应用到菜单栏、图片列表 hover 效果来强调鼠标当前悬浮或选中的内容。下面是对一组按钮菜单栏添加 brightness 和 saturate 两个方法通过改变亮度和饱和度来高亮元素。
在这里插入图片描述

.button {
  padding: 0.5em 0.5em;
  background: #E0E0E0;
  border-radius: 3px;
}
.button.dark {
  background: #333;
}
.button:hover:not(.disabled) {
  cursor: pointer;
  border-radius: 3px;
  filter: brightness(110%) saturate(140%);
}
.button.disabled {
  filter: grayscale(100%);
}

4.节省空间提高网页加载速度

实践证明同一图片减小亮度和对比度及色相饱和度之后的体积与原图相比可以减小很大一部分体积空间 2M 左右的图片经过弱化后保存就可以压缩到 1M 左右。

在网页中我们可以使用经过 弱化 的图片然后通过 CSS filter 将其还原。这样就可以达到压缩资源体积提升网页加载速度、提高用户体验的目的。

👉 具体案例网页


参考文献

https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function
https://segmentfault.com/a/1190000040058430

往期内容 💨

🔥 < JavaScript技术分享 大文件切片上传 及 断点续传思路 >

🔥 < 每日技巧 JavaScript代码优化 >

🔥 < 每日知识点关于Javascript 精进小妙招 ( Js技巧 ) >

🔥 <Javascript技巧 Javascript 是个难泡的妞学点技巧征服 “ 她 ” >

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: CSS