重生之我在人间学CSS👩🏻‍💻小美教我终极解决方案?

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 软件链接

在线绘制 SVG

总结

通过这次尝试,我学到了 clip-path 和 SVG 路径在绘制不规则图形上的强大功能。传统的 border-radius 只能实现简单的圆角效果,而 clip-path 结合 SVG 路径可以精确地控制形状。虽然过程有点曲折,但最终效果还是非常满意的。这也提醒我们,在前端开发中,遇到问题时要保持耐心,多尝试不同的方法,往往会有意想不到的收获。

希望这篇文章对你们有所帮助。如果有更好的解决方案,欢迎在评论区分享!

相关推荐
PineappleCoder6 小时前
性能数据别再瞎轮询了!PerformanceObserver 异步捕获 LCP/CLS,不卡主线程
前端·性能优化
PineappleCoder6 小时前
告别字体闪烁 / 首屏卡顿!preload 让关键资源 “高优先级” 提前到
前端·性能优化
m0_471199636 小时前
【vue】通俗详解package-lock文件的作用
前端·javascript·vue.js
GIS之路7 小时前
GDAL 读取KML数据
前端
今天不要写bug7 小时前
vue项目基于vue-cropper实现图片裁剪与图片压缩
前端·javascript·vue.js·typescript
用户47949283569157 小时前
记住这张时间线图,你再也不会乱用 useEffect / useLayoutEffect
前端·react.js
咬人喵喵8 小时前
14 类圣诞核心 SVG 交互方案拆解(附案例 + 资源)
开发语言·前端·javascript
问君能有几多愁~8 小时前
C++ 日志实现
java·前端·c++
咬人喵喵8 小时前
CSS 盒子模型:万物皆是盒子
前端·css