likes
comments
collection
share

css中的mask,clip,颜色混合及offset不规则运动

作者站长头像
站长
· 阅读数 59

一. mask遮罩

1. mask-image设置遮罩使用的图像

语法:mask-image:none | <image> | <mask-source>

  • none是默认值,表示默认无遮罩图片
  • <image>表示图像数据类型,包括css渐变图像,url()函数,image-set()函数,cross-fade()函数element()函数
  • <mask-source>表示遮罩元素类型,主要指SVG遮罩元素

2. mask-mode设置遮罩模式

mask-mode支持以下三种属性值:

mask-mode:match-source 默认值

mask-mode:luminance 表示基于亮度判断是否要进行遮罩

mask-mode:alpha 表示基于透明度判断是否要进行遮罩

mask-image支持多图片,因此mask-mode也支持多属性值: mask-mode:alpha , match-source

3. mask-repeat类似background-repeat

支持以下一些单属性值:

mask-repeat:repeat-x;水平方向平铺

mask-repeat:repeat-y; 垂直方向平铺

mask-repeat:repeat; 默认值

mask-repeat:no-repeat; 不平铺,只有一个图像位于左上角

mask-repeat:round;尽可能靠在一起,没有间隙,同时不剪裁,这意味着图像可能会产生缩放效果

mask-repeat:space;尽可能平铺 同时不进行剪裁

mask-image支持多图片,因此mask-repeat也支持多属性值: mask-repeat:space,repeat-x;

4. mask-position类似background-position

表现与background-position基本一致

5. mask-clip类似background-clip

表现与background-clip基本一致,默认值都是border-box

属性值如下:

mask-clip:border-box;

mask-clip:padding-box;

mask-clip:content-box;

mask-clip:no-clip; 不对元素的遮罩效果做区域上的限制,言外之意就是只要是元素身上'长出来的',都可以应用遮罩,例如轮廓(outline),盒子阴影(box-shadow)

以下3个属性应用于SVG元素上才有效果:

mask-clip:fill-box;

mask-clip:stroke-box;

mask-clip:view-box;

6. mask-origin类似background-origin

表现与background-origin基本一致,默认值是border-box

属性值如下:

mask-origin:border-box;

mask-origin:padding-box;

mask-origin:content-box;

以下3个属性应用于SVG元素上才有效果:

mask-origin:fill-box;

mask-origin:stroke-box;

mask-origin:view-box;

7. mask-size类似background-size

表现与background-size基本一致,默认值是auto

mask-size:cover;

mask-size:contain;

8. 了解mask-type属性

mask-mode功能类似,都是设置不同的遮罩模式,但还有一个最大的区别,mask-type只能作用于SVG元素上

9. mask-composite表示多张图片遮罩的合成方式

mask-composite:add 表示遮罩累加,默认值

mask-composite:substract 表示遮罩相减,也就是遮罩图片重合的区域不显示,也就意味:遮罩图片越多,遮罩区域越小.

mask-composite:instersect 表示遮罩相交,也就是遮罩图片重合的区域才显示遮罩

mask-composite:exclude 表示遮罩排除,也就是遮罩重合的区域被当成透明的 常用于实现镂空的遮罩效果

二. clip-path剪裁属性

可用来对任意元素的可视区域进行剪裁

相比css2.1的clip属性,clip-path不需要将元素设置为绝对定位就能生效,并且剪裁的形状类型远比clip属性丰富得多,clip属性只能对矩形剪裁.

快速了解clip-path属性的各个属性值

/* 默认关键字 */
clip-path:none;
/* <clip-source> 值类型 */
clip-path:url(resources.svg#someId);
/* geometry-box 值类型 */
clip-path:margin-box;
clip-path:padding-box;
clip-path:content-box;
clip-path:fill-box;
clip-path:stroke-box;
clip-path:view-box;
/* <basic-shape> 值类型 */
clip-path:inset(100px 50px); /*四边形*/
clip-path:circle(50px at 0 100px);/*圆形*/
clip-path:polygon(50% 0,100% 50%,50% 100%,0 100%); /*多边形*/
clip-path:path('M0.5,1.......'); /*SVG不规则图形*/

clip-path属性中的polygon()函数支持一个名为<fill-rule>的数据类型,表示填充规则.

nonzero evenodd

三. -webkit-box-reflect属性与倒影效果的实现

最简单的倒影效果实现只需要一行css代码:

-webkit-box-reflect:below;

语法:-webkit-box-reflect:[above | below | right | left]?<length>?<image>?

倒影和outline box-shadow属性一样,不占据尺寸空间,同时倒影也无法响应点击事件.

四. 使用offset属性实现元素的不规则运动

offset属性是多个CSS属性的缩写,相关属性包括:

  • offset-anchor:auto | <position> 用来确认偏移运动的锚点,也就是确定元素中沿着轨迹运动的点

  • offset-distance: 表示偏移的距离大小

  • offset-path表示运动的路径,支持多种路径类型,但从语法来看,它和clip-path有众多相似之处,其语法如下:

    • offset-path:none;

    • offset-path:ray([<angle> && <size> && <contain>?]);

    • offset-path:<path()>;

    • offset-path:<url>;

    • offset-path:[<basic-shape> || <geometry-box>];

  • offset-position:auto | <position> 定义路径的起始点

  • offset-rotate:[auto | reverse] || <angle>用来定义元素沿着offset-path路径运动时的方向和角度,这个CSS属性比offset-position属性使用太多了.

五. 详细了解各种混合模式效果

  • background-blend-mode属性用于混合元素背景图案,渐变,和颜色

  • mix-blend-mode属性用于元素和元素之间的混合

  • isolation属性用在祖先元素上,限制mix-blend-mode属性设置的混合模式的应用范围

其中background-blend-modemix-blend-mode支持的混合模式类型是一样的,总共有16种混合模式类型

混合模式类型释义
normal正常
multiply正片叠底
screen滤色
overlay叠加
darken变暗
lighten变亮
color-dodge颜色变淡
color-burn颜色加深
hard-light强光
soft-light柔光
difference差值
exclusion排除
hue色调
saturation饱和度
color颜色
luminosity亮度

1. mix-blend-mode:multiply (正片叠底)

css中的mask,clip,颜色混合及offset不规则运动

任何颜色和黑色(色值0)正片叠底后一定是黑色,任何颜色和白色(色值255)正片叠底后一定是当前颜色.因此除和黑,白两色混合颜色不变以外,和其他颜色混合的正片叠底效果一定是会变暗的,也就是说:正片叠底会增强两张图片中暗的部分,其表现就像两张半透明的相片叠在一起放在发光的桌子上,因此被称之正片叠底.

2. mix-blend-mode:screen (滤色)

css中的mask,clip,颜色混合及offset不规则运动

与multiply相反,任何颜色和黑色(色值0)滤色后一定是原来的颜色,任何颜色和白色(色值255)滤色后一定是白色.任何颜色和其他颜色进行滤色混合后,颜色会更浅,有点类似漂白的效果.

3. mix-blend-mode:overlay (叠加)

css中的mask,clip,颜色混合及offset不规则运动

底图色值小于或等于128时,采用了类似正片叠底的算法,大于128时采用了类似滤色的算法.

应用场景:

  1. 主要应用于图片显示文字水印
  2. 着色叠加

4. mix-blend-mode:darken (变暗)

css中的mask,clip,颜色混合及offset不规则运动

表示将两种颜色的RGB通道进行比较,哪个色值小用哪个.

5. mix-blend-mode:lighten (变亮)

css中的mask,clip,颜色混合及offset不规则运动

表示将两种颜色的RGB通道进行比较,哪个色值大用哪个.

darkenlighten在web中的作用是类似的,可以实现任意PNG图标的变色效果,比mask遮罩属性的变色效果更自由.可以实现任意文字的填充效果,比background-clip:text声明实现的效果更丰富.也可以实现任意不规则形状的剪裁效果,比clip-path更加的灵活,所有以上的效果实现,只需要图标,文字,形状是纯黑色的即可.

/* 只需要设置文字为黑色,然后在文字上覆盖一层渐变色,同时设置混合模式为 lighten.这是因为任何颜色
和黑色变亮混合后都会保留当前的颜色 */
<div class='gradient-text'>lighten文字渐变效果</div>
.gradient-text{
  position:relative;
  font-size:3rem;
/* 文字颜色设为黑色 */
  color:black;
/*   背景色设置为白色 */
  background:white;
}
.gradient-text::before{
  content:'';
  position:absolute;
  inset:0;
  background-image:linear0gradient(45deg,lightblue,lightpink);
/*   混合模式设置为lighten */
  mix-blend-mode:lighten;
}

6. mix-blend-mode:color-dodge(颜色变淡)

css中的mask,clip,颜色混合及offset不规则运动

适合用来保护底图的高光,适合处理嘎光下的人物图片,通过将照片和特定颜色混合,可以改变整个照片的色调(暖色调或冷色调),而不会影响人物高光区域的细节.

7. mix-blend-mode:color-burn(颜色变深)

css中的mask,clip,颜色混合及offset不规则运动

在保留底部涂层的颜色的基础上,颜色变得更深了,整体效果就好像混合区域的对比度增强了.可用来保护底图的阴影,适合处理幽深秘境一类的照片,通过将照片与特定的颜色混合,刻意营造更加幽深的氛围.

8. mix-blend-mode:hard-light(强光)

css中的mask,clip,颜色混合及offset不规则运动

就好像耀眼的聚光灯照射过来,表现为图片亮的地方更亮,暗的地方更暗.

hard-lightoverlay的区别在于:

hard-light根据上层元素的色值判断使用正片叠底还是滤色, overlay根据下层元素的色值判断使用正片叠底还是滤色.

9. mix-blend-mode:soft-light(柔光)

css中的mask,clip,颜色混合及offset不规则运动

就好像发散的光源四处弥漫,表现效果与hard-light有类似之处,只是表现没有hard-light那么强烈.

对于自然景色的图像,柔光模式的着色效果要更自然一些.

10. mix-blend-mode:difference(差值)

css中的mask,clip,颜色混合及offset不规则运动

最终颜色的色值使用较浅颜色的色值减去较深颜色的色值.

如果上层元素的颜色为白色,则最终混合的颜色是底层元素颜色的反色.

11. mix-blend-mode:exclusion(排除)

css中的mask,clip,颜色混合及offset不规则运动

最终的混合效果和difference模式是类似的,区别在于exclusion的对比度要更低一些

4种颜色系混合模式

12. mix-blend-mode:hue(色调混合)

css中的mask,clip,颜色混合及offset不规则运动

作用是将颜色混合,使用底层元素的亮度和饱和度,以及上层元素的色调

需要注意的是:所有颜色西混合模式(色调,饱和度,颜色和亮度)都不要使用黑色进行混合,因为这样会挖掉底层元素的颜色信息,导致最终混合后的颜色是灰色.

将照片与渐变色进行色调混合,就可让照片呈现出丰富多彩的色调效果.

13. mix-blend-mode:saturation(饱和度混合)

css中的mask,clip,颜色混合及offset不规则运动

混合后的颜色保留底图的亮度和色调,并使用顶图的饱和度.

14. mix-blend-mode:color(颜色混合)

css中的mask,clip,颜色混合及offset不规则运动

混合后的颜色保留底图的亮度,并用顶图的色调和饱和度.

15. mix-blend-mode:luminosity(亮度混合)

css中的mask,clip,颜色混合及offset不规则运动

混合后的颜色保留底图的色调和饱和度,并使用顶图的亮度,效果和color模式正好是相反的.

使用isolation:isolate声明隔离混合模式

其作用很单纯,就是用来隔离混合模式,限制混合模式的作用范围.

转载自:https://juejin.cn/post/7255077014493986873
评论
请登录