前言

我是在搞 1 side box-shadow 发现这个功能的. 平常很少做特效, 所以对这个好功能缺乏认识.

这篇大概记入一下先, 以后有认真用再补上细节.

参考

Youtube – Awesome UI Interactions with the CSS Clip Path Property

Stack Overflow – How can I add a box-shadow on one side of an element?

The Awesome CSS Clip-path Property

CSS clip-path maker

Youtube – How to make shapes with CSS

介绍

它主要的功能就是把一个 div clip 出各种形状. 配上 animation 就可以做出变 "形状" 效果了.

比如把一个正方形, 变成圆形, 六角形, 什么形都可以.

画圆形

<div class="container">
<div class="box1"></div>
<div class="box2"></div>
</div>

通常画圆形, 我们会用 border-radius, 但用 clip-path 会更直观哦

.container {
.box1 {
width: 100px;
height: 100px;
background-color: pink;
border-radius: 50%;
}
.box2 {
margin-top: 1rem;
width: 100px;
height: 100px;
background-color: lightblue;
clip-path: circle(50%);
}
}

效果是一模一样的

clip-path 还有更厉害的地方是它可以控制 position

.container {
border: 1px solid red;
.box1 {
width: 400px;
height: 200px;
background-color: pink;
clip-path: circle(30px at 100px 100px);
}
}

效果

不一定要用 px, 用 percentage 也可以 (但我不清楚它的具体算法. 它的 percentage 不是 depend on width 的)

画各种形状

之前写 CSS – border-radius (Rounded Corners) 有介绍过画各种形状. 但是它并不是真的什么形状都画的出来. 很 limitation 的.

而 clip path 就很强大. 几乎啥形状都可以画, 可以用这个工具玩玩看 CSS clip-path maker

常用的是 circle (圆形), ellipse (椭圆形), polygon (多角形, 如上图)

Section Design Curve

参考: CodePen – Clip-Path Curve

在 CSS & JS Effect – Section Design Waves 有介绍过各种 section design.

那篇的实现方法都是基于 SVG 的. 但其实有些简单的 design 是可以直接用 Clip 完成的. 比如 Curve.

clip-path: ellipse(100% 100% at 50% 0%);

效果

ellipse 是画椭圆形, 然后利用 size 做出 curve 的效果,

主要是调第一个参数, 它依据 section 的高度决定弧度, 所以很难控制. 通常在 100% - 200% 左右.

one side box shadow

一样是用 box-shadow 来做影子, 只是用了 clip 把不想要的 3 边影子 clip 掉. 这里的关键是 inset

inset 的用法是这样的

clip-path: inset(20px 20px 50px 20px);

效果

有点像 padding. top right bottom left 往内 clip.

回到 box-shadow 的例子. inset(0, -15px 0 0)

如果是 4 个 0, 那么所有 shadow 都看不见.

right 15px 是往内 clip, 反过来 right -15px 是往外. 所以反而 right shadow 就出现了. 很巧妙的技巧.

但也可以看出不是正规做法. 但是比起 spread 这招还是比较好使的.

clip-path evenodd 实现挖洞效果

参考: Stack Overflow – Hole in overlay with CSS [duplicate]

最终效果

中间红色的正方形就是我 clip 出来的洞,背景是红色。

一般而言 clip 是保留我们选择的范围,而不是除去选择的范围。所以要实现上面这种效果需要一个新招叫 evenodd。

它的原理是这样,画 2 个形状 (比如用 polygon)

这 2 个形状都会被保留,但是它们交互的区域不会被保留。

依据这个规则,挖洞效果是这样实现的。

首先 clip 整张图

然后中间画一个匡

中心的区域是交互的,它不会被保留,这就形成了 clip 一个洞的效果了。

img {
--rect-size: 75px;
clip-path: polygon(
evenodd, /* 关键 */
0 0,
100% 0,
100% 100%,
0% 100%,
0 0, /* 记得要连回去 */
calc(50% - var(--rect-size) / 2) calc(50% - var(--rect-size) / 2),
calc(50% + var(--rect-size) / 2) calc(50% - var(--rect-size) / 2),
calc(50% + var(--rect-size) / 2) calc(50% + var(--rect-size) / 2),
calc(50% - var(--rect-size) / 2) calc(50% + var(--rect-size) / 2),
calc(50% - var(--rect-size) / 2) calc(50% - var(--rect-size) / 2) /* 记得要连回去 */
);
}

1. 要放 evenodd

2. 一个形状必须是闭环的,记得要放最后一个点回到起始点形成闭环。

CSS – Clip Path的更多相关文章

  1. CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板。

    CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板. CLIP PATH (MASK) GENERATO ...

  2. CSS clip:rect矩形剪裁功能及一些应用介绍

    CSS clip:rect矩形剪裁功能及一些应用介绍 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...

  3. CSS Clip剪切元素动画实例

    1.CSS .fixed { position: fixed; width: 90px; height: 90px; background: red; border: 0px solid blue; ...

  4. [ javascript css clip ] javascript css clip 的奇思妙想之文字拼接效果

      语法: clip : auto | rect ( number number number number ) 参数: auto : 对象无剪切 rect ( number number numbe ...

  5. 将CSS CLIP属性应用在:扩展覆盖效果

    我们想要展示如何利用CSS3 clip属性制作一种简单而整洁的扩展效果,当点击一个box元素时实现平稳过渡.这个想法是为了实现某种叠加效果,好像它实际上在各个元素的下面.点击其中一个元素将创建一个切断 ...

  6. CSS Clip剪切元素实例

    一.实例1: .fixed { position: fixed; width: 382px; height: 100px; background: red; border: 1px solid blu ...

  7. CSS Clip属性

    Clip属性在W3C官网是这样进行描述的:“通过对元素进行剪切来控制元素的可显示区域,默认情况下,元素是不进行任何剪切的,但是也有可能剪切区域也显示的设置了clip属性”. .selector { c ...

  8. 理解CSS Clip属性及用法

    应用Clip属性实现的一个简单效果图: 样式写法: .my-element { position: absolute; clip: rect(10px  350px  170px  0); /* IE ...

  9. CSS clip:rect矩形剪裁功能及应用

    .clip{ position:absolute; clip: rect(10px 30px 20px 10px); } 最后有必要说明下:clip:rect矩形剪裁只能作用于position:abs ...

  10. css clip样式 属性功能及作用

    clip clip 在学前端的小伙伴前,估计是很少用到的,代码中也是很少看见的,但是,样式中有这样的代码,下面让我们来讲讲他吧! 这个我也做了很久的开发没碰到过这个属性,知道我在一个项目中,有一个功能 ...

随机推荐

  1. 【算法】用c#实现自定义字符串编码及围栏解码方法

    编写一个函数/方法,它接受2个参数.一个字符串和轨道数,并返回ENCODED字符串. 编写第二个函数/方法,它接受2个参数.一个编码字符串和轨道数,并返回DECODED字符串. 然后使用围栏密码对其进 ...

  2. MySQL_数据库命名规范及约定

    操作规范 如无说明,建表时一律采用innodb引擎: 如无说明,数据库表编码集(utf8,utf8_bin)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf ...

  3. JavaWeb编写登录注册案例并把数据插入MySQL数据库中

    小白学习了这么久的java,第一次上手编写一个完整的登录以及注册案例,麻雀虽小五脏俱全!!!! 案例: 登录和注册 第一:所需创建的包以及相关类 1,domain包(也就是平时所说的Javabean) ...

  4. Rust 中 *、&、mut、&mut、ref、ref mut 的用法和区别

    Rust 中 *.&.mut.&mut.ref.ref mut 的用法和区别 在 Rust 中,*.ref.mut.& 和 ref mut 是用于处理引用.解引用和可变性的关键 ...

  5. php环境,性能优化

    根据宝塔的推荐进行参数修改 我的是8G内存,修改成4G内存 下面是备份:修改前的 ; Start a new pool named 'www'.; the variable $pool can be ...

  6. XXL-JOB分片执行分布式任务

    XXL-JOB相对于springtask来说优点之一就是分布式执行任务,可以在调度中心为执行器分发任务,实现分布式. 分片广播任务即当一个微服务形成集群的时候,任务会完整的下发给每一个执行器.而不像其 ...

  7. 【Java】Oshi 硬件信息读取库

    实现的功能: 用于开发服务器监控面板,获取服务器硬件参数 官方Github仓库地址: https://github.com/oshi/oshi Maven坐标: <!-- https://mvn ...

  8. 【SpringCloud】Re03 Feign

    Feign是一个声明式的HttpClient?更简洁的实现Http请求发送 安装Feign组件: 配置Feign的依赖坐标: <?xml version="1.0" enco ...

  9. 【SpringBoot】12 Web开发 Part3 SpringMVC扩展

    例如我们习惯于SSM的xml配置, 这是使用MVC的容器跳转方式 <?xml version="1.0" encoding="UTF-8"?> &l ...

  10. 贝塔分布 beta分布的累积分布函数(CDF)计算 —— 如何使用二项式分布表示beta分布的概率累积函数

    贝塔分布 beta分布的累积分布函数(CDF)的计算公式: 计算beta分布的累积分布函数(CDF)是需要计算积分的,但是最近发现另一种计算方法,即,使用二项式分布计算beta分布的概率累积函数. b ...