clip-path

clip-path是什么

clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐藏。通过定义这个剪切路径(clipping path),您可以创造出非矩形的裁剪形状,使元素内容按特定的几何形状展示。

clip-path 的工作原理

clip-path 属性通过定义裁剪路径来确定元素的可视区域。这意味着,你可以指定一个形状或路径,只有位于这个形状或路径内的部分才会被显示出来,其余部分则会被裁剪掉。这种裁剪可以是简单的几何形状,如圆形、椭圆形或多边形,也可以是复杂的 SVG 路径。

裁切示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.box {
width: 200px;
height: 200px;
text-align: center;
background-color: #888;
}
img {
width: 200px;
}
.item {
margin-right: 10px;
}
.text {
font-size: 14px;
color: #666;
}
.clip-path1 {
clip-path: inset(20px);
}
.clip-path2 {
clip-path: inset(0rem 0rem 0rem 1rem);
}
.clip-path3 {
clip-path: inset(0% 50px 0% 50px round 50%);
}
.clip-path4 {
clip-path: inset(1rem 0rem 0rem 1rem round 0rem 2rem 5rem 0rem);
}
.flex {
display: flex;
}
.hide {
display: none;
}
.circle1 {
clip-path: circle(50% at 50% 50%);
}
.circle2 {
clip-path: circle(20% at 50% 50%);
}
.circle3 {
clip-path: circle(50% at 0% 0%);
}
.element:hover {
clip-path: circle(75% at 50% 50%);
transition: clip-path 0.5s ease;
opacity: 0.7; /* 当鼠标悬停时,图片透明度变为0.7 */
transform: scale(1.1); /* 或放大图片 */
cursor: pointer; /* 改变鼠标指针样式为手型 */
}
.ellipse1 {
clip-path: ellipse(20% 50% at 50% 50%); }
.polygon1 {
clip-path: polygon(0 0, 50% 20%, 100% 0, 100% 100%, 0 100%);
} .shape {
width: 200px;
height: 200px;
background-color: red;
/* transition: clip-path 1s ease-in-out; */
} .shape:hover {
/* clip-path: circle(50% at 50% 50%); */
} /* 动画实现从方形到圆形的变化 */
@keyframes shape-transform {
0% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
100% {
clip-path: circle(50% at 50% 50%);
}
} /* 如果你想在悬停时使用动画而不是直接转换,取消上面:hover的直接样式,改为下面这一行 */
.shape:hover { animation: shape-transform 1s forwards; }
</style>
</style>
</head>
<body>
<p>原始图</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="element"
/>
</div>
<hr />
<!-- inset内嵌 -->
<div class="flex">
<div class="item">
<p class="text">clip-path: inset(20px);</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="clip-path"
/>
</div>
</div>
<div class="item">
<p class="text">clip-path: inset(0rem 0rem 0rem 1rem);</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="clip-path2"
/>
</div>
</div>
<div class="item">
<p class="text">clip-path: inset(0% 50px 0% 50px round 50%);</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="clip-path3"
/>
</div>
</div>
<div class="item">
<p class="text">
clip-path: inset(1rem 0rem 0rem 1rem round 0rem 2rem 5rem 0rem);
</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="clip-path4"
/>
</div>
</div>
</div>
<hr />
<!-- circle圆形 -->
<div class="flex">
<div class="item">
<p class="text">circle(50% at 50% 50%)</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="circle1"
/>
</div>
</div>
<div class="item">
<p class="text">circle(20% at 50% 50%)</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="circle2"
/>
</div>
</div>
<div class="item">
<p class="text">circle(50% at 0% 0%)</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="circle3"
/>
</div>
</div>
</div> <!-- ellipse 椭圆 -->
<div class="flex">
<div class="item">
<p class="text">ellipse(20% 50% at 50% 50%)</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="ellipse1"
/>
</div>
</div>
</div>
<hr /> <!-- 多边形 (polygon) -->
<div class="flex">
<div class="item">
<p class="text">polygon(0 0, 50% 20%, 100% 0, 100% 100%, 0 100%)</p>
<div class="box">
<img
src="https://jtcospublic.ciccten.com/config-server/1702366048109860837/public.png"
alt=""
class="polygon1"
/>
</div>
</div>
</div>
<div class="shape hide"></div>
</body>
</html>

支持的基本形状

内嵌 (inset)

这创建了一个内嵌的剪裁区域,其中的四个值分别对应上、右、下、左的剪裁量。

参数:
inset( top right bottom left round <border-radius> )
例如参数最多的设置写法:
.clip-path4 {
clip-path: inset(1rem 0rem 0rem 1rem round 0rem 2rem 5rem 0rem);
}
圆形 (circle)

这将创建一个圆形剪裁区域,其中50%是圆的半径,at 50% 50%指定了圆心的位置(相对于元素的宽高)。

参数:clip-path: circle(radius at x-axis y-axis);
第一个参数是必需的,表示圆形裁剪区域的半径。
第二个参数是可选的,用于指定圆形裁剪区域的圆心位置。如果省略这个参数,默认圆心位于元素的中心
.circle2 {
clip-path: circle(20% at 50% 50%);
}
椭圆 (ellipse)

这里创建了一个椭圆形剪裁区域,其中第一个值和第二个值分别是椭圆的水平半径和垂直半径,at 50% 50%指定了椭圆中心的位置。

参数:clip-path: ellipse(rx ry at x-axis y-axis);
第一个和第二个参数是必需的,分别表示椭圆的水平半径(X轴半径)和垂直半径(Y轴半径)。
.ellipse1 {
clip-path: ellipse(20% 50% at 50% 50%);
}
多边形 (polygon)

函数用于创建一个任意多边形裁剪区域,它接受一系列坐标对作为参数,每个坐标对代表多边形的一个顶点。

参数:clip-path: polygon(x1 y1, x2 y2, ..., xn yn);
.polygon1 {
clip-path: polygon(0 0, 50% 20%, 100% 0, 100% 100%, 0 100%);
}

实践示例

投顾的图片很大(为什么投顾头像很大,有其他展示需求,想复用同一个图片),但是仅需要裁切展示上半部分。,塞进背景后面的小黄圈里面。做法是使用clip-path属性来裁切图片,仅展示想要展示的那部分。简略代码如下:

<!-- 投顾头像 -->
<div class="consult-icon-image" @click="linkIC">
<img :src="consultor.img" />
</div> <style>
.consult-icon-image {
position: relative;
top: 2px;
display: inline-block;
width: 60px !important;
height: 60px !important;
border-radius: 50%;
-webkit-backface-visibility: hidden;
-webkit-transform: translate3d(0, 0, 0);
background: linear-gradient(137.97deg, #fff3ea 0%, #f5b39b 120.86%);
border: 2px solid #f9e2c7;
box-sizing: border-box;
vertical-align: top; img {
// 需要放大投顾头像
clip-path: inset(0 0.6rem 1.3rem 0.6rem round 100% 100% 90% 90%);
position: absolute;
width: 150%;
top: -34%;
left: 50%;
transform: rotateY(-180deg) translateX(50%);
}
}
</style>

优势与局限性

  • 设计自由度:极大地提高了网页设计的灵活性,摆脱了传统的矩形框架约束。
  • 性能优化:相比于直接使用图片遮罩,clip-path 的渲染效率更高,减轻服务器负担,提高页面加载速度。
  • 响应式设计:结合CSS媒体查询,可以轻松实现不同屏幕尺寸下的响应式裁剪效果。
  • 复用性与易维护性:尤其是当配合SVG路径引用时,裁剪路径可以独立管理,便于复用和修改。

深入理解与应用CSS clip-path 属性的更多相关文章

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

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

  2. 深入理解css中position属性及z-index属性

    深入理解css中position属性及z-index属性 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共 ...

  3. 理解与应用css中的display属性

    理解与应用css中的display属性 display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有: none block inline inline-block inherit 下面, ...

  4. 深入理解css中position属性及z-index属性 https://www.cnblogs.com/zhuzhenwei918/p/6112034.html

    深入理解css中position属性及z-index属性 请看出处:https://www.cnblogs.com/zhuzhenwei918/p/6112034.html 在网页设计中,positi ...

  5. CSS中box-sizing属性的理解与部分用法

    今天看了一些关于box-sizing的一些资料,在这里整理一下,希望也能对大家有所帮助. box-sizing是CSS的一个属性,很好的解决了盒模型的相关问题.CSS中的盒模型(Box model)分 ...

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

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

  7. CSS的常用属性

    刚开始学习前段的我,还处于初级阶段,一些东西还是会有搞不明白的时候,还是要大家多多理解.今说就一些关于CSS的常用属性吧! 一.CSS常用选择器 CSS选择器应该说是一个非常重要的工具吧,选择器用得好 ...

  8. css常用样式属性详细介绍

    对于初学css的来说,肯定会觉得这么多样式不好记,而且记住了也容易忘,其实刚开始我们不用去记这么多的样式,确实是记了也会忘,刚开始只需记住一些常用的就可以了,然后在慢慢的使用过程当中接触并学习一些高级 ...

  9. CSS样式常用属性整理

    web工程师是最近5年刚刚兴起的一门高薪职业,人们的专注度越来越高. 那么前端除了学习html标签之外还需要掌握什么知识点呢? 为大家整理了一个和HTML标签密不可分的知识要点--<CSS样式常 ...

  10. CSS Counters 计数属性

    CSS Counters其实就是一计数器,早期在CSS中计数器仅存在于ul和ol元素.如果要使用在div这样的元素上,只能通过list-style-image或者是元素的backgroud-image ...

随机推荐

  1. RocketMQ—引言

    RocketMQ-引言 MQ介绍 在学习RocketMQ之前,我们先来看以下MQ的意思. MQ是Message Queue的首字母缩写. Message:意思为消息,在我们生活中可以是一句话/一个短信 ...

  2. C++ 实现的Ping类的封装

    Ping 使用 Internet 控制消息协议(ICMP)来测试主机之间的连接.当用户发送一个 ping 请求时,则对应的发送一个 ICMP Echo 请求消息到目标主机,并等待目标主机回复一个 IC ...

  3. 构建LVS负载均衡集群

    LVS即Linux虚拟服务器,目前 LVS 已经被集成到 Linux 内核模块中,该项目在 Linux 内核实现了基于 IP 的数据请求负载均衡调度方案,LVS集群采用IP负载均衡技术和基于内容请求分 ...

  4. 关于 React 的作业(未完结)

    一.输出 Hello React 信息到网页的程序,非JSX的写法 代码实现如下: <!DOCTYPE html> <html lang="en"> < ...

  5. 极限挑战:使用 Go 打造百亿级文件系统的实践之旅

    JuiceFS 企业版是一款为云环境设计的分布式文件系统,单命名空间内可稳定管理高达百亿级数量的文件. 构建这个大规模.高性能的文件系统面临众多复杂性挑战,其中最为关键的环节之一就是元数据引擎的设计. ...

  6. PyTorch下,使用list放置模块,导致计算设备不一的报错

    报错 在复现 Transformer 代码的训练阶段时,发生报错: RuntimeError: Expected all tensors to be on the same device, but f ...

  7. ABC306 A - F

    ABC306 A - F 代码不提供 A 题意:吧字符串的每个字符连续输出两遍,记得不要快读,不要忘记输入 $ n $ 纪念 Qinzh A 题 WA 掉 B 题意:给定长度为 $ 64 $ 的数组 ...

  8. Windows10系统下JDK1.8的下载安装及环境变量配置

    1. JDK1.8安装 2. 环境变量配置点击此处:官网下载 根据自己的系统 ,下载相应的JDK版本. 1. JDK1.8安装双击下载的安装包(.exe文件),进行安装. 点击"下一步&qu ...

  9. 机器学习基础03DAY

    特征降维 降维 PCA(Principal component analysis),主成分分析.特点是保存数据集中对方差影响最大的那些特征,PCA极其容易受到数据中特征范围影响,所以在运用PCA前一定 ...

  10. NC19872 [AHOI2005]SHUFFLE 洗牌

    题目链接 题目 题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小 ...