高级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

相关文章

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6