css篇-用filters属性全网站变灰和给灰色图片染色效果

用filters属性全网站变灰和给灰色图片染色效果

昨天清明节日很多网站的都变灰色的,主要是利用filter CSS属性将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像,背景和边框的渲染。如下

像博客园的首页:

一、filter属介绍

下面简单介绍介绍一下filter各种属性

上原图:

 

filte: <blur()> = blur( <length> )

给图像设置高斯模糊。“radius”一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起,所以值越大越模糊;如果没有设定值,则默认是0;这个参数可设置css长度值,但不接受百分比值。

 filter: blur(5px);

filte: <brightness()> = brightness( <number-percentage> )

给图片应用一种线性乘法,使其看起来更亮或更暗。如果值是0%,图像会全黑。值是100%,则图像无变化。其他的值对应线性乘数效果。值超过100%也是可以的,图像会比原来更亮。如果没有设定值,默认是1。

filter: brightness(0.4);

filter: <contrast()> = contrast( [ <number-percentage> ] )

调整图像的对比度。值是0%的话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用更低的对比。若没有设置值,默认是1。

filter: contrast(200%);
 
filter: contrast(1%);
 
filter: <drop-shadow()> = drop-shadow( <length>{2,3} <color>? )

给图像设置一个阴影效果。阴影是合成在图像下面,可以有模糊度的,可以以特定颜色画出的遮罩图的偏移版本
<offset-x> <offset-y> (必须)
这是设置阴影偏移量的两个 <length>值. <offset-x> 设定水平方向距离. 负值会使阴影出现在元素左边. <offset-y>设定垂直距离.负值会使阴影出现在元素上方。.查看 <length>可能的单位.
如果两个值都是0, 则阴影出现在元素正后面 (如果设置了 <blur-radius> and/or <spread-radius>,会有模糊效果).
<blur-radius> (可选)
这是第三个 <length>值. 值越大,越模糊,则阴影会变得更大更淡.不允许负值 若未设定,默认是0 (则阴影的边界很锐利).
<spread-radius> (可选)
这是第四个 <length> 值. 正值会使阴影扩张和变大,负值会是阴影缩小.若未设定,默认是0 (阴影会与元素一样大小).
注意: Webkit, 以及一些其他浏览器 不支持第四个长度,如果加了也不会渲染。
<color> (可选)
查看 <color>该值可能的关键字和标记。若未设定,颜色值基于浏览器。在Gecko (Firefox), Presto (Opera)和Trident (Internet Explorer)中, 会应用 color属性的值。另外,如果颜色值省略,WebKit中阴影是透明的。

filter: drop-shadow(16px 16px 20px blue);
 
<grayscale()> = grayscale( <number-percentage> )
将图像转换为灰度图像。值定义转换的比例。值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0。
filter: grayscale(100%);
 
filter:<hue-rotate()> = hue-rotate( <angle> )
给图像应用色相旋转。“angle”一值设定图像会被调整的色环角度值。值为0deg,则图像无变化。若值未设置,默认值是0deg。该值虽然没有最大值,超过360deg的值相当于又绕一圈。
filter: hue-rotate(90deg)
 
<invert()> = invert( <number-percentage> )
反转输入图像。值定义转换的比例。100%的价值是完全反转。值为0%则图像无变化。值在0%和100%之间,则是效果的线性乘子。 若值未设置,值默认是0。
filter: invert(100%)
 

 

<saturate()> = saturate( <number-percentage> )
转换图像饱和度。值定义转换的比例。值为0%则是完全不饱和,值为100%则图像无变化。其他值,则是效果的线性乘子。超过100%的值是允许的,则有更高的饱和度。 若值未设置,值默认是1。

filter: saturate(200%)


<sepia()> = sepia( <number-percentage> )

将图像转换为深褐色。值定义转换的比例。值为100%则完全是深褐色的,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0。

filter: sepia(100%)

二、全网变灰效果

把一下代码加入加入你的网站试试吧
html {
filter: grayscale(100%);
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
-webkit-filter: grayscale(1);
}

 

效果如下:

三、染色效果

拿一个灰色的图为例

原图:

 3.1、基于滤镜的方式

css代码片段
img{
        width: 700px;
        height: 200px;
        filter: sepia(1) saturate(200%) hue-rotate(295deg);
      }

html代码片段

<p>
        <img src="../../../images/6.png" alt="">
    </p>

 效果:

      img{
        width: 700px;
        height: 200px;
        transition: .5s filter;
        filter: sepia(1) saturate(200%) hue-rotate(295deg);
        
      }
      img:hover, img:focus{
       filter: none;
      }

3.2、基于混合模式的方案

用过Ps的都应该知道对混合模式比较熟悉了。当两个元素叠加的时,“混合模式”控制了上层元素颜色与下层颜色进行混合模式的方。用它实现染色效果需要用到混合模式luminosity。这种混合模式会保留上层元素的HSL亮度信息,并从他的下层吸取色相饱和度信息

p{
 padding: 10px;
 background: hsl(335, 100%, 50%);
}
img{
 mix-blend-mode: luminosity;
}

 

第二种, 不用图片元素,而是用<div>元素-------把这个元素的第一层背景设置成要染色的的图片,并把第二层的背景设置为我们想要的主色调

滤镜的方式缺点是像是褪色一般,加上saturate()滤镜增加饱和度又会得到一种不自然、过度风格化的效果。混合模式则是一种更好的方式mix-blend-mode整个元素向下进行混合,而不管下层是什么。滤镜模式是可动画,混合模式不可。
background-blend-mode整个背景与下层背景进行混合。当只有一个背景图像和一个透明背景色:不会出现任何效果!

补充知识链接:

滤镜效果:

https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter

https://www.w3.org/TR/filter-effects

图像混合效果:

https://www.w3.org/TR/compositing/

CSS过渡:

https://www.w3.org/TR/css-transitions/

 

 

 

 

 
posted @ 2020-04-05 22:47  pikachuWorld  阅读(939)  评论(0编辑  收藏  举报