css中的mask,clip,颜色混合及offset不规则运动
一. 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-mode与mix-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 (正片叠底)

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

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

底图色值小于或等于128时,采用了类似正片叠底的算法,大于128时采用了类似滤色的算法.
应用场景:
- 主要应用于图片显示文字水印
- 着色叠加
4. mix-blend-mode:darken (变暗)

表示将两种颜色的RGB通道进行比较,哪个色值小用哪个.
5. mix-blend-mode:lighten (变亮)

表示将两种颜色的RGB通道进行比较,哪个色值大用哪个.
darken和lighten在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(颜色变淡)

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

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

就好像耀眼的聚光灯照射过来,表现为图片亮的地方更亮,暗的地方更暗.
hard-light与overlay的区别在于:
hard-light根据上层元素的色值判断使用正片叠底还是滤色, overlay根据下层元素的色值判断使用正片叠底还是滤色.
9. mix-blend-mode:soft-light(柔光)

就好像发散的光源四处弥漫,表现效果与hard-light有类似之处,只是表现没有hard-light那么强烈.
对于自然景色的图像,柔光模式的着色效果要更自然一些.
10. mix-blend-mode:difference(差值)

最终颜色的色值使用较浅颜色的色值减去较深颜色的色值.
如果上层元素的颜色为白色,则最终混合的颜色是底层元素颜色的反色.
11. mix-blend-mode:exclusion(排除)

最终的混合效果和difference模式是类似的,区别在于exclusion的对比度要更低一些
4种颜色系混合模式
12. mix-blend-mode:hue(色调混合)

作用是将颜色混合,使用底层元素的亮度和饱和度,以及上层元素的色调
需要注意的是:所有颜色西混合模式(色调,饱和度,颜色和亮度)都不要使用黑色进行混合,因为这样会挖掉底层元素的颜色信息,导致最终混合后的颜色是灰色.
将照片与渐变色进行色调混合,就可让照片呈现出丰富多彩的色调效果.
13. mix-blend-mode:saturation(饱和度混合)

混合后的颜色保留底图的亮度和色调,并使用顶图的饱和度.
14. mix-blend-mode:color(颜色混合)

混合后的颜色保留底图的亮度,并用顶图的色调和饱和度.
15. mix-blend-mode:luminosity(亮度混合)

混合后的颜色保留底图的色调和饱和度,并使用顶图的亮度,效果和color模式正好是相反的.
使用isolation:isolate声明隔离混合模式
其作用很单纯,就是用来隔离混合模式,限制混合模式的作用范围.
转载自:https://juejin.cn/post/7255077014493986873