前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

打破矩形框架,解锁CSS里的魔法剪刀

前言

在传统的网页布局中,我们的页面元素都是或矩形、或圆形的,如果我们能够这种打破传统的矩形布局,那么在提升用户体验的同时还能造成一定的视觉冲击力

CSS clip-path属性,就能将这一设想变为现实,它宛如设计师手中的魔法剪刀,可以让你轻松裁剪元素,创造出各种不规则和富有创意的形状;从简单的圆形按钮到复杂的多边形设计,clip-path为开发者提供了丰富的表现力,既无需额外的图像资源,也不会增加页面的复杂度

简单介绍

clip-path是一个 CSS 属性,可用于定义元素的可见区域,即对元素进行裁剪,隐藏掉被裁剪区域外的部分;它可以创造出多种复杂的形状,而无需依赖额外的图像资源或大量的 HTML 结构

基本语法

  • <clip-source>: 用url()引用SVG路径(<clipPath>)
  • <basic-shape>: 定义裁剪区域的形状
  • <geometry-box>: 可配合basic-shape使用,用于定义裁剪的参考框
  • none: 没有裁剪效果,元素的完整内容显示

CSS 早期裁剪元素是启用clip属性,它主要用于绝对定位的元素,且仅支持矩形裁剪

2001年,SVG 作为一种支持矢量图的标准,其中包含了clipPath元素,可以用来裁剪 SVG 图形

2011年,W3C 开始制定 CSS Masking 模块,提出了clip-path属性,标志着clip-path从 SVG 扩展到了 CSS;到2013年,WebKit 率先实现支持,提供了实验性功能;在2014年,规范进一步扩展clip-path,允许使用path()函数来定义复杂的 SVG 路径;到2017年,得到主流浏览器的广泛支持;最终在2019年,W3C 发布了 CSS Masking Module Level 1正式推荐标准,标志着clip-path正式成为 W3C 认可的 CSS 属性,定义了裁剪元素的规范行为和使用方式

其兼容性如下

裁剪路径

定义裁剪区域的形状,可以是几何形状或者 SVG 路径

Basic Shape

定义裁剪的几何形状,clip-path提供了几种常见的几何形状函数

inset

用于定义了一个矩形

  • 对于<length-percentage>,可以是124个值,与 CSS 常规的margin等类似理解,其值表示距离参考框内侧的偏移量
  • round后面接border-radius值,表示每个顶点的圆角值
  • 值可以是百分比或单位数值

举个栗子

上侧代码效果如下

绿色区域表示参考框区域

circle

用于定义一个圆形裁剪区域,使用半径和位置来描述

  • <radial-size>用于定义圆的半径,可以是单位数值、百分比或closest-sidefarthest-side关键字
    • closest-side表示圆心到参考框最近边缘的长度
    • farthest-side表示圆心到参考框最远边缘的长度
  • at后接<position>值,用于定位圆心位置,其值可以是单位数值、百分比或类似left的值

举个栗子

上侧代码效果如下

红点表示圆心位置

ellipse

用于定义一个椭圆形的裁剪区域,与circle使用类似

  • <radial-size>用于定义椭圆的两个半径,按顺序为xy,数值类型与circle一致
  • at后接<position>用于定义椭圆圆心位置

举个栗子

上侧代码效果如下

polygon

通过任意个坐标对定义一个多边形形状

  • fill-rule可以是nonzero(默认值)或evenodd,指定填充规则;利用polygon可以画出很多复杂图形,有些时候并不能很好地区分一个点算图形的外部还是内部,此时就需要根据填充规则判断,区分内外,从而给图形内上色或裁剪
    • nonzero表示非零填充规则,计算原理为:从图形任意点向无限远画一条直线,计算直线穿过路径边界的次数,如果穿过路径时,路径的方向是顺时针,则加1;如果是逆时针,则减1,计算所有穿越路径的次数之,结果非零,则为内部,反之就是外部,不算在裁剪区域内
    • evenodd表示奇偶填充规则,计算原理为:从图形任意点向无限远画一条直线,计算直线穿过路径边界的次数,如果直线穿过边界的次数为奇数,则该区域被认为是内部,会被裁剪;如果次数为偶数,则该区域是外部,不会被裁剪
  • 坐标值可以有任意对,表示多边形的各个顶点,数值可以是单位数值或百分比

举个栗子

上侧代码效果如下

path

通过路径命令定义一条路径,与 SVG <path>元素的d属性类似

  • fill-rulepolygon类似,用于定义路径的哪些部分位于形状内,同样提供两个可选值:nonzeroevenodd
  • <string>为路径命令字符串,特别的,路径中的所有长度都以像素作为隐式单位,且不能更改其它单位

举个栗子

大致可呈现效果

使用path可实现极其复杂的裁剪形状,但其存在数值单位仅可为像素的限制

针对这种限制,在 CSS 的一项实验性技术中,提出了shape()函数,它将初始起点与定义形状路径的一系列形状命令组合在一起,可以看着path的增强版,不再限制于像素单位,可以用百分比数值,使用更灵活;不过,仅有firefox提供实验性支持,感兴趣可以自行了解

Geometry Box

参考框是用于决定裁剪区域的相对参照物,其定义了几何形状的尺寸和位置,以下是几个常见参考框的介绍

边框盒 (border-box)

  • 元素的边框区域,即包含了内容、内边距(padding)、以及边框的区域
  • 这是clip-path最常用(默认)的参考框

内容盒 (content-box)

  • 元素的内容区域,不包含内边距和边框
  • 使用内容盒作为参考框时,裁剪形状只基于元素的内容区域计算

填充盒 (padding-box)

  • 元素的内容区域加上内边距,但不包含边框
  • 这种参考框主要用于需要精确控制元素裁剪时,忽略掉边框

边距盒 (margin-box)

  • 元素的整个外部区域,包括边距
  • 边距盒通常较少使用,除非希望裁剪形状涵盖所有元素空间,包括外部边距

大致效果参考如下

其中,margin不属于可见内容区域,故margin区域的内容不会显示

应用场景

clip-path的应用场景可以有很多,如:

裁剪图片:如何将图片裁剪成各种形状

创意按钮和卡片设计:结合clip-pathCSS,实现独特的 UI 元素

页面布局中的非矩形设计:打造富有视觉冲击力的设计效果

动画效果:结合动画与clip-path,可以制作出有趣的裁剪效果,如:元素的某一部分逐渐出现或消失;形状由圆形变为矩形等

总结

CSS clip-path属性提供了强大且灵活的裁剪工具,它让网页设计更加富有创意,并且大大简化了布局设计的实现;无论是裁剪图片、设计 UI 元素,还是创造动画效果,clip-path都为前端开发者提供了无限的可能性;通过掌握clip-path,能够轻松地提升网页的视觉效果,让用户体验更加精彩


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言