背景 今天逛 CodePen,利用看到了这样一个非常有意思的实现效果: CodePen Demo -- Material Design Menu By Bennett Feely[1] 这个效果还是有一些值得探讨学习的点,下面我们一起来看看。动态 首先,想一想,裁剪如果让你去实现上面的利用效果,你会怎么做呢?实现 这里我简单罗列一些可能的办法: 快速的一个一个过一下。 如果使用 box-shadow,动态代码大致如下: 核心就在于: 效果如下: 整体的动画是模拟出来了,但是利用它最致命的问题有两个: 所以,box-shadow 看着虽好,但是只能放弃。上述 Demo 的代码 -- CodePen Demo -- box-shadow zoom in animation[2] 下面我们使用径向渐变 radial-gradient 加上 CSS @property,也可以还原上述效果: 我们通过控制径向渐变的动画效果,在 hover 的时候,让原本只是一个小圆背景,变成一个大圆背景,效果如下: emmm,效果确实是还原了,问题也很致命: 上述 Demo 的代码 -- CodePen Demo -- radial-gradient zoom in animation[3] emmm,还有一种方法,云服务器提供商通过缩放 transform: scale(),也会存一定问题,这里不继续展开。 所以到这里,想实现上述的效果,核心在于: 所以,这里,我们其实是需要一个动态的区域裁剪。 在我的这篇文章中 -- 如何不使用 overflow: hidden 实现 overflow: hidden?[4],介绍了 CSS 中几种裁剪元素的方式,而其中,最适合利用在这个效果的,就是 -- clip-path。 利用 clip-path,可以非常好的源码下载实现,动态裁剪的功能,并且,代码也非常简单: 我们只需要利用 clip-path,在最开始的时候,将一个矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一个圆,当 hover 的时候,扩大裁剪圆的半径到整个矩形范围即可。 效果如下: 这样,我们就能完美的实现题图的效果,并且,内置的 DOM 元素,直接写进这个 div 内部即可。 效果如下: CodePen Demo -- clip-path zoom in animation[5] 很有意思的一个技巧,利用 clip-path 实现动态区域裁剪,希望大家能够掌握。 好了,本文到此结束,希望本文对你有所帮助 :) [1]CodePen Demo -- Material Design Menu By Bennett Feely: https://codepen.io/bennettfeely/pen/fHdFb [2]CodePen Demo -- box-shadow zoom in animation: https://codepen.io/Chokcoco/pen/jOLRQNy [3]CodePen Demo -- radial-gradient zoom in animation: https://codepen.io/Chokcoco/pen/RwZOqWb [4]如何不使用 overflow: hidden 实现 overflow: hidden?: https://github.com/chokcoco/iCSS/issues/90 [5]CodePen Demo -- clip-path zoom in animation: https://codepen.io/Chokcoco/pen/yLorrRm如何实现这样一个类似的区域效果?
使用 box-shadow 实现
使用渐变 radial-gradient 实现
利用 clip-path 实现动态区域裁剪
最后
参考资料