CSS如何实现单侧圆形、另一侧带斜角的胶囊形状?
斜分割双色胶囊样式实现方案
需求参考
目标实现效果:
当前待优化的实现效果:
原有方案的问题
你当前通过旋转两个半圆块拼接胶囊的思路存在两个天然缺陷:
- 旋转属性会作用在元素所有内容上,内部文字必然跟着倾斜,就算给文字单独加反向旋转抵消,对齐调试成本极高
- 两个旋转块的拼接边是规则直角边,很难自然做出斜向分割线,硬调border属性容易出现边缘锯齿、拼接缝隙
实现代码
直接用整体胶囊容器+斜切分栏的思路实现,全程不需要旋转元素,从根源避免文字歪斜问题,斜分割线边缘顺滑无毛刺。
/* 整体胶囊容器 */ .capsule { width: 100px; height: 50px; border-radius: 25px; /* 圆角为高度的1/2,实现两端半圆效果 */ display: flex; overflow: hidden; font-size: 18px; font-weight: 700; color: #fff; } /* 左侧橙色色块 */ .capsule-left { flex: 1; display: flex; align-items: center; justify-content: center; background: #FDA725; /* 右侧做斜切,调整85%这个值可以改斜线斜率 */ clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%); padding-right: 6px; /* 挪开文字避开切边 */ } /* 右侧灰色色块 */ .capsule-right { flex: 1; display: flex; align-items: center; justify-content: center; background: #CED2D9; /* 左侧做斜切,和左侧切边角度完全匹配 */ clip-path: polygon(15% 0, 100% 0, 100% 100%, 0 100%); margin-left: -15%; /* 负边距让两个色块重叠,消除拼接缝隙 */ padding-left: 6px; /* 挪开文字避开切边 */ }
<div class="capsule"> <div class="capsule-left">5</div> <div class="capsule-right">10</div> </div>
调整说明
如果需要修改斜分割线的倾斜角度,只要同步调整三个值即可:
- 左侧
clip-path里的右下点X轴百分比(示例代码中为85%) - 右侧
clip-path里的左上点X轴百分比(示例代码中为15%,和左侧值相加为100%即可) - 右侧的负margin值(和右侧
clip-path的左上点X轴百分比保持一致)
内容的提问来源于stack exchange,提问作者TheBiker
相关产品推荐
相关产品推荐

