clip-path介绍
clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法。想象一下你在Photoshop中勾勒路径的场景。MDN上是这样介绍 clip-path的:
clip-path属性可以防止部分元素通过定义的剪切区域来显示,仅通过显示的特殊区域。剪切区域是被URL定义的路径代替行内或者外部svg,或者定义路线的方法例如circle().。clip-path属性代替了现在已经弃用的剪切 clip属性。
基本语法
<clip-source> | [ <basic-shape> || <geometry-Box> ] | none /*属性说明*/ <clip-source> = <url> <basic-shape> = <inset()> | <circle()> | <ellipse()> | <polygon()> <geometry-Box> = <shape-Box> | fill-Box | stroke-Box | view-Box
兼容性
clip-path目前兼容性较差,IE和Edge直接不支持。
语法详解和示例
为了更明显的表示裁剪区域,我给每个demo添加了同样宽高的透明背景,其中色块表示被裁剪后的部分,透明背景表示被裁剪的区域。
基本图形:inset(定义矩形)
inset() : 定义一个矩形 。注意,定义矩形不是rect,而是 inset。
//语法 inset( <length-percentage>{1,4} [ round <border-radius> ]? ) 说明 inset()可以传入5个参数,分别对应top,right,bottom,left的裁剪位置,round radius(可选,圆角) 示例 clip-path: inset(2em 3em 2em 1em round 2em);
基本图形:circle(定义圆)
@H_301_61@//语法 circle( [ <shape-radius> ]? [ at <position> ]? ) //说明 circle()可以传人2个可选参数; 1. 圆的半径,默认元素宽高中短的那个为直径,支持百分比 2. 圆心位置,默认为元素中心点 //半径公式 如果半径使用百分比:圆的半径 = (sqrt(width^2+height^2)/sqrt(2)) * 百分比 //示例 clip-path: circle(30% at 150px 120px);
基本图形:ellipse(定义椭圆)
@H_301_61@//语法 ellipse( [ <shape-radius>{2}@H_301_61@ ]? [ at <position> ]? ) //说明 ellipse()可以传人3个可选参数; 1. 椭圆的X轴半径,默认是宽度的一半,支持百分比 2. 椭圆的Y轴半径,默认是高度的一半,支持百分比 3. 椭圆中心位置,默认是元素的中心点 //示例 clip-path: ellipse(45% 30% at 50% 50%);
基本图形:polygon(定义多边形)
@H_301_61@//语法 polygon( <fill-rule>?,[ <length-percentage> <length-percentage> ]# ) //说明 <fill-rule>可选,表示填充规则用来确定该多边形的内部。可能的值有nonzero和evenodd,默认值是nonzero 后面的每对参数表示多边形的顶点坐标(X,Y),也就是连接点 //示例 clip-path: polygon(50% 0,100% 50%,0 100%);
其他属性
除了 inset,circle等 basic-shape属性外,clip-path还具有url,geometry-Box等属性值,具体可以参考MDN上的介绍。
完整语法
Keyword values */@H_301_61@ clip-path: none; <clip-source> values clip-path: url(resources.svg#c1); <geometry-Box> values clip-path: margin-Box; clip-path: border-Box; clip-path: padding-Box; clip-path: content-Box; clip-path: fill-Box; clip-path: stroke-Box; clip-path: view-Box; <basic-shape> values clip-path: inset(100px 50px); clip-path: circle(50px at 0 100px); clip-path: polygon(50% 0%,50% 100%,0% 50%); clip-path: path('M0.5,1 C0.5,1,0.7,0.3 A0.25,0.25,0.5,0.3 C1,1 Z'); Box and shape values combined clip-path: padding-Box circle(50px at 0 100px); Global values clip-path: inherit; clip-path: initial; clip-path: unset;
图片渐变实例
实现图片从上往下渐变
CSS代码:
@H_301_61@*{padding:0;margin:0;}@H_301_61@ .img{width:630px;height:630px;}@H_301_61@ .img img{display: block;100%;}@H_301_61@ overflow: hidden; -webkit-clip-path: polygon(0 0,0 0,100% 0,100% 0); clip-path: opacity: 0; transition: opacity 1.1s ease 167ms,-webkit-clip-path 1.1s cubic-bezier(.19,.22,1); clip-path 1.1s cubic-bezier(.19,1),opacity 1.1s ease 167ms;301_61@ .img.current{ 1;代码:$(function(){ $(".img").addClass('current'); })实现图片从左往右渐变
@H_301_61@ -webkit-clip-path: polygon(0 0,0 100%); clip-path: polygon(0 0,0 100%);@H_301_61@-webkit-clip-path: polygon(0 0,0 100%);参考地址
- 《不可思议的CSS之clip-path》
- 《MDN:clip-path》
- 截图基于clip-path在线神器 - http://bennettfeely.com/clippy
- 图片渐变效果参考地址:https://www.uber.design/case-studies