CSS没有边界的裁剪路径 - Clip Paths

2019-06-13 admin

随着浏览器对shape-outside和clip-path等属性的支持增加,CSS Shapes越来越受到关注。有几种方法可以使用CSS Shapes,特别是clip-path属性,乍一看我们并不知道这个属性如何使用,下面就来详细的介绍它。

裁剪路径clip path的基础知识

在深入研究之前,我们应该先看看基本的形状和clip-path。裁剪路径可以将CSS Shapes如circle()、ellipse(), inset()或自由变化的polygon()应用于任何元素。元素中不在形状边界内的任何内容都将被裁剪删除掉。

使用多边形函数,我们可以创建三角形、星形或其他形状,虽然在可以使用px等固定单位,但百分比将提供更大的灵活性并自适应于元素的尺寸。 图片描述

所以对于一个八边形,我们可以设置八组x,y点坐标来定义。在这种情况下,对于第一个x,我们从盒子宽度的30%开始,对于y,我们从盒子的顶部开始,然后顺时针设置各个点。可见区域就是通过将这些点用直线连接而形成的形状。

clip-path: polygon(
  30% 0%,
  70% 0%,
  100% 30%,
  100% 70%,
  70% 100%,
  30% 100%,
  0% 70%,
  0% 30%
);

看不见的顶点

上面实现一个八边形,我们设置了八个点的坐标。但是,我们可以跳出元素框的限制去思考,也就是说要跳出0% - 100%的这个范围。

元素的盒边框是裁剪后内容的显示边界,但我们仍然可以为元素定义超出盒边框的点。

clipboard.png

通过定义超过0%-100%范围的点,我们可以把一个有三个点的多边形变成四边形、五边形或六边形。在这个例子中,都是定义clip-path: polygon()函数的三个点,但是由于超出了元素框的边界,我们可以看到一个三角形和两个五边形。

于是,上面的八边形只用四个点就可以实现。

clipboard.png

一条裁剪路径,多个形状

我们可以利用超出元素边界的这种能力用一个polygon()创建多个裁剪形状。

clipboard.png CSS源码

根据元素的位置,我们可以直接制作出每个形状,但是因为我们知道裁剪坐标点可以在元素框之外的空间中移动,所以可以绘制额外的线来帮助我们找到下一个点的位置。

它还可以帮助我们分割元素。结合CSS自定义属性,我们可以处理重叠的元素,并将每个元素裁剪成交替的条带。下面的例子是两个重叠的圆角矩形,每个被分成不规则的矩形动画。

clipboard.png CSS源码

不同的填充规则不同的形状

polygon()函数不仅仅是一组坐标点的集合,它还有另外的一个参数 — 填充规则 ,我们一直使用的默认值是nonzero,它还有另外一个值是evenodd,这两个值它们确定形状的内部和外部的规则是不同的。

clipboard.png CSS源码

当使用evenodd规则时,我们可以通过从任意的点绘制光线来确定点是在边界内还是在边界外。如果光线穿过裁剪路径线的和为偶数,则该点被视为外部,如果光线穿过裁剪路径线的和为奇数,则该点位于内部。

顺序

要注意的是,有许多CSS属性例如CSS Filters, Blend Modes等都会影响元素的外观。而这些效果会按下面的顺序应用到元素上:

  1. CSS Filters (例如 filter: blur(2px))
  2. Clipping (本文所讲的)
  3. Masking (类似与裁剪)
  4. Blend Modes (例如 mix-blend-mode: multiply)
  5. Opacity

如果我们需要一个模糊的星星形状,模糊效果会发生在裁剪之前。由于模糊效果会参照元素的边框,但是我们将元素边框裁剪掉了,于是前一个星星的模糊效果会丢失。

clipboard.png CSS源码

如果我们想模糊星星,可以选择将剪裁后的元素包裹在模糊的父元素中。内部元素将首先呈现其星星的形状,然后父元素将正常模糊其内容。

通过动画来显示内容

CSS Shapes是可以添加动画效果的,它允许我们在不影响元素内容的情况下改变元素的可视区域。例如,我们可以从内容隐藏(完全裁剪)开始,并增大裁剪路径以显示其中的内容。要注意的是,clip-path: polygon()动画形的一个重要条件是每个关键帧的坐标点数以及填充规则都必须相同。否则,浏览器将没有足够的信息来插入中间值。

图片描述 CSS源码

总结

Clip paths给我们提供了一些新的有趣的可能,同时clip-path属性并不会改变元素本身的尺寸和布局,这也是它强大的地方,我们可以大量的使用这个属性来改变元素的外观。

获取以上效果的全部源码可以: 图片描述

[转载]原文链接:https://segmentfault.com/a/1190000019462933

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-67161.html

文章标题:CSS没有边界的裁剪路径 - Clip Paths

相关文章
10个强大的纯CSS3动画案例分享
我们的网页外观主要由CSS控制,编写CSS代码可以任意改变我们的网页布局以及网页内容的样式。CSS3的出现,更是可以让网页增添了不少动画元素,让我们的网页变得更加生动有趣,并且更易于交互。本文分享了10个非常炫酷的CSS3动画案例,希望大家...
2015-11-16
v-charts | 饿了么团队开源的基于 Vue 和 ECharts 的图表工具
在使用echarts生成图表时,经常需要做繁琐的数据类型转化、修改复杂的配置项,v-charts的出现正是为了解决这个 痛点。基于Vue2.0和echarts封装的v-charts图表组件,只需要统一提供一种对前后端都友好的数据格式 设置简...
2018-05-24
从2014年的发展来展望JS的未来将会如何
<font face="寰�杞�闆呴粦, Arial, sans-serif ">2014骞达紝杞�浠惰�屼笟鍙戝睍杩呴€燂紝鍚勭�嶈��瑷€灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘€傝繖浜涜��...
2015-11-12
12个你未必知道的CSS小知识
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过。 1.CSS的color属性并非只能用于文本显示 对于CSS的color属性,相信所有Web开发人员...
2015-11-12
ajax为什么令人惊异?ajax的优缺点
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。 Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHT...
2015-11-12
HTML5的5个不错的开发工具推荐
HTML5规范终于在今年正式定稿,对于从事多年HTML5开发的人员来说绝对是一个重大新闻。数字天堂董事长,DCloud CEO王安也发表了文章,从开发者和用户两个角度分析了HTML对两个人群的优势。其实,关于HTML5的开发工具,我们以往的...
2015-11-12
JavaScript教程:JS中的原型
Keith Peters 几年前发表的一篇博文,关于学习没有“new”的世界,其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。 标准方法(The Standard Way) 一直以来,我们学习的在 JavaScript 里创建对...
2015-11-12
AJAX的浏览器支持
AJAX 的要点是 XMLHttpRequest 对象。 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。 IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 Jav...
2015-11-12
typeof、instanceof和contructor的区别
typeof:以字符串的形式返回变量的原始类型,typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候,注意,typeof null也会返回object,...
2015-11-12
JavaScript的组成
一个完整的JavaScript由3个部分组成:核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) ECMAScript 描述了该语言的语法和基本对象 ; DOM 描述了处理网页内容的方法和接口 ; BOM 描...
2015-11-12
回到顶部