clip-path 还能这么用?
1. 文章产生背景
在一个风和日丽的下午,我兴致冲冲点开了设计稿。整体撇了一眼,简简单单,这根本难不到我。已经开始幻想提前完成任务后和小美聊聊晚上吃什么了。然而事情很快就不太对了,当我做到一个图片轮播的板块的时候,轮播很快就做出来了。但是这个容器的样子有点...奇葩呀,他难道不是个矩形加边框吗。掘友们,请看下图:
2.初次尝试:border-radius
我首先尝试了border-radius常规写法
css
width: 100%;
height: 380rpx;
overflow:hidden;
border-radius: 25rpx;
没错,四个圆角有了,但是上下边儿的突出无法呈现,由于需要将图片给限制为这个形状。就不能使用多个元素来拼接完成。
效果:
3. 再次尝试:border-radius
啊啊啊 我不死心啊。去搜一搜border-radius到底能不能实现。于是乎,我打破了自己的知识认知,掘友们,你们见过这种使用方法吗? 请看: 使用斜杠(/) :如果使用斜杠分隔两组值,如 border-radius: 50px/30px;
,则第一组值表示水平半径,第二组值表示垂直半径。每组值也可以同时设置1到4个值,应用规则是依次对应左上角、右上角、右下角、左下角(顺时针顺序)。
css
width: 100%;
height: 380rpx;
overflow:hidden;
border-radius:50%/190rpx;
它变成了个椭圆,NO! 这不是我要的效果 于是我疯狂的尝试各种参数,终于!掘友请看: 代码就改成了
css
border-radius:50%/30rpx;
但是!倔友们 有没有发现和设计稿对比 这个容器是很接近了。但是仔细看的话他的四个角为什么不是弧度的。 于是就有了 终极解决方案 。
4. 终极解决方案:clip-path + svgPath
在我苦恼之余,小美发来了消息。问我怎么了,我说一个css问题把我给困住了。具有8年前端经验的小美告诉我 !可以使用 clip-path 加上 svg的路径来绘制出不规则图形。妙啊,当即我就决定晚饭不让她请客了,改为我们AA制,总花她的钱可不行。
步骤一 搞到svg路径
哈哈,这难不倒我,幸亏我学过ps。但是刚换的电脑没有ps,于是我找到了一个在线绘制svg的软件。(链接放在文章最后)
1. 首先导入我们的原型图
2.选择钢笔 描出点
3.双击点拖拽出弧形
4.找到源码中svg的路径
点击在线编辑器的视图->源码,滑到最底部 d属性中的就是我们的svg路径
步骤二 写css代码
css
width: 100%;
height: 380rpx;
clip-path: path('m5.877152,20.650136c-0.306551,-2.78583 3.155744,-8.434791 6.994089,-8.537509c107.936005,-7.401544 212.696489,-12.84862 322.537809,2.226205c4.300329,0.761784 5.491985,3.118006 5.906472,7.068661l-0.492206,143.897751c0.293596,6.652337 -2.003362,9.052849 -6.890884,9.593183c-114.649453,7.4407 -186.813734,14.8814 -321.410499,0c-5.146575,-0.327744 -6.925426,-3.844357 -6.890884,-6.563757l0.246103,-147.684534z');
步骤三 看效果
在线绘制 SVG 软件链接
总结
通过这次尝试,我学到了 clip-path
和 SVG 路径在绘制不规则图形上的强大功能。传统的 border-radius
只能实现简单的圆角效果,而 clip-path
结合 SVG 路径可以精确地控制形状。虽然过程有点曲折,但最终效果还是非常满意的。这也提醒我们,在前端开发中,遇到问题时要保持耐心,多尝试不同的方法,往往会有意想不到的收获。
希望这篇文章对你们有所帮助。如果有更好的解决方案,欢迎在评论区分享!