高级CSS filters

2023-12-20 01:10
文章标签 css 高级 frontend filters

本文主要是介绍高级CSS filters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Winter(我) Is Coming…

在上一篇提到,filter有一个高斯模糊效果,类似于iPhone手机从下往上滑的那个功能的背景(我知道我没说明白,这次上图来解释,一看就了)

这里写图片描述 这里写图片描述

嗯就是图二介玩应的效果,图片转载…

这种效果早期的CSS是现实挺困难的,在早些年的时候,对filter规范就有支持,但是实在SVG标签上有这个属性,而且只支持Firefox浏览器,并且只能在运行在HTML。

首先能想到的是CSS的filter中的blur(),或者SVG中的filter,但这都不是新特性,什么新特性?

backdrop-filter

backdrop-filter出赖的效果和filter没有差别,但是有一个问题,在SVG上得到的filter效果,只能使用在SVG元素上;而filter使用在元素上,会直接影响其后代所有元素。

那么问题来了,如果只需要对元素的背景做filter效果,怎么破?这个时候就突显了backdrop-filter的重要性啦~

在写的过程中,顺便加了个点动画效果,有一段日子没接触animation了

div部分

<div id="elem"></div><p class="aligncenter"><img src="http://lorempixel.com/400/150/food/8" alt=""></p>

css

#elem {position: absolute;left: 0; right: 0; top: 50px;margin: auto;width: 200px;height: 200px;border-radius:46px;background: rgba(0,0,0,.2);animation: move 10s infinite linear;
}
@keyframes move {0% {transform: rotate(360deg);border-radius:0;}50%{transform: rotate(0deg);border-radius:46px;top:10px;}100%{transform: rotate(360deg);border-radius:0;}
}html {font: 1em sans-serif;
}
label {display: block;
}
.aligncenter {text-align: center;
}

每一个元素到达顶部header下面都会有一个blur(5px)的高斯模糊效果:

div

<h1>iOS blurred style with <code>backdrop-filter</code></h1><div class="Box"><p class="Box-header">Header bar</p><div class="Box-texts"><p class="Box-text">Who is that guy. It's already mutated into human form, shoot it. It's cold, damn cold. Ha, ha, ha, Einstein, you little devil. Einstein's clock is exactly one minute behind mine, it's still ticking. Hey, Doc, we better back up, we don't have enough roads to get up to 88. Yet.</p><p class="Box-text">What's going on? Where have you been all week? What? Uh Doc, uh no. No, don't be silly. Believe me, Marty, you're better off not having to worry about all the aggravation and headaches of playing at that dance. Oh, oh a rematch, why, were you cheating?</p><p class="Box-text">About 30 years, it's a nice round number. Now, now, Biff, now, I never noticed any blindspot before when I would drive it. Hi, son. C'mon, he's not that bad. At least he's letting you borrow the car tomorrow night. Hey Marty, I'm not your answering service, but you're outside pouting about the car, Jennifer Parker called you twice. Watch it, Goldie.</p></div></div><p>Works with Safari 9, iOS 9</p>

scss

html {font: 1em/1.4 sans-serif;text-align: center;
}
* {box-sizing: border-box;
}::-webkit-scrollbar {display: none;
}.Box {position: relative;width: 300px; height: 400px;overflow: hidden;margin: auto;background: url(https://unsplash.imgix.net/photo-1417962798089-0c93ceaed88a?fit=crop&fm=jpg&h=400&q=75&w=300);border: 1px solid #111;
}.Box-header {position: absolute;top: 0; left: 0; right: 0; z-index: 1;line-height: 60px;margin: 0;font-size: 1.4em;font-weight: bold;background: rgba(255,255,255,.95);
}/* effect: see through the header bar */
@supports (-webkit-backdrop-filter: none) {.Box-header {top: -5px; left: -5px; right: -5px;line-height: 65px;background: rgba(255,255,255,.6);-webkit-backdrop-filter: brightness(1.5) blur(4px);}
}.Box-texts {height: 400px;padding-top: 50px;overflow: auto;-webkit-overflow-scrolling: touch;
}.Box-text {text-align: left;padding: 1em;color: #fff;text-shadow: 0 1px 1px rgba(0,0,0,.8);
}

在上面的示例中,使用了@supports属性来做一个条件判断,当浏览器支持backdrop-filter属性,就有效果:

我的图:
这里写图片描述

因为到目前为止仅有Safari 9浏览器支持,如果您想在浏览器中看到相应的效果,可以下载Webkit Nightly浏览器。(如果你的电脑是windows 那就发布之后用苹果手机看吧)

在使用backdrop-filter时,有一些小细节需要注意:

  1. 运用backdrop-filter元素的背景应该使用半透明,不然永远看不到效果
  2. 当backdrop-filter属性和裁剪属性(如border-radius、mask、clip-path等)结全在一起使用时,会有Bug产生
  3. backdrop-filter可以创建一个堆栈文本(Stacking Context),类似于opacity属性一样
    可以配合动画属性animation一起使用
    4.到目前为止,仅有Safari浏览器支持,而且还需要添加前缀:-webkit-backdrop-filter,如果你使用autoprefixer这样的插件,无需考虑前缀相关事项

浏览器兼容性:
可以通过CanIUse查看各浏览器厂商对backdrop-filter的兼容:

这里写图片描述

filter()

如果你使用过这个属性制作一些效果,一定有发现过,他会直接影响其后代元素,有点类似于opacity(比如说你用opacity写背景半透明,这个背景盒子里又有文字,那么这个元素一定会影响子元素,就是说,你的文字,也会是半透明,要解决的话,只能再写一个备有背景颜色盒子,把文字写在这个盒子里,然后定位上去,是的就是这么麻烦)。
但很多时候,只是希望元素的背景做效果调整,又不希望他会影响其他元素。而且又没有backdrop-filter属性的情形之下,filter()就显得格外的重要。

在继续往下阅读之前,你要注意一点,filter()并不等于以前介绍过的filter属性。简单的理解,一个是函数,一个是属性。那么我们今天要说的是filter()函数。为了能更好的与filter属性区分,filter()函数接受两个参数:

filter(<url>, <filter-function-list>)

url 指的是一个图像
filter-function-list 是指过滤器
结合使用 就是会返回一个处理过的图像

.element { background: filter(url(zero/1.jpg), blur(5px)); 

注意事项:
1. 规范中定义的过滤函数
2. 和background-size属性一起使用会有Bug
3. 支持动画
3. 需要添加前缀:-webkit-filter()

总结,总之一句话,期待浏览器都支持吧,这样可以通过一行简单的CSS代码就能实现很多特殊(依赖于图片)效果。

这篇关于高级CSS filters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514355

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密