css中clip属性

更新日期: 2019-12-03阅读: 2.1k标签: 属性

前言

css中裁剪和遮罩相关的属性一般来说是比较少用到的,但是最近写项目的时候遇到一个问题,要给一张图片上加个白色遮罩,产生合成效果,这就不得不用到css遮罩相关的属性,顺便把裁剪相关属性一起学习来,做个总结,接下来就进入正文


clip-path

clip是css中第一个用来裁剪的属性,但是由于新的标准,clip特性已经从web标准中删除,建议使用clip-path,因此我们来看clip-path是怎么用的


语法

<clip-source>用<url>表示剪切元素的路径
<basic-shape> 一种形状,其大小和位置由<几何盒>值定义。如果没有指定几何框,则边框将用作参考框
<geometry-box> 如果同 <basic-shape> 一起声明,它将为基本形状提供相应的参考框盒。通过自定义,它将利用确定的盒子边缘包括任何形状边角  

接下来就一个个来看具体的属性,先从basic-shape开始,basic-shape提供了多个函数,先来看最常用的函数:inset()


inset

inset( <shape-arg>{1,4} [round <border-radius>]? )
inset表示方形裁剪,函数提供来五个参数,前四个参数分别代表插进的长方形与相关盒模型的上右下左四个边界的偏移量,第五个可选参数<border-radius>用于定义插进长方形顶点的圆弧角度  

光看字面意思可能不太好理解,来个例子吧:

<div class="wrap">
    <img class="lake" src="../img/lake.jpg">
</div>
.wrap {
  display: inline-block;
  line-height: 1;
  background-color: #000;
}
.lake {
  width: 200px;
}


.lake {
  width: 200px;
  clip-path: inset(10px 15px 20px 25px round 10px);
}


第一段代码没有给clip-path时,得到图片周围没有黑边,当加上clip-path时,图片周围产生了黑边,黑边的部分就是图片被裁掉的不部分,inset(10px 15px 20px 25px round 10px),上边界10px,右边界15px,下边界20px,左边界25px,裁剪角弧度10px,通过这个例子应该就能看出参数作用。

接下看第二个函数circle():

circle( [<shape-radius>]? [at <position>]?

circle表示圆形裁剪,函数提供两个可选参数,第一个圆形的半径,第二个圆心的位置

来看个例子:

.lake {
  width: 200px;
  clip-path: circle(50px at 80px 80px);
}


.lake {
  width: 200px;
  clip-path: circle(50px at center);
}


circle()的圆心位置除了指定具体的值外还可以通过center这种位置参数直接指定圆心的位置。

第三个函数:ellipse()

ellipse( [<shape-radius>{2}]? [at <position>]? )

ellipse表示椭圆裁剪,提供三个参数,第一个参数x轴方向半径,第二个参数y轴方向半径,第三个参数圆心的位置

来看个例子:

.lake {
  width: 200px;
  clip-path: ellipse(100px 50px at 100px 100px);
}


.lake {
  width: 200px;
  clip-path: ellipse(100px 50px at top);
}


和circle一样ellipse的圆心位置也可以使用top这类的位置值

第四个函数:polygon()

polygon( [<fill-rule>,]? [<shape-arg> <shape-arg>]# )

polygon表示多边形裁剪,第一个参数<fill-rule> 代表了多边形的填充规则,可选值nonzero 和 evenodd,第二个参数是多边形顶点坐标的合集

来看个例子:

.lake {
  width: 200px;
  height: 200px;
  clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)
}


上面这个例子利用了多边形裁剪的规则,将图片裁剪成了一个五角星,fill-rule两个关键字都试了一下,裁剪效果相同,这里有一个网址,上面clip-path basic-shape的所有用法演示,感兴趣的可以上去看看

第五个函数:path(),这个函数尝试了一下,在Chrome和Firefox两个浏览器上都不生效

url()

这里的clip-path url()函数里的参数并不是裁剪的用链接地址,而是一个剪切元素用的svg路径,举个例子:

<div class="wrap">
  <img class="lake" src="../img/lake.jpg">
  <svg width="0" height="0">
    <defs>
      <clipPath id="clip">
          <path d="M 10,30
          A 20,20 0,0,1 50,30
          A 20,20 0,0,1 90,30
          Q 90,60 50,90
          Q 10,60 10,30 z">
          </path>
      </clipPath>
   </defs>
  </svg>
</div>
.lake {
  width: 200px;
  clip-path: url(#clip)
}


上例子中利用svg的路径裁剪,将图片裁剪成了一个心形

裁剪参考框

裁剪参考框指的是裁剪元素的参考框盒,取值margin-box|border-box|padding-box|content-box|fill-box|stroke-box|view-box|,一般和basic-shape一起使用,举个例子:

.lake {
  width: 200px;
  clip-path:margin-box inset(10px 15px 20px 25px round 10px);
  background-color: #000;
}

这里的几个取值就不做详细介绍,和css盒模型类似,还有一个原因这个值在Chrome上不支持,但是Firefox上是可以使用的


浏览器支持

css属性功能再强大也要看浏览器的支持的程度,浏览器不支持说啥都没用.

上面是caniuse上查到的浏览器支持程度,可以看到出来一些低版本的浏览器不支持外,大多数高版本的浏览器都是支持的,可以放心使用


clip-path动画

基本语法和浏览器支持都介绍完了,接下来来看看clip-path的简单应用:clip-path动画,来看一个简单demo:

 @keyframes shape {
  from {
    clip-path: polygon(50% 0%, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0% 50%, 40% 40%);
  }

  to {
    clip-path: polygon(50% 30%, 100% 0%, 70% 50%, 100% 100%, 50% 70%, 0% 100%, 30% 50%, 0% 0%);
  }
}
.lake {
  width: 200px;
  clip-path: polygon(50% 0%, 60% 40%, 100% 50%, 60% 60%, 50% 100%, 40% 60%, 0% 50%, 40% 40%);
  animation: 2s shape infinite alternate ease-in-out;
}


上例中利用clip-path写了一个简单的图形变换的动画,这算是一个比较简单的应用,实际上在处理图片展示和图形变换上的用处会更多,可以配合其他的属性写出很多复杂的图片展示效果


总结

clip-path算是一个不常用的css属性,由于最近在写图片编辑的时候用到了,因此写了这篇文章对clip-path用法做了简单的介绍,clip-path的强大还需要大家自己去项目中使用的时候慢慢体会,希望看了这篇文章对大家能有所帮助。

原文:https://segmentfault.com/a/1190000021481620

链接: https://www.fly63.com/article/detial/7128

display: none;与visibility: hidden;的区别

display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见,display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;

属性设置百分比时的计算参考汇总

元素宽高width,min-width,max-width等元素宽度设置百分比,以包含块的宽度为标准进行计算;height,min-height,max-height等元素宽度设置百分比,以包含块的高度为标准进行计算;

readonly与disabled的区别

readonly 只对 <input> 和 <textarea> 标签有效;disabled 对所有表单元素都有效, 包括:<input>, <textarea>, <button>, <label>, <option>, <select>等

css的overflow属性

事实上我挺长一段时间都没弄清楚overflow:scroll与overflow:auto的差别,今天测试了一下,总算是明白了。visible: 不剪切内容。hidden: 将超出对象尺寸的内容进行裁剪,将不出现滚动条。scroll: 将超出对象尺寸的内容进行裁剪,并以滚动条的方式显示超出的内容。

Vue Prop属性功能与用法实例

这篇文章主要介绍了Vue Prop属性功能与用法,结合实例形式较为详细的分析了vue.js中Prop属性的功能、原理、使用方法及相关操作注意事项,写的十分的全面细致,具有一定的参考价值

深入剖析z-index属性

层叠顺序的大小比较;层叠顺序级别高的元素覆盖级别低的元素。首先要注意,z-index:auto 虽然可以看作z-index:0 ,但是这仅仅是在层叠顺序的比较上;从层叠上下文上讲,二者有本质差别:auto 不会创建层叠上下文,z-index:0 会创建层叠上下文。

Vue.js-计算属性和class与style绑定

所有的计算属性都以函数的形式写在Vue实例中的computed选项内,最终返回计算后的结果。在一个计算属性中可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果即可。

css属性分类介绍

CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 position 定位 列表/表格 多列属性 可伸缩框属性 列表属性 Grid属性 Table属性 动画属性 Animation 动画属性 Transition 过渡属性

css中word-wrap white-space word-break textoverflow的使用

word-wrap正常来说,在一行文本中,如果出现这一行已经放不下的单词,浏览器会自动将该文字转入下一行。white-space规定段落中的文本不进行换行。

css使用到的border边框属性

border 在一个声明中设置所有的边框属性。 border-bottom在一个声明中设置所有的下边框属性。border-bottom-color设置下边框的颜色。border-bottom-style设置下边框的样式。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!