如何创建响应式CSS弧形(环绕图片的圆形分段特效)
如何创建响应式CSS弧形(环绕图片的圆形分段特效)
嘿,我完全懂你想要的效果——在图片周围加一段可旋转的圆形分段,还要能自适应不同屏幕对吧?不用被SVG或者复杂的clip-path搞晕,用纯CSS就能实现,而且还能轻松控制旋转角度和分段长度,我来一步步给你讲清楚~
核心实现思路
- 用容器包裹图片,通过绝对定位的独立元素实现外层的扇形环
- 利用
conic-gradient快速创建可自定义的圆形分段(比clip-path更直观) - 通过
transform: rotate()直接控制分段的旋转位置 - 全用百分比/相对单位保证响应式,让元素随容器大小自动缩放
完整可运行代码
HTML结构
<div class="wrapper"> <div class="slide-wrapper"> <div class="image"> <div class="circle-segment"></div> <img src="https://png.pngtree.com/png-vector/20230831/ourmid/pngtree-man-avatar-image-for-profile-png-image_9197908.png" alt="用户头像"> </div> <div class="content"> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <div class="name">-John Doe</div> </div> </div> </div>
CSS样式
.wrapper { padding: 100px 0; background-color: #00213B; } .slide-wrapper { display: flex; align-items: center; justify-content: space-between; max-width: 85%; gap: 2.5rem; margin: 3.5rem auto 0; flex-wrap: wrap; /* 小屏幕自动换行 */ } .slide-wrapper .content { width: min(70%, 600px); /* 响应式宽度:最大600px,否则占70% */ font-size: 24px; font-weight: 400; color: #fff; } .slide-wrapper .content .name { font-weight: 900; margin-top: 2rem; } .slide-wrapper .image { position: relative; width: min(212px, 25vw); /* 响应式图片容器:最大212px,否则占视口25% */ aspect-ratio: 1/1; /* 保持正方形,自动计算高度 */ margin: 1rem; border-radius: 50%; } .slide-wrapper .image img { width: 100%; height: 100%; border-radius: 50%; border: 1px solid #fff; background-color: #00182a; position: relative; z-index: 5; /* 确保图片在最上层 */ } /* 关键:可旋转的圆形分段 */ .slide-wrapper .image .circle-segment { position: absolute; top: 50%; left: 50%; /* 这里的rotate值控制分段的旋转角度,比如改成rotate(90deg)就转到正下方 */ transform: translate(-50%, -50%) rotate(45deg); width: 116%; height: 116%; border-radius: 50%; /* 用conic-gradient创建分段:第一个颜色是分段的颜色,后面是透明区域 */ /* 0deg 120deg 表示分段从0度到120度,长度120度,可自行调整 */ background: conic-gradient(#8DC63F 0deg 120deg, transparent 120deg 360deg); z-index: 1; /* 伪元素实现内圈深色环,模拟双层效果 */ &::before { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 92%; /* 内圈大小,控制环的宽度 */ height: 92%; border-radius: 50%; background-color: #00213B; /* 和外层背景色一致,挖空中间部分 */ } }
关键细节调整指南
1. 控制分段长度
修改.circle-segment里conic-gradient的角度值即可:
- 比如想要90度的直角分段,改成
conic-gradient(#8DC63F 0deg 90deg, transparent 90deg 360deg) - 想要180度的半环,改成
conic-gradient(#8DC63F 0deg 180deg, transparent 180deg 360deg)
2. 控制旋转角度
调整.circle-segment的transform: translate(-50%, -50%) rotate(45deg)里的rotate()值:
rotate(0deg):分段从正右方开始rotate(90deg):分段从正下方开始- 负数角度则逆时针旋转
3. 调整环的宽度
修改.circle-segment的width/height(比如改成120%就是更宽的环),或者调整伪元素::before的width/height(比如改成90%就是更宽的环),两者的差值就是环的宽度。
4. 优化响应式
- 图片容器用了
min(212px, 25vw),在小屏幕上会自动缩小 .slide-wrapper加了flex-wrap: wrap,在窄屏上图片和文字会自动换行,不会挤在一起- 用
aspect-ratio: 1/1保证图片容器始终是正方形,不用手动设置高度
这样调整之后,你就能得到一个完全符合需求的特效,不用再纠结复杂的SVG或者clip-path语法,纯CSS就能轻松搞定~
内容来源于stack exchange




