css clip-path

clip-path CSS 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。和canvas和svg的剪裁很像。

取值

<clip-source>:用 <url> 表示剪切元素的路径

<basic-shape>:一种形状,其大小和位置由<几何盒>值定义。如果没有指定几何框,则边框将用作参考框

<geometry-box>:如果同 <basic-shape> 一起声明,它将为基本形状提供相应的参考框盒。通过自定义,它将利用确定的盒子边缘包括任何形状边角(比如说,被 border-radius 定义的剪切路径)。几何框盒可以有以下的值中的一个:

  • margin-box:使用 margin box 作为引用框。
  • border-box:使用 border box 作为引用框。
  • padding-box:使用 padding box 作为引用框。
  • content-box:使用 content box 作为引用框。
  • fill-box:利用对象边界框作为引用框。
  • stroke-box:使用笔触边界框(stroke bounding box)作为引用框
  • view-box:使用最近的 SVG 视口(viewport)作为引用框。如果viewBox 属性被指定来为元素创建 SVG 视口,引用框将会被定位在坐标系的原点,引用框位于由 viewBox 属性建立的坐标系的原点,引用框的尺寸用来设置 viewBox 属性的宽高值。

none:不创建的剪切路径。

语法

/* Keyword values */
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%, 100% 50%, 50% 100%, 0% 50%);
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;
clip-path: initial;
clip-path: unset;

正式语法

<clip-source> | [ <basic-shape> || <geometry-box> ] | none

where
<clip-source> = <url>
<basic-shape> = <inset()> | <circle()> | <ellipse()> | <polygon()> | <path()>
<geometry-box> = <shape-box> | fill-box | stroke-box | view-box

where
<inset()> = inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )
<circle()> = circle( [ <shape-radius> ]? [ at <position> ]? )
<ellipse()> = ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
<polygon()> = polygon( <fill-rule>? , [ <length-percentage> <length-percentage> ]# )
<path()> = path( [ <fill-rule>, ]? <string> )
<shape-box> = <box> | margin-box

where
<length-percentage> = <length> | <percentage>
<shape-radius> = <length-percentage> | closest-side | farthest-side
<position> = [ [ left | center | right ] || [ top | center | bottom ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]? | [ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage> ] ]
<fill-rule> = nonzero | evenodd
<box> = border-box | padding-box | content-box

与SVG对比

<style>
    #clipped {
      margin-bottom: 20px;
      clip-path: url(#cross);
    }
</style>
<img id="clipped" src="https://mdn.mozillademos.org/files/12668/MDN.svg" alt="MDN logo">

<svg height="0" width="0">
  <defs>
    <clipPath id="cross">
      <rect y="110" x="137" width="90" height="90"/>
      <rect x="0" y="110" width="90" height="90"/>
      <rect x="137" y="0" width="90" height="90"/>
      <rect x="0" y="0" width="90" height="90"/>
    </clipPath>
  </defs>
</svg>

<select id="clipPath">
  <option value="none">none</option>
  <option value="circle(100px at 110px 100px)">circle</option>
  <option value="url(#cross)" selected>cross</option>
  <option value="inset(20px round 20px)">inset</option>
  <option value="path('M 0 200 L 0,110 A 110,90 0,0,1 240,100 L 200 340 z')">path</option>
</select>

clip-path: circle(40%);
clip-path: ellipse(130px 140px at 10% 20%);
clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);

案例:

如下:通过亮色轨道和暗色轨道重叠,之后不断剪裁亮色轨道,实现沿轨道流动的效果

.clip-path-bg {
  width: px2rem(457);
  height: px2rem(371);
  @include imgPath("light-border.png");

  position: absolute;
  top: 0.324rem;
  top: 32.4vw;
  left: 0.288rem;
  left: 28.8vw;
  -webkit-clip-path: circle(70%);
  clip-path: circle(70%);
  animation: Streamer 3s linear infinite;
}

@keyframes Streamer {
  0% {
    -webkit-clip-path: polygon(0 0, 20% 0, 20% 20%, 0 20%); //4个点矩形
    clip-path: polygon(0 0, 20% 0, 20% 20%, 0 20%);
  }
  30% {
    -webkit-clip-path: polygon(69% 0, 100% 0, 100% 27%, 68% 29%);
    clip-path: polygon(69% 0, 100% 0, 100% 27%, 68% 29%);
  }
  60% {
    -webkit-clip-path: polygon(62% 36%, 100% 37%, 100% 64%, 60% 65%);
    clip-path: polygon(62% 36%, 100% 37%, 100% 64%, 60% 65%);
  }
  80% {
    -webkit-clip-path: polygon(57% 52%, 95% 53%, 95% 88%, 53% 86%);
    clip-path: polygon(57% 52%, 95% 53%, 95% 88%, 53% 86%);
  }
  100% {
    -webkit-clip-path: polygon(0 61%, 36% 60%, 35% 100%, 0 100%);
    clip-path: polygon(0 61%, 36% 60%, 35% 100%, 0 100%);
  }
}

详细查看MDN:mozilla

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值