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

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

相关推荐
迷雾漫步者1 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-2 小时前
验证码机制
前端·后端
燃先生._.3 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖4 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
唯之为之4 小时前
巧用mask属性创建一个纯CSS图标库
css·svg
m0_748235244 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240255 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar5 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人5 小时前
前端知识补充—CSS
前端·css