在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
背景今天逛 CodePen,看到了这样一个非常有意思的效果: CodePen Demo -- Material Design Menu By Bennett Feely 这个效果还是有一些值得探讨学习的点,下面我们一起来看看。 如何实现这样一个类似的效果?首先,想一想,如果让你去实现上面的效果,你会怎么做呢? 这里我简单罗列一些可能的办法:
快速的一个一个过一下。 使用 box-shadow 实现如果使用 <div class="g-container"> <div class="g-item"></div> </div> .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; } } 核心就在于:
效果如下: 整体的动画是模拟出来了,但是它最致命的问题有两个:
所以, 使用渐变 radial-gradient 实现下面我们使用径向渐变 <div class="g-container"></div> @property --size { syntax: '<length>'; 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 的时候,让原本只是一个小圆背景,变成一个大圆背景,效果如下: emmm,效果确实是还原了,问题也很致命:
上述 Demo 的代码 -- CodePen Demo -- radial-gradient zoom in animation emmm,还有一种方法,通过缩放 所以到这里,想实现上述的效果,核心在于:
利用 clip-path 实现动态区域裁剪所以,这里,我们其实是需要一个动态的区域裁剪。 在我的这篇文章中 -- 如何不使用 overflow: hidden 实现 overflow: hidden?,介绍了 CSS 中几种裁剪元素的方式,而其中,最适合利用在这个效果的,就是 -- clip-path。 利用 <div class="g-container"></div> .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); } } 我们只需要利用 效果如下: 这样,我们就能完美的实现题图的效果,并且,内置的 DOM 元素,直接写进这个 div 内部即可。 <div class="g-container"> <ul> <li>11111</li> <li>22222</li> <li>33333</li> <li>44444</li> </ul> </div> 效果如下: CodePen Demo -- clip-path zoom in animation 很有意思的一个技巧,利用 clip-path 实现动态区域裁剪,希望大家能够掌握。 到此这篇关于JS利用 clip-path 实现动态区域裁剪功能的文章就介绍到这了,更多相关clip-path区域裁剪内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论