前言

我是在搞 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. linux信号机制(初识版)

    转载 https://www.zhihu.com/question/24913599/answer/2584544572 信号是操作系统内核为我们提供用于在进程间通信的机制,内核可以利用信号来通知进程 ...

  2. TP5 连接多个数据库

    use think\Config; $config = Config::get('database2'); //读取第二个数据库配置 $connect = Db::connect($config); ...

  3. 【楔子】单细胞测序-最佳的分析Pipeline

    作者:starlitnightly 日期:2023.07.14 !!! note 楔子 从事单细胞分析也有一段时间了,国内大部分中文教程都是使用R语言进行分析,使用Python的还比较少,或者是直译s ...

  4. RHCA rh442 007 hugetlbfs strace命令追踪 脏页设置 内存分配

    内存管理 虚拟内存 --- 物理内存 应用程序申请虚拟内存 --- RAM + SWAP (真正主板上的设备) 他们之间有一张映射表 page table 页表 PTE: 页表条目 虚拟内存和物理内存 ...

  5. 【ActiveJdbc】05

    一.事务 通常在 Java ORM 中有一个显式连接或管理器对象(JPA 中的 EntityManager,Hibernate 中的 SessionManager 等). ActiveJDBC 中没有 ...

  6. nvidia官方AI框架软件的命令行操作接口 —— NVIDIA GPU Cloud (NGC) CLI

    NVIDIA GPU Cloud (NGC) CLI 安装介绍地址: https://org.ngc.nvidia.com/setup/installers/cli 安装好后需要输入自己的NVIDIA ...

  7. 大语言模型(LLM)运行报错:AttributeError: module 'streamlit' has no attribute 'cache_resource'

    解决方法: https://blog.csdn.net/javastart/article/details/130785100 (图:https://blog.csdn.net/javastart/a ...

  8. 如何使用强化学习算法解决15-puzzle问题,即所谓的“十五谜题”推盘游戏

    相关: https://medium.com/@amshali/15-puzzle-with-reinforcement-learning-8bcfc1aa54e7 什么是15-puzzle问题? 数 ...

  9. 如何在通用异常处理时获取到方法名称(获取注解参数JoinPoint)

    1.背景 很多时候我们在梳理公共异常时,需要获取到接口的而具体名称,便于很好的提示是那个接口错误了 2.实现逻辑 1.在controller方法上的注解上写方法名称,一般使用了swagger都有方法名 ...

  10. php日常收获

    php 1.sprintf 用法(晚上写成blog w3cschool可查) 2.使用thinkphp getfield 方法时只查询一个字段默认返回第一条数据, 如果想要返回数组需要写成: $thi ...