重生之我在人间学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 路径可以精确地控制形状。虽然过程有点曲折,但最终效果还是非常满意的。这也提醒我们,在前端开发中,遇到问题时要保持耐心,多尝试不同的方法,往往会有意想不到的收获。

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

相关推荐
罔闻_spider28 分钟前
爬虫----webpack
前端·爬虫·webpack
吱吱鼠叔30 分钟前
MATLAB数据文件读写:1.格式化读写文件
前端·数据库·matlab
爱喝水的小鼠1 小时前
Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
前端·javascript·vue.js
WeiShuai1 小时前
vue-cli3使用DllPlugin优化webpack打包性能
前端·javascript
Wandra1 小时前
很全但是超级易懂的border-radius讲解,让你快速回忆和上手
前端
ice___Cpu1 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
JYbill1 小时前
nestjs使用ESM模块化
前端
加油吧x青年1 小时前
Web端开启直播技术方案分享
前端·webrtc·直播
吕彬-前端2 小时前
使用vite+react+ts+Ant Design开发后台管理项目(二)
前端·react.js·前端框架
小白小白从不日白2 小时前
react hooks--useCallback
前端·react.js·前端框架