前言

我是在搞 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. 通过canvas计算任意两个颜色的插值

    通过canvas可以协助我们做很多颜色计算的辅助,比如颜色转换,渐变颜色计算. 对于颜色转换,之前写过一篇文章:<通过canvas转换颜色为RGBA格式及性能问题> , 读者可以查阅该篇文 ...

  2. oeasy教您玩转vim - 43 - # 替换模式

    ​ 替换模式 回忆上节课内容 上次我们学到的最有用的就是c 他和d的区别就是删除之后进入到插入模式 c可以配合motion 可以用ciw来快速删除当前光标所在的单词 可i和a 配合的文字块 w wor ...

  3. 在.NET Web API设置响应输出Json数据格式常用的两种方式

    前言 在ASP.NET Core Web API中设置响应输出Json数据格式常用以下两种方式:可以通过添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化库在 ...

  4. leetcode2397. 被列覆盖的最多行数 回溯法/枝剪

    第一次手搓一个回溯法,超时后采用枝剪勉强通过 class Solution { int max=0; int numSelect; public int maximumRows(int[][] mat ...

  5. java开发环境安装IDEA+jdk1.8

    一. 需要得安装包 (1)IDEA破解版.zip (2)jdk1.8.0_25.7z 获取方式(免费): (1)       登录-注册:http://resources.kittytiger.cn/ ...

  6. Vue Hook 封装通用型表格

    一.创建通用型表格的需求 实现一个通用型表格组件,具备以下功能: 动态列配置. 分页功能. 排序功能. 可扩展的行操作功能. 二.设计通用型表格组件 首先,需要设计一个基础的表格组件,它接受列配置.数 ...

  7. 【MySQL】 线上补数据SQL

    昨天一下午就为了补业务数据,写SQL快崩溃了得... 直接贴不解释了 -- 先拿到[销售变更id]拿到[变更信息] -- 通过[变更信息]的主表id拿到[主表信息] -- 条件可以是 MAX(cc.i ...

  8. blender建模渲染Tips

    blender渲染 灯光的三种方式 1,常规灯光:shift+A选择灯光. 2,世界环境光:右侧地球图标调整. 3,物体自发光:把渲染物体变成一个发光体来进行调节灯光. 渲染视窗的调节 ctrl+b裁 ...

  9. pyqt报错、python报错:src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没有那个文件或目录

    报错信息: -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /home/devil/anaconda3/envs/91/include -fPIC -O2 ...

  10. 如何使用工具下载B站非会员视频(下载B站免费web视频)

    最近准备从B站上下载几个web页面上的视频,但是B站的视频又没有提供相关的下载工具,于是找到了一款下载B站视频的工具( you-get ), 该工具不能下载会员版的视频,不能下载收费的视频,不过对于免 ...