Menu

CSS 边框:宽度、样式、颜色与圆角

border 属性在元素的内边距外围画一条线。学习 border 简写、所有边框样式、颜色和单边边框、用 border-radius 做圆角,以及边框和轮廓(outline)有什么不同。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

border 简写

border 在元素周围画一条线,位于内边距和外边距之间。这个简写包含三个部分,顺序随意:宽度、样式和颜色。

部分完整属性取值默认值
宽度border-width1px、0.2em、thin、medium、thickmedium
样式border-stylesolid、dashed、dotted、double 等none
颜色border-color任意颜色currentColor(文字颜色)

样式是唯一不能省略的部分。它的默认值是 none,所以 border: 2px #2563eb; 什么都画不出来。如果省略颜色,边框会使用元素的文字颜色。

边框样式

double 至少需要 3px 才能显示出两条线。groove、ridge、inset 和 outset 会给颜色加上明暗,让它看起来有立体感,在不同浏览器中的效果略有差异。hidden 看起来和 none 一样;两者只在边框合并的表格中才有区别,这一点在 HTML 表格边框页面中有介绍。

单独设置某一条边

每条边都有自己的简写(border-top、border-right、border-bottom、border-left),每个部分也都有按边划分的完整属性,比如 border-top-color。逻辑属性版本 border-inline-start 和 border-block-end 会跟随文字方向:

border-color、border-width 和 border-style 接受一到四个值,顺序和内边距一样是顺时针:上、右、下、左。

用 border-radius 做圆角

border-radius 会让边框和背景的角都变圆,所以它对完全没有边框的元素也有效。

值效果
border-radius: 8px所有角都圆化 8px
border-radius: 50%正方形元素变成圆,长方形元素变成椭圆
border-radius: 999px胶囊形状:两条短边变成完整的半圆
border-radius: 8px 0左上角和右下角 8px,另外两个角保持直角
border-top-left-radius: 12px只设置一个角
border-radius: 50% / 25%椭圆角:水平半径 / 垂直半径

带背景的子元素可能会从圆角父元素的角上露出来。给父元素加上 overflow: hidden,就能沿着弧线把它裁掉。

边框与轮廓

轮廓看起来像边框,但它画在边框外面,不占用空间,所以加上轮廓永远不会让任何东西移动。这就是浏览器用轮廓来显示焦点框的原因。

边框轮廓
是否占用空间是,属于盒子尺寸的一部分否
能否按边设置能(border-top 等)不能,四周统一
是否跟随 border-radius是是,在当前浏览器中
能否与盒子拉开距离不能能,用 outline-offset
典型用途设计焦点指示、调试

常见错误

  • 没有边框样式。 border: 1px #111827; 和 border-color: red; 什么都画不出来。要加上 solid(或其他样式)。
  • 悬停时边框让布局跳动。 用透明边框预留空间,或者改用轮廓或 box-shadow。
  • 计算宽度时忘了边框。 在 content-box 下,一个带边框的 width: 100% 元素会超出容器。请使用 box-sizing: border-box。
  • 使用 border-radius 后子元素从角上露出来。 给圆角父元素加上 overflow: hidden。
  • 用 outline: none 去掉焦点轮廓。 键盘用户需要它;请重新设计轮廓的样式,而不是删掉它。

常见问题

CSS 中如何添加边框?

使用简写,写上宽度、样式和颜色:border: 2px solid #2563eb;。其中最关键的是样式:没有样式时,边框样式为 none,不会画出任何边框。

为什么我的 CSS 边框不显示?

几乎都是因为没有设置边框样式。单独写 border: 2px #2563eb; 或 border-color: red; 什么都画不出来,因为 border-style 的默认值是 none。加上 solid、dashed 或其他样式即可。

CSS 中如何做圆角?

使用 border-radius:border-radius: 8px; 会让四个角都变圆。在正方形上设置 border-radius: 50%; 会得到一个圆,而 999px 这样的大值会得到胶囊形状。即使没有边框,它也会让背景变成圆角。

如何只给一条边添加边框?

使用单边属性:border-bottom: 2px solid #e5e7eb;,或者用 border-inline-start 表示文字起始的那一边,它同样适用于从右到左书写的语言。

border 和 outline 有什么区别?

边框是盒子的一部分:它占用空间,会改变元素的尺寸。轮廓(outline)画在边框外面,不占用空间,不能按边单独设置,浏览器的焦点框用的就是它。在当前的浏览器中,两者都会跟随 border-radius。

Coddy 编程语言插图

和 Coddy 一起学编程

开始