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