CSS3 clip-path属性实战:动态区域裁剪

本篇文章带大家了解一下css3 clip-path(裁剪路径),介绍一下如何利用 clip-path 实现动态区域裁剪,希望对大家有所帮助!

CSS3 clip-path属性实战:动态区域裁剪

今天逛 CodePen,看到了这样一个非常有意思的效果:

1.gif

CodePen Demo — Material Design Menu By Bennett Feely网址:https://codepen.io/bennettfeely/pen/fHdFb

这个效果还是有一些值得探讨学习的点,下面我们一起来看看。

立即学习“前端免费学习笔记(深入)”;

如何实现这样一个类似的效果?

首先,想一想,如果让你去实现上面的效果,你会怎么做呢?

这里我简单罗列一些可能的办法:

阴影 box-shadow

渐变 radial-gradient

缩放 transform: scale()

快速的一个一个过一下。

使用 box-shadow 实现

如果使用 box-shadow,代码大致如下:

.g-container {    position: relative;    width: 400px;    height: 300px;    overflow: hidden;}.g-item {    position: absolute;    width: 48px;    height: 48px;    border-radius: 50%;    background: #fff;    top: 20px;    left: 20px;    box-shadow: 0 0 0 0 #fff;    transition: box-shadow .3s linear;        &:hover {        box-shadow: 0 0 0 420px #fff;    }}

核心就在于:

外层一个设置了 overflow: hideen 的遮罩

内层元素 hover 的时候,实现一个 box-shadow: 0 0 0 0 #fffbox-shadow: 0 0 0 420px #fff 的变化

效果如下:

2.gif

整体的动画是模拟出来了,但是它最致命的问题有两个:

当我们的鼠标离开圆形的时候,整个动画就开始反向进行了,白色区域开始消失,如果我们要进行按钮操作,是无法完成的

隐藏在动画展开后的矩形内的元素,不容易放置

所以,box-shadow 看着虽好,但是只能放弃。

上述 Demo 的代码 — CodePen Demo — box-shadow zoom in animation

网址:https://codepen.io/Chokcoco/pen/jOLRQNy

使用渐变 radial-gradient 实现

下面我们使用径向渐变 radial-gradient 加上 CSS @property,也可以还原上述效果:

@property --size {  syntax: '';  inherits: false;  initial-value: 24px;}.g-container {    position: relative;    width: 400px;    height: 300px;    overflow: hidden;    background: radial-gradient(circle at 44px 44px, #fff 0, #fff var(--size), transparent var(--size), transparent 0);    transition: --size .3s linear;        &:hover {        --size: 450px;    }}

我们通过控制径向渐变的动画效果,在 hover 的时候,让原本只是一个小圆背景,变成一个大圆背景,效果如下:

3.gif

emmm,效果确实是还原了,问题也很致命:

由于是背景的变化,所以鼠标不需要 hover 到小圆上,只需要进入 div 的范围,动画就会开始,这显然是不对的

和第一种 box-shadow 的方法类似,隐藏在白色之下的导航元素的 DOM 不好放置

上述 Demo 的代码 — CodePen Demo — radial-gradient zoom in animation

网址:https://codepen.io/Chokcoco/pen/RwZOqWb

emmm,还有一种方法,通过缩放 transform: scale(),也会存一定问题,这里不继续展开。

所以到这里,想实现上述的效果,核心在于:

鼠标要 hover 到圆上,才能开始动画,并且,鼠标可以在展开后的范围内自由移动,且不会收回动画效果

动画展开后,里面的 DOM 的放置,不能太麻烦,能不借助 Javascript 去控制里面内容的显示隐藏最好

利用 clip-path 实现动态区域裁剪

所以,这里,我们其实是需要一个动态的区域裁剪

在我的这篇文章中 — 如何不使用 overflow: hidden 实现 overflow: hidden?,介绍了 CSS 中几种裁剪元素的方式,而其中,最适合利用在这个效果的,就是 — clip-path

利用 clip-path,可以非常好的实现,动态裁剪的功能,并且,代码也非常简单:

.g-container {    position: relative;    width: 400px;    height: 300px;    overflow: hidden;    transition: clip-path .3s linear;    clip-path: circle(20px at 44px 44px);    background: #fff;        &:hover {        clip-path: circle(460px at 44px 44px);    }}

我们只需要利用 clip-path,在最开始的时候,将一个矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一个圆,当 hover 的时候,扩大裁剪圆的半径到整个矩形范围即可。

效果如下:

4.gif

这样,我们就能完美的实现题图的效果,并且,内置的 DOM 元素,直接写进这个 div 内部即可。

  • 11111
  • 22222
  • 33333
  • 44444

效果如下:

5.gif

CodePen Demo — clip-path zoom in animation

网址:https://codepen.io/Chokcoco/pen/yLorrRm

很有意思的一个技巧,利用 clip-path 实现动态区域裁剪,希望大家能够掌握。

最后

好了,本文到此结束,希望本文对你有所帮助 :)

(学习视频分享:css视频教程)

以上就是CSS3 clip-path属性实战:动态区域裁剪的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1623483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 08:19:12
下一篇 2025年12月24日 08:19:22

相关推荐

  • css3背景怎么实现线性渐变

    在css3中,可以使用background属性和linear-gradient()函数来实现背景线性渐变,语法“background:linear-gradient(渐变方向,颜色1,颜色2,…);”。 本教程操作环境:windows7系统、CSS3&&HTML5版、De…

    2025年12月24日 好文分享
    000
  • 怎么利用css3实现下凹型字体

    方法:1、使用color属性将字体颜色设置的和背景色一致;2、使用text-shadow属性给文字加阴影来实现下凹型字体效果,语法“text-shadow: -1px -1px 1px #000, 1px 1px 1px #fff;”。 本教程操作环境:windows7系统、CSS3&&am…

    2025年12月24日
    000
  • css3怎么实现一个旋转的动画

    实现方法:1、使用“@keyframes 动画名称 {50% {transform: rotate(旋转角度);}”语句创建旋转动画;2、使用“元素{animation:动画名称 时间 infinite;}”语句将旋转动画应用于指定元素中。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000
  • css3可以加文字描边吗

    css3可以加描边,方法:1、使用text-shadow属性,通过给文字周围添加文字阴影来实现描边效果;2、使用text-stroke属性,语法“text-stroke:描边宽度 颜色;”;3、利用SVG给文字加描边。 本教程操作环境:windows7系统、CSS3&&HTML5版、…

    2025年12月24日 好文分享
    000
  • css3怎么实现放大旋转动画效果

    方法:1、使用animation属性给元素绑定动画;2、使用“@keyframes 动画名{50%{width:放大的宽度值;height:放大的高度值;transform:rotate(旋转角度);}}”语句控制动画的动作,实现放大旋转。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日
    000
  • css3怎么实现元素左右翻转

    方法:1、使用“animation: 动画名称 5s infinite;”语句给元素绑定动画;2、使用“@keyframes 动画名称 {50% {transform: scale(-1,1);}}”语句控制动画的动作,实现左右翻转效果。 本教程操作环境:windows7系统、CSS3&&a…

    2025年12月24日
    000
  • css3怎么去掉input光标

    去掉方法:1、给input元素添加“color:transparent;text-shadow: 0px 0px 0px #333;”样式即可。2、给input元素添加“caret-color:transparent;”样式即可。 本教程操作环境:windows7系统、CSS3&&H…

    2025年12月24日
    000
  • css3怎么实现边框的圆角和阴影

    css3中,可利用border-radius属性实现圆角,语法“border-radius:圆角半径值;”;可利用box-shadow属性实现阴影,语法“box-shadow:X轴偏移量 Y轴偏移量 模糊半径 扩展半径 颜色 投影方式;”。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日 好文分享
    000
  • css3怎么实现点击隐藏div

    在css3中,可以利用“:active”选择器和display属性来实现点击隐藏div的效果,只需要给div元素添加“” 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 在css3中,可以利用“:active”选择器和display属性来实现点击…

    2025年12月24日
    000
  • css3怎么将背景设置为渐变色

    设置方法:1、使用“background:linear-gradient(渐变方向,颜色1,颜色2,..);”语句;2、使用“background:radial-gradient(shape 大小 位置,开始颜色,..,终止颜色);”语句。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日 好文分享
    000
  • CSS3变形是什么

    CSS3变形指的是利用transform属性对元素进行旋转、扭曲、缩放、位移、矩阵、原点等类型的变形处理;元素的变形操作需要配合使用rotate()、skew()、scale()、translate()、matrix()等函数来实现。 本教程操作环境:windows7系统、CSS3&&amp…

    2025年12月24日
    000
  • css3的伪类有哪些

    css3伪类有:“:first-of-type”、“:last-of-type”、“:only-of-type”、“:only-child”、“:last-child”、“:root”、“:empty”、“:target”、“:not”等。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日 好文分享
    000
  • 19个CSS唯美的边框,让你的项目大放异彩!

    本篇文章分享19个css唯美的边框,可增加我们的项目”亮”点,让你的项目大放异彩,让用户爱起来!希望对大家有所帮助,快来收藏吧!! 渐变边框动画 事例地址:https://codepen.io/mike-schultz/pen/NgQvGO CSS Animation Eff…

    2025年12月24日 好文分享
    000
  • css3怎么将彩色图片改为黑白色图片

    在css3中,可以利用filter属性来将彩色图片改为黑白色图片,只需要设置该属性的值为“grayscale(%)”即可,具体语法格式“img{filter:grayscale(100%)}”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 在…

    2025年12月24日
    000
  • css3怎么实现元素的平移

    在css3中,可利用transform属性实现元素平移效果,当该属性的值设置为“translate(x,y)”时可沿x轴和y轴平移元素,为“translateX(x)”时可沿x轴平移元素,为“translateY(y)”时可沿y轴平移元素。 本教程操作环境:windows7系统、CSS3&&…

    2025年12月24日 好文分享
    000
  • 分享一个有趣的CSS3伪元素::marker,它使列表序号更生动

    本篇文章给大家介绍一下有趣、比较有意思的css3伪元素 ::marker,使用它可以让我们的列表序号变得更加的有意思,更生动。感兴趣的就来和我一起来看看吧! 什么是 ::marker CSS 伪元素 ::marker 是从 CSS Pseudo-Elements Level 3 开始新增,CSS P…

    2025年12月24日 好文分享
    000
  • normalize和css reset分别是什么文件?又有什么区别?

    normalize与css reset的区别: Normalize.css只是一个很小的css文件,相比于传统的CSS reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。也就是说,Normalize.css是一种CSS reset的替代方案。 Normalize.c…

    2025年12月24日
    000
  • 一文讲解css3实现椭圆轨迹旋转(总结)

    之前的文章《手把手教你使用Vue2代码改成Vue3(图文详解)》中,给大家介绍了怎么使用Vue2代码改成Vue3。下面本篇文章给大家了解css3实现椭圆轨迹旋转,小伙伴们收藏好哦~ css3实现椭圆轨迹旋转 最近需要实现如下效果 最开始用css3D旋转写,只能实现如下效果 立即学习“前端免费学习笔记…

    2025年12月24日 好文分享
    000
  • 超实用!利用CSS3将两个图片叠加在一起显示

    在之前的文章《利用css3创建实用的加载动画效果(两种)》中,我们分享了两种使用css3实现的加载动画效果。这次我们给大家介绍一下利用css如何将两个图片叠加融合在一起,创建唯美效果,感兴趣的可以学习了解一下~ 今天本文给大家分享两种利用CSS3将两个图片叠加融合在一起显示的特效。废话不多说,我们直…

    2025年12月24日
    000
  • 教你使用css3给字体添加立体效果(附代码)

    之前的文章《手把手教你怎么使用html+css实现轮播图效果(代码分享)》中,给大家介绍了怎么使用html+css实现轮播图效果。下面本篇文章给大家介绍怎么使用css3给字体添加立体效果,我们一起看看怎么做。 字体添加立体效果图如下 1、新建一个html文件,首先写div标签输入写contented…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信