经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS3 » 查看文章
使用CSS3的clip-path实现剪贴区域的显示
来源:cnblogs  作者:风雨后见彩虹  时间:2019/3/19 8:38:04  对本文有异议

clip-path介绍

clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法。想象一下你在Photoshop中勾勒路径的场景。MDN上是这样介绍 clip-path的:

clip-path属性可以防止部分元素通过定义的剪切区域来显示,仅通过显示的特殊区域。剪切区域是被URL定义的路径代替行内或者外部svg,或者定义路线的方法例如circle().。clip-path属性代替了现在已经弃用的剪切 clip属性。

基本语法

  1. <clip-source> | [ <basic-shape> || <geometry-box> ] | none/*属性说明*/<clip-source> = <url>
  2. <basic-shape> = <inset()> | <circle()> | <ellipse()> | <polygon()>
  3. <geometry-box> = <shape-box> | fill-box | stroke-box | view-box

兼容性

clip-path目前兼容性较差,IE和Edge直接不支持。

语法详解和示例

为了更明显的表示裁剪区域,我给每个demo添加了同样宽高的透明背景,其中色块表示被裁剪后的部分,透明背景表示被裁剪的区域。

基本图形:inset(定义矩形)

inset() : 定义一个矩形 。注意,定义矩形不是rect,而是 inset。

  1. //语法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(定义圆)

  1. //语法
  2. circle( [ <shape-radius> ]? [ at <position> ]? )
  3. //说明
  4. circle()可以传人2个可选参数;
  5. 1. 圆的半径,默认元素宽高中短的那个为直径,支持百分比
  6. 2. 圆心位置,默认为元素中心点
  7. //半径公式
  8. 如果半径使用百分比:圆的半径 = (sqrt(width^2+height^2)/sqrt(2)) * 百分比 
  9.  
  10. //示例
  11. clip-path: circle(30% at 150px 120px);

基本图形:ellipse(定义椭圆)

  1. //语法
  2. ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
  3. //说明
  4. ellipse()可以传人3个可选参数;
  5. 1. 椭圆的X轴半径,默认是宽度的一半,支持百分比
  6. 2. 椭圆的Y轴半径,默认是高度的一半,支持百分比
  7. 3. 椭圆中心位置,默认是元素的中心点
  8.  
  9. //示例
  10. clip-path: ellipse(45% 30% at 50% 50%);

 

基本图形:polygon(定义多边形)

  1. //语法
  2. polygon( <fill-rule>? , [ <length-percentage> <length-percentage> ]# )
  3. //说明
  4. <fill-rule>可选,表示填充规则用来确定该多边形的内部。可能的值有nonzeroevenodd,默认值是nonzero
  5. 后面的每对参数表示多边形的顶点坐标(X,Y),也就是连接点
  6.  
  7. //示例
  8. clip-path: polygon(50% 0,100% 50%,0 100%);

其他属性

除了 inset, circle等 basic-shape属性外,clip-path还具有url, geometry-box等属性值,具体可以参考MDN上的介绍。

完整语法

  1. /* Keyword values */clip-path: none;/* <clip-source> values */ clip-path: url(resources.svg#c1);/* <geometry-box> values */clip-path: margin-box;
  2. clip-path: border-box;
  3. clip-path: padding-box;
  4. clip-path: content-box;
  5. clip-path: fill-box;
  6. clip-path: stroke-box;
  7. clip-path: view-box;/* <basic-shape> values */clip-path: inset(100px 50px);
  8. clip-path: circle(50px at 0 100px);
  9. clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
  10. clip-path: path('M0.5,1 C0.5,1,0,0.7,0,0.3 A0.25,0.25,1,1,1,0.5,0.3 A0.25,0.25,1,1,1,1,0.3 C1,0.7,0.5,1,0.5,1 Z');/* Box and shape values combined */clip-path: padding-box circle(50px at 0 100px);/* Global values */clip-path: inherit;
  11. clip-path: initial;
  12. clip-path: unset;

图片渐变实例

实现图片从上往下渐变

html代码:

  1. <div class="img"><img src="images/1.jpg"/></div>

CSS代码:

  1. *{padding:0;margin:0;}.img{width:630px;height:630px;}.img img{display: block;width:100%;}.img{overflow: hidden;-webkit-clip-path: polygon(0 0,0 0,100% 0,100% 0);clip-path: polygon(0 0,0 0,100% 0,100% 0);opacity: 0;transition: opacity 1.1s ease 167ms,-webkit-clip-path 1.1s cubic-bezier(.19,1,.22,1);transition: clip-path 1.1s cubic-bezier(.19,1,.22,1),opacity 1.1s ease 167ms;transition: clip-path 1.1s cubic-bezier(.19,1,.22,1),opacity 1.1s ease 167ms,-webkit-clip-path 1.1s cubic-bezier(.19,1,.22,1);
  2. }.img.current{opacity: 1;-webkit-clip-path: polygon(0 0,0 100%,100% 100%,100% 0);clip-path: polygon(0 0,0 100%,100% 100%,100% 0);
  3. }

JS代码:

  1. $(function(){
  2.     $(".img").addClass('current');
  3. })

实现图片从左往右渐变

图片不显示的时候:

  1.  -webkit-clip-path: polygon(0 0,0 0,0 100%,0 100%);
  2.  clip-path: polygon(0 0,0 0,0 100%,0 100%);

图片显示的时候:

  1. -webkit-clip-path: polygon(0 0,100% 0,100% 100%,0 100%);
  2.  clip-path: polygon(0 0,100% 0,100% 100%,0 100%);

参考地址

原文链接:http://www.cnblogs.com/moqiutao/p/10547330.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号