前端如何实现网页变灰功能?

news2024/9/22 21:34:28

今天来从前端的角度看看网页置灰是如何实现的,以及相关使用技巧!

实现思路

先来看看一些主流网站是如何实现置灰的:

  • BiliBili:

  • 淘宝:

  • 京东:

  • 掘金:

可以看到,这些网站实现置灰的方式都完全一样,但都大同小异。本质上都是使用了 CSS 中的 filter 属性。下面是 MDN 对 filter 属性的解释:

CSS 属性 filter 将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像、背景和边框的渲染。

简单来说,filter 属性就是用来给元素添加不同的滤镜。该属性中支持传入多种 Filter 函数,其中 grayscale() 函数就是用于置灰的关键。grayscale() 函数将改变输入图像灰度,该函数有一个参数,表示转换为灰度的比例。当值为 100% 时,完全转为灰度图像;当值为 0% 时图像无变化。值在 0% 到 100% 之间,则是效果的线性乘数。若未设置值,默认是 0。

因此,只要将页面 html 元素设置以下样式即可实现页面置灰:

html {
     filter: grayscale(100%);
}
复制代码

那为啥很多网站的置灰不止这一条呢?可以看到京东的置灰代码如下:

html.o2_gray {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    -webkit-filter: gray;
    filter: gray;
    -webkit-filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
    filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
}
复制代码

其实这些属性最终的实现效果都是一样的,它们为了对 filter 属性进行兼容。filter 属性是 CSS3 增加的属性,在不同浏览器以及低版本浏览器上,filter 属性的兼容性不尽相同:

对于上面的代码,其中:

  • -webkit-filter: 带有 webkit 前缀可以在 webkit 内核的浏览器中生效;
  • -moz-filter:带有 moz 前缀可以在 Firefox 浏览器中生效;
  • -ms-filter:带有 ms 前缀可以在 IE 浏览器生效;
  • -o-filter:带有 o 前缀可以在 Opera 浏览器生效;
  • 最后三行都是为了兼容 IE 内核的浏览器。

那如何实现动态添加呢?只需要将这些滤镜属性写在一个类中,在需要的时候动态的将该类型添加到 html 标签上即可。

.gray {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    -webkit-filter: gray;
    filter: gray;
    -webkit-filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
    filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
}
复制代码

相关拓展

接下来我们看看 filter 属性还有哪些实用的属性值!

filter: blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | sepia() | saturate() | url();
复制代码

(1)blur():模糊

blur() 函数用于设置元素**模糊效果,**它将高斯模糊视觉效果应用于元素。此函数接受一个 CSS 长度值来确定屏幕上有多少像素需要相互融合以生成模糊结果。 传递的 CSS 长度值越大,应用到元素的模糊度就越高。如果不提供值,则使用默认值 0。

.image {
  -webkit-filter: blur(0|2px|5px); 
  filter: blur(0|2px|5px);
}
复制代码

下面是使用三个值时对应的效果:

这个属性可以用来实现常见的毛玻璃效果。

(2)brightness():亮度

brightness() 函数可用于调整图像的亮度级别,使其看起来更亮或更暗。当值为 0% 时,会产生全黑图像。值为 100% 或 1 会使图像保持其原始亮度级别。大于或小于 100% 或 1 的值决定图像的暗度或亮度。

.image {
  -webkit-filter: brightness(50%|100%|200%); 
  filter: brightness(50%|100%|200%);
}
复制代码

下面是使用三个值时对应的效果:

(3)contrast():对比度

contrast() 函数用于调整图像的对比度,也就是调整图像最暗和最亮部分之间的亮度差异 。 它接受百分比或小数值来确定图像的对比度级别——值为 0 会导致完全灰色的图像。高于 100% 和 1 的值会增加对比度,而低于 100% 的参数会降低图像的对比度。

.image {
  -webkit-filter: contrast(50%|100%|200%); 
  filter: contrast(50%|100%|200%);
}
复制代码

下面是使用三个值时对应的效果:

(4)opacity():不透明度

opacity() 函数将透明效果应用于图像。它接受百分比或小数值来决定应用于图像的透明度。0% 或 0 的不透明度将产生完全透明的元素。100% 不透明度将显示不透明。将不透明度设置在 0% 和 100% 之间将使元素或图像部分透明。

.image {
  -webkit-filter: opacity(10%|40%|80%); 
  filter: opacity(10%|40%|80%);
}
复制代码

下面是使用三个值时对应的效果:

那这个不透明度滤镜和CSS中的 opacity 属性有啥区别的?它们都用于控制元素的透明度。但是 filter 属性会启动硬件加速。浏览器会将计算任务卸载到图形处理单元 (GPU) — 一种旨在加速系统内图形渲染的专用处理器。这会提高浏览器的效率并释放 CPU 来执行其他任务。

(5)sepia() :棕褐色

sepia() 函数可以为图像添加柔和的褐色色调,使图像看起来更温暖、更复古。它类似于使用灰度滤镜,但色调为褐色。它接受 0 到 1 之间的小数值,或最大为 100% 的百分比值。值为 0 会使图像保持不变。值为 100% 或 1 会将图像完全变为棕褐色,而介于 0% 和 100% 之间的值会使图像的色调介于其原始颜色和完全棕褐色之间。

.image {
  -webkit-filter: sepia(10%|40%|80%); 
  filter: sepia(10%|40%|80%);
}
复制代码

下面是使用三个值时对应的效果:

(6)drop-shadow():阴影

drop-shadow() 函数用于增加图像的阴影,和 box-shadow 的作用类似,使图像看起来更加立体。

drop-shadow() 函数接受四个参数:

  • <offset-x>:长度值,指定元素和投影之间的水平距离。正值将阴影置于元素右侧,负值将阴影置于左侧。
  • <offset-y>:长度值,指定元素和投影之间的垂直距离。正值将阴影置于元素下方,负值将阴影置于其上方。
  • <blur-radius>: 阴影的模糊半径指定为 CSS 长度单位。值越大,阴影变得越模糊。如果未指定,则默认为 0,产生清晰且不模糊的阴影。不允许使用负值。
  • <color>:阴影的颜色。如果未指定,则默认为黑色。
.image-1 {
  filter: drop-shadow(0);
}

.image-2 {
  -webkit-filter: drop-shadow(4px 4px 10px yellow);
  filter: drop-shadow(4px 4px 10px yellow);
}

.image-3 {
  -webkit-filter: drop-shadow(8px 8px 12px yellow);
  filter: drop-shadow(8px 8px 12px yellow);
}
复制代码

下面是使用三个值时对应的效果:

(7)saturate():饱和度

saturate() 函数用于改变元素中颜色的饱和度。饱和元素的颜色比较鲜艳;对于曝光不足的图像可以增加饱和度,反之亦然。 饱和度可以用百分比表示,0% 表示完全不饱和,100% 表示与原图像一样。

.image {
  -webkit-filter: saturate(10%|150%|350%); 
  filter: saturate(10%|150%|350%);
}
复制代码

下面是使用三个值时对应的效果:

(8)注意事项

上面介绍的滤镜都是单个使用的,其实 filter 属性支持设置多个滤镜,其语法如下:

.multiple-effects {
    filter: blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();
}
复制代码

CSS 会根据它们出现的顺序将它们应用于元素:

img {
   filter: opacity(50%) drop-shadow(20px 10px 0px black);
}
复制代码

除此之外,filter 属性还接受以下两个值:

  • initialfilter 属性的默认值,会解析为 none
  • inherit:从元素的直接父级计算的 filter 属性的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络学习笔记(Ⅰ):计算机网络体系结构

目录 1 概述 1.1 基础概念 1.计算机网络 2.功能 3.组成 4.分类 1.2 标准化工作及相关组织 1.标准化工作 2.相关组织 1.3 性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 2 计算机网络结构 2.1 分层结构 1.分层原则 2.分层结…

专业/户籍不限!腾讯/华为招聘提到的PMP证书!多行业适用

很多有项目管理需求的小伙伴&#xff0c;不知道学PMP到底需要了解些啥&#xff0c;除了考什么&#xff0c;还有就是在报考以及后续续证方面都是需要具体了解清楚的&#xff0c;特别是想要自学PMP的宝子们。这些一定要了解清楚。 这篇直接告诉你PMP的全部相关内容&#xff01;&…

[附源码]Python计算机毕业设计Django良辰之境影视评鉴系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

Python实战案例,Streamlit+Plotly模块,Python制作销售数据可视化看板,展示分析一步到位

前言 今天给大伙介绍一个用Python制作销售数据大屏的方法。 Let’s start happily 开发工具 Python版本&#xff1a; 3.6.4 相关模块&#xff1a; Streamlit模块 Plotly模块 pandas模块 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需要的相关模块即可。…

【大数据入门核心技术-Zookeeper】(一)Zookeeper基本原理

目录 一、Zookeeper是用来做什么的 二、Zookeeper的角色 1、Leader 2、Follower 3、Observer 一、Zookeeper是用来做什么的 首先需要了解zookeeper是什么&#xff0c;zookeeper是一个分布式协调服务。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制&#…

[附源码]计算机毕业设计JAVA学生档案管理系统论文

[附源码]计算机毕业设计JAVA学生档案管理系统论文 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

[附源码]Python计算机毕业设计SSM酒店停车管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]Python计算机毕业设计Django海滨学院学生大创项目申报与审批系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

微服务框架 SpringCloud微服务架构 10 使用Docker 10.5 容器命令案例2

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构10 使用Docker10.5 容器命令案例210.5.1 直接开干10.5.2 总结10 使用Docke…

【Matplotlib绘制图像大全】(六):Matplotlib使用subplot()绘制多个子图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

【博客550】k8s乐观锁机制:控制并发请求与数据一致性

k8s乐观锁机制&#xff1a;控制并发请求与数据一致性 1、乐观锁与悲观锁 悲观锁 悲观并发控制&#xff08;又名“悲观锁”&#xff0c;Pessimistic Concurrency Control&#xff0c;缩写“PCC”&#xff09;是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修…

Compose 动画艺术探索之动画规格

本篇文章是此专栏的第四篇文章&#xff0c;如果想阅读前三篇文章的话请点击下方链接&#xff1a; Compose 动画艺术探索之瞅下 Compose 的动画Compose 动画艺术探索之可见性动画Compose 动画艺术探索之属性动画 动画规格在上一篇文章中提到过&#xff0c;不过上一篇文章中说的…

AIGC , 超级热点 or 程序员创富新起点?

作者 | 闫辉 责编 | 朱珂欣出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;对于程序员而言&#xff0c;常常能在新赛道上创造出无限的奇迹。随着今年 8 月 Stable Diffusion&#xff08;SD&#xff09;的正式开源&#xff0c;AI-Generated Content&#…

46. 全排列

一次一粒沙&#xff0c;一次一件事。 ——《人性的优点》 46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],…

SpringBoot 接口加密解密,新姿势!

1. 介绍 在我们日常的Java开发中&#xff0c;免不了和其他系统的业务交互&#xff0c;或者微服务之间的接口调用 如果我们想保证数据传输的安全&#xff0c;对接口出参加密&#xff0c;入参解密。 但是不想写重复代码&#xff0c;我们可以提供一个通用starter&#xff0c;提…

Spring Boot 还在用 if 校验参数?

本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理&#xff0c;死磕到底&#xff01; 简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api&#xff0c;但没有提供实现。hibernate validation是对这个规范的实现&#xff0c;并增加了校验注解如…

Linux内核--链表结构

一、前言 Linux内核链表结构是一种双向循环链表结构&#xff0c;与传统的链表结构不同&#xff0c;Linux内核链表结构仅包含前驱和后继指针&#xff0c;不包含数据域。使用链表结构&#xff0c;仅需在结构体成员中包含list_head*成员就行&#xff1b;链表结构的定义在linux…

ABAP学习笔记之——第八章:报表程序

一、程序属性 创建程序类型&#xff1a; 状态&#xff1a; 根据程序状态不能使用特定 Utility。例如&#xff0c;选择系统程序&#xff0c;则不能使用 debug 功能 权限组&#xff1a; 分配程序执行/修改相关的权限组。若是安全相关程序有必要设置权限组。 逻辑数据库&…

C/C++中的内存管理

目录 C/C内存分布 C语言中动态内存管理方式 malloc/calloc/realloc和free C内存管理方式 new/delete操作内置类型 new/delete操作自定义类型 operator new 与 operator delete new/delete实现原理 内置类型 自定义类型 定位new表达式&#xff08;placement-new&…

[附源码]Python计算机毕业设计Django路政管理信息系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…