摘要:一个用来生成各种形状包括随意拖拉自定义并且可以直接生成代码的网站。兼容性目前兼容性较差,和直接不支持,考虑兼容性的同学可以暂时等等。透明区域表示被裁剪的区域基本图形定义一个矩形。语法说明可选,表示填充规则用来确定该多边形的内部。
本文首发于 我的博客
曾经和某位朋友在聊天中讨论过这样一个话题:综合90%的网站的布局以及页面中的元素不是方的,就是圆的。就像所有的颜色都是由三原色(RGB)构成的一样,所有规则的形状似乎也都是由方和圆组成的;抛开设计效果的好看与否不说,似乎不规则的设计在实现(CSS)成本上也是一个麻烦,毕竟在CSS3之前,我们实现一个圆都要切图,更何况那些复杂的多边形。好在CSS3时代的到来,尤其是CSS3在借鉴并增加了众多SVG属性的今天,使用纯CSS绘制一个多边形已经不再是什么难事。文章中要介绍的clip-path这个属性也是一个借鉴了SVG的clipPath的借鉴品(确切的说应该是css clip属性(已被废弃)的替代品,svg clip-path属性的延伸品?)。
clip-path介绍clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法。想象一下你在Photoshop中勾勒路径的场景。MDN上是这样介绍 clip-path的:
clip-path属性可以防止部分元素通过定义的剪切区域来显示,仅通过显示的特殊区域。剪切区域是被URL定义的路径代替行内或者外部svg,或者定义路线的方法例如circle().。clip-path属性代替了现在已经弃用的剪切 clip属性。
文字过于苦涩,直接来看看效果:
效果演示截图基于clip-path在线神器 - http://bennettfeely.com/clippy 。一个用来生成各种形状(包括随意拖拉自定义)并且可以直接生成代码的网站。 博客 前端WEB圈 页面banner上的形状就直接使用该网站生成。
效果虽然吊炸天,兼容性却是个问题。
兼容性clip-path目前兼容性较差,IE和Edge直接不支持,考虑兼容性的同学可以暂时等等?。由于浏览器更新换代太快,很难说一段时间后clip-path的兼容性又是如何,因此这里不再截图,可以直接点击这里来查看。
基本语法语法详解和示例| [ || ] | none /*属性说明*/ = = | | | = | fill-box | stroke-box | view-box
为了更明显的表示裁剪区域,我给每个demo添加了同样宽高的透明背景,其中色块表示被裁剪后的部分,透明背景表示被裁剪的区域。
同时,文章底部有demo可运行查看具体效果。透明区域表示被裁剪的区域
基本图形:insetinset() : 定义一个矩形 。注意,定义矩形不是rect,而是 inset。
//语法 inset(基本图形:circle{1,4} [ round ]? ) //说明 inset()可以传入5个参数,分别对应top,right,bottom,left的裁剪位置,round radius(可选,圆角) //示例 clip-path: inset(2em 3em 2em 1em round 2em);
circle() : 定义一个圆 。
//语法 circle( [基本图形:ellipse]? [ at ]? ) //说明 circle()可以传人2个可选参数; 1. 圆的半径,默认元素宽高中短的那个为直径,支持百分比 2. 圆心位置,默认为元素中心点 //半径公式 如果半径使用百分比:圆的半径 = (sqrt(width^2+height^2)/sqrt(2)) * 百分比 //示例 clip-path: circle(30% at 150px 120px);
ellipse() : 定义一个椭圆 。
//语法 ellipse( [基本图形:polygon{2} ]? [ at ]? ) //说明 ellipse()可以传人3个可选参数; 1. 椭圆的X轴半径,默认是宽度的一半,支持百分比 2. 椭圆的Y轴半径,默认是高度的一半,支持百分比 3. 椭圆中心位置,默认是元素的中心点 //示例 clip-path: ellipse(45% 30% at 50% 50%);
polygon() : 定义一个多边形 。
//语法 polygon(使用demo浪起来? , [ ]# ) //说明 可选,表示填充规则用来确定该多边形的内部。可能的值有nonzero和evenodd,默认值是nonzero 后面的每对参数表示多边形的顶点坐标(X,Y),也就是连接点 //示例 clip-path: polygon(50% 0,100% 50%,0 100%);
如果无法显示,请自备梯子?,你懂得~??
clip-path-demo 综合实例如上知识点再加上CSS3的animation动画和linear-gradient渐变属性,就可以完成 前端WEB圈 页面上的多形状动画Banner效果:
.shape1 { background-image: linear-gradient(to bottom right, #183de7, #48cffe 80%); clip-path: inset(0 0 0 0 round 100px); } .shape2 { clip-path: inset(0 0 0 0 round 100px); background-image: linear-gradient(to bottom right, #183de7, #48cffe 80%); transform: rotate(45deg); } .shape3 { width: 960px; height: 960px; border-radius: 50%/100% 0; background: #00ffff; } .shape4,.shape5 { clip-path: circle(); background-image: linear-gradient(to right, #0db54c, #00697b 40%); } .shape6 { clip-path: polygon(0 0, 50% 100%, 100% 0); background-image: linear-gradient(to right, #f76b71, #a41058 60%); }在线DEMO clip-path-animation 其他属性
除了 inset, circle等 basic-shape属性外,clip-path还具有url, geometry-box等属性值,具体可以参考MDN上的介绍。
总结在clip-path之前,我们可以利用盒模型,利用border-radius, border,transform,box-shadow等来创建诸如矩形,圆形,椭圆,三角形等一些简单的形状,clip-path为我们提供了多边形的创建方案,尽管它现在的支持性,兼容性还不是很好,但我们完全可以在一些特定的场景下使用它来代替图片了。当然,clip-path的作用不仅仅是如我上面介绍的那般简单,她还有很多奇妙的用处,尤其是配合动画一起使用,感兴趣的同学可以深入之……
参考https://developer.mozilla.org/zh-CN/docs/Web/CSS/clip-path
https://caniuse.com/#search=clip-path
http://bennettfeely.com/clippy/
本文首发于 我的博客
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/112498.html
摘要:介绍直译过来就是裁剪路径,使用或形状定义一个元素的可见区域的方法。想象一下你在中勾勒路径的场景。上是这样介绍的属性可以防止部分元素通过定义的剪切区域来显示,仅通过显示的特殊区域。属性代替了现在已经弃用的剪切属性。clip-path介绍 clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法。想象一下你在Photoshop中勾勒路径的场景。MDN上是这样...
摘要:层叠即表示允许以多种方式来描述样式,一个元素可以被渲染呈现出多种样式。可以让属性的变化过程持续一段时间,而不是立即生效。比如,将元素的颜色从白色改为黑色,通常这个改变是立即生效的,使用后,将按一个曲线速率变化。 showImg(https://segmentfault.com/img/bVZwyL?w=900&h=385); CSS 的全称是 Cascading Style Sheet...
摘要:前言说起隐藏元素我想每一个前端都能说起几种,但能说全的我想就不是很多了。因此,元素依然存在原来的位置,占据空间也可响应事件。占据空间,无法点击如同属性,被隐藏的元素依然会对我们的网页布局起作用。 前言 说起隐藏元素我想每一个前端er都能说起几种,但能说全的我想就不是很多了。博主总结了几种隐藏元素的方法,总结如下表格: overflow opacity visibilit...
摘要:在之前所提到绘制正多边形的方法,算是纯粹利用伪元素来完成,不过坦白说还有另外一种方法,可以将单一做更多形状的变换,这种方法就是的,这个看起来有点眼熟,因为它原本就存在于里头,利用掩码剪裁的方法,连接坐标绘制掩码区域,就可以做出许多不同的 在之前所提到绘制正多边形的方法,算是纯粹利用伪元素来完成,不过坦白说还有另外一种方法,可以将单一div做更多形状的变换,这种方法就是CSS3的clip...
阅读 2013·2021-11-15 11:38
阅读 2046·2019-08-30 15:55
阅读 2180·2019-08-30 15:52
阅读 3165·2019-08-30 14:01
阅读 2682·2019-08-30 12:47
阅读 1127·2019-08-29 13:17
阅读 1060·2019-08-26 13:55
阅读 2628·2019-08-26 13:46