在线工具集

CSS 圆角完全指南:单角 / 椭圆 / 异形按钮

从 border-radius 速记法到独立四角写法、椭圆圆角、超大半径胶囊形、blob 动画形状、与 overflow:hidden 的配合、SVG vs CSS 圆角的选择、阴影与圆角的视觉互动。

✍️ XTechTools 编辑团队 · 📅 发布 2026-04-29 · 🔄 更新 2026-06-14 · ⏱ 约 8 分钟阅读 ·→ 立即使用 CSS 圆角生成

border-radius 是最被低估的 CSS 属性之一。大多数开发者只会用 border-radius: 8px,但这个属性能做出椭圆、半圆、胶囊形、不规则 blob 形状,甚至配合关键帧动画做流体效果。本指南从速记法与独立角写法讲起,深入椭圆圆角、超大半径胶囊形、blob 动画、overflow 配合裁剪、SVG 对比、以及 box-shadow 视觉互动等高级技巧,帮你全面掌握这个强大属性。

速记法与独立角写法

border-radius 支持 1 到 4 个值的速记法,类似 margin/padding:

border-radius: 8px;                              /* 四角都 8px */
border-radius: 8px 16px;                         /* 上下 8px,左右 16px */
border-radius: 8px 16px 24px;                    /* 上 8px,左右 16px,下 24px */
border-radius: 8px 16px 24px 32px;               /* 上右下左,顺时针 */

独立写法更清晰: `` border-top-left-radius: 8px; border-top-right-radius: 16px; border-bottom-right-radius: 24px; border-bottom-left-radius: 32px; ``

实际上 border-radius 可以有 8 个值(用 / 分隔水平和竖直半径),但大多数场景不需要这么复杂。

椭圆圆角:水平 / 竖直半径分别控制

border-radius 的秘密是每个角其实是一个椭圆弧,水平和竖直半径可分别指定。

border-radius: 10px 20px;

这里 10px 是水平半径,20px 是竖直半径。结果是椭圆形的角。

完整写法: `` border-radius: 10px 20px / 5px 15px; / 水平半径 / 竖直半径 / ``

这样四个角分别是不同的椭圆弧。用来制作"上面圆、下面方"这样的混合形状非常方便。配合特定长宽比,可以做出自然流畅的卡片边角。

超大半径生成胶囊形与半圆

把 border-radius 设成超过容器尺寸的值,可以生成胶囊形(两端半圆的矩形)。

.pill {
  width: 200px;
  height: 100px;
  border-radius: 50px;  /* 半径 = 高 / 2,生成胶囊形 */
}

或者用百分比更通用: `` border-radius: 50%; ``

如果容器是正方形,border-radius: 50% 就是完整圆形;矩形时就是胶囊形。这是实现圆形头像、圆形按钮最简洁的方法。

半圆: `` border-radius: 100px 100px 0 0; / 上两个角圆,下两个角方 / ``

或者一行搞定:border-radius: 100px 100px 0; 利用速记法省略最后一个角(默认等于第二个)。

Blob 形状与不同角的半径组合

让每个角有不同的半径,再加上不规则的宽高比,就能做出有机的 blob 形状。

.blob {
  width: 200px;
  height: 180px;
  border-radius: 40% 60% 50% 30% / 30% 50% 40% 60%;
}

这样的形状看起来像液体 blob。加上动画:

@keyframes blob {
  0% { border-radius: 40% 60% 50% 30% / 30% 50% 40% 60%; }
  50% { border-radius: 30% 70% 40% 40% / 50% 30% 60% 50%; }
  100% { border-radius: 40% 60% 50% 30% / 30% 50% 40% 60%; }
}
.blob { animation: blob 4s infinite; }

就能做出流体效果的形状变化。这在现代设计(如 Stripe、Figma)中很流行。

与 overflow: hidden 配合裁剪子元素

border-radius 单独只影响元素本身的边框和背景,子元素内容会溢出超过圆角。结合 overflow: hidden 才能彻底裁剪。

.card {
  border-radius: 8px;
  overflow: hidden;  /* 裁剪溢出内容 */
}
.card img {
  width: 100%;
  display: block;  /* 移除 inline gap */
}

没有 overflow: hidden,圆角图片的四角会显示出矩形图片的直角。这是卡片设计最常见的坑。

性能提示:overflow: hidden 在某些老设备会触发新的层叠上下文,有微小性能代价。现代设备完全无所谓,但如果列表有 1000+ 个卡片,可以用 clip-path: inset() 替代(更高效)。

SVG vs CSS 圆角的选择标准

两种方式都能做圆角,选择取决于需求。

CSS border-radius: - 优点:简单、性能好、支持动画、响应式自适应 - 缺点:只支持椭圆弧,不能做出完全自由的曲线(如贝塞尔曲线)

SVG <rect> 或 <path>: - 优点:任意曲线形状、精确控制、可做复杂插图 - 缺点:需要外联或内联 SVG,文件更大,响应式需要特殊处理

决策树: - 简单矩形 + 圆角 → CSS border-radius - 圆形 / 胶囊形 → CSS border-radius: 50% - 不规则 blob / 复杂曲线 → SVG <path> - 卡片 / 按钮的圆角 → CSS(99% 的实际项目情况)

大多数场景(2026 年)用 CSS 就够了,除非设计稿明确要求 SVG 级别的曲线精度。

阴影与圆角的视觉互动

box-shadow 与 border-radius 配合使用,阴影会自动跟随圆角的曲线,产生自然的视觉效果。

.card {
  border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

这样阴影的 4 个角也是圆的,不会像有 border-radius 但没有阴影的元素那样显得生硬。

细节技巧: - 多层阴影box-shadow: 0 2px 4px rgba(0,0,0,0.1), 0 8px 16px rgba(0,0,0,0.08); 做出更自然的深度 - 内阴影box-shadow: inset 0 1px 2px rgba(255,255,255,0.5); 在圆角内部高亮边缘,增强立体感 - 悬停效果:增加阴影模糊距离或偏移量,transition: box-shadow 0.3s; 做出浮起效果

现代设计系统(Material Design 3 等)都用这样的组合定义组件:border-radius + box-shadow 就是一张卡片的全部。

常见问题

border-radius: 50% 对矩形和圆形分别是什么效果?

对正方形,50% 就是完整圆形;对宽高不等的矩形,50% 是胶囊形(两端半圆)。百分比相对于元素的宽和高分别计算。

为什么我的圆角图片四个角还是方的?

忘了加 overflow: hidden。border-radius 只影响元素边框和背景,子元素的内容(如 <img>)会溢出超过圆角。加上 overflow: hidden 才能彻底裁剪。

border-radius 能动画化吗?

可以,现代浏览器完全支持。用 @keyframes 改变 border-radius 值,或用 transition。性能很好,因为是 GPU 加速。

border-radius 与 clip-path 有什么区别?

border-radius 只能做椭圆弧(包括圆形、胶囊形等组合),clip-path 可以做任意多边形和路径。两者都是裁剪,但 border-radius 更适合"微调边角",clip-path 适合"自由形状"。

用百分比 border-radius 响应式吗?

不如想象中灵活。border-radius: 50% 对正方形是圆形,对矩形是胶囊形,随容器变化。但如果想"圆角的大小随容器宽度缩放",用 CSS 变量 + calc() 更好:`border-radius: calc(var(--size) * 0.1);`

blob 动画的 border-radius 值是怎么设计的?

通常在设计工具(如 Figma)中手工调,或用生成器(如 blobmaker.app)随机生成,再通过 @keyframes 逐帧变化。没有通用公式,靠审美和迭代。