border-radius支持四种参数写法:单值、双值、三值、四值,以及斜杠分隔的水平/垂直半径组合;还可通过四个独立属性精准控制单角。
直接用 border-radius 设置圆角,本质是控制四个角的水平半径和垂直半径。它不是单一数值,而是可拆解、可组合的缩写属性。
常见写法有四种,对应不同数量的参数:
border-radius: 8px → 四个角都是 8px 圆角(等效于 8px / 8px)border-radius: 10px 5px → 水平半径为 10px,垂直半径为 5px,四角统一border-radius: 12px 8px 4px → 左上、右上/左下、右下,但实际是「左上 / 右上 左下 / 右下」的简写,容易误读,不推荐border-radius: 4px 8px 12px 16px → 顺时针:左上、右上、右下、左下更灵活的是用斜杠分隔水平/垂直半径:border-radius: 10px / 5px 表示所有角水平半径 10px、垂直半径 5px;border-radius: 4px 8px 12px 16px / 2px 4px 6px 8px 则分别指定每个角的水平与垂直半径。
没必要总用缩写。CSS 提供了四个独立属性,精准控制单角,语义清晰、维护方便:
border-top-left-radiusborder-top-right-radiusborder-bottom-right-radiusborder-bottom-left-radius每个都支持双值写法(水平 半径 垂直 半径),比如:
button {
border-top-left-radius: 6px;
border-bottom-right-radius: 0;
border-top-right-radius: 12px 4px; /* 水平12px,垂直4px */
}这种写法在做非对称 UI(如对话气泡、卡片切角)时最稳妥,避免缩写逻辑绕晕自己。
当 border-radius 的值大于元素宽高的一半时,浏览器会自动“压扁”椭圆弧度,使其贴合边界 —— 不会报错,也不会溢出,但视觉上可能变成“胶囊形”甚至“水滴形”。
例如一个 width: 100px; height: 40px; 的按钮:
border-radius: 20px → 刚好半圆(20 = 40/2),左右两端是完整半圆
border-radius: 30px → 实际渲染仍为 20px / 20px,因为垂直方向撑不开border-radius: 20px / 30px → 垂直半径被截断为 20px(高度一半),最终仍是 20px / 20px
所以别指望靠超大值实现夸张变形;真要不规则弧度,得用 clip-path 或 SVG。
border-radius 在现代浏览器中完全可用(IE9+),但以下情况容易“看起来没生效”:
overflow: hidden,但子元素带 transform(如 scale 或 translateZ),部分 Chrome 版本会裁剪圆角background-clip: padding-box(默认值),但边框是透明或未设 border,此时圆角只作用于背景,容易误判box-sizing: border-box 却忘了边框宽度占空间,导致内容区挤压,圆角被遮挡min-width: 0 或 min-height: 0,收缩时可能破坏圆角形状排查时优先检查 computed styles 中 border-radius 是否被继承或重置,而不是怀疑语法写错。