border

概览

CSS的 border 属性是一个用于设置各种单独的边界属性的简写属性border可以用于设置一个或多个以下属性的值: border-width, border-style, border-color

尝试一下

和所有的简写属性一样,如果有缺省值会被设置成对应属性的初始值。同时需要注意设置 border 对border-image属性的影响,虽然 border 属性不能设置这个属性,但会把该属性重置为初始值 none。这使得我们可以用 border 属性去重置整个样式表中的 border 设置。因为 W3C 计划在未来的标准中保留该属性,因此建议使用该属性重置边框设定。

注意: 虽然border-width,、border-styleborder-color 简写属性接受最多 4 个参数来为不同的边设置宽度、风格和颜色,但 boder 属性只接受三个参数,分别是宽度、风格和颜色,所以这样会使得四条边的边框相同。

Borders vs. outlines

边界border和轮廓outline很相似。然而轮廓在以下方面与边界不同

  • 轮廓不占据空间,他们在元素内容之外绘制
  • 根据规范,轮廓不必为矩形,尽管通常是矩形。

语法

/* style */
border: solid;

/* width | style */
border: 2px dotted;

/* style | color */
border: outset #f33;

/* width | style | color */
border: medium dashed green;

/* Global values */
border: inherit;
border: initial;
border: unset;

可以使用下面列出的一个,两个或三个值来指定border属性。值的顺序无关紧要。

注意:如果边框的样式未定义,它将不可见。这是因为样式默认为 none。

取值

border-width
请看 border-width.
border-style 
请看 border-style.
border-color 
<color> 可以确定 border 的颜色。如果这个值没有设置,它的默认值是元素的color属性值(是文字颜色而非背景色)。请看border-color.

正式语法

border = 
<line-width> ||
<line-style> ||
<color>

<line-width> =
<length [0,∞]> |
thin |
medium |
thick

<line-style> =
none |
hidden |
dotted |
dashed |
solid |
double |
groove |
ridge |
inset |
outset

<color> =
<absolute-color-base> |
currentcolor |
<system-color> |
<device-cmyk()>

<absolute-color-base> =
<hex-color> (en-US) |
<named-color> |
transparent |
<rgb()> |
<rgba()> |
<hsl()> |
<hsla()> |
<hwb()> |
<lab()> |
<lch()> |
<oklab()> |
<oklch()> |
<color()>

<device-cmyk()> =
device-cmyk( <cmyk-component>{4} [ / <alpha-value> ]? )

<rgb()> =
rgb( [ <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? ) |
rgb( [ <number> | none ]{3} [ / [ <alpha-value> | none ] ]? )

<hsl()> =
hsl( [ <hue> | none ] [ <percentage> | none ] [ <percentage> | none ] [ / [ <alpha-value> | none ] ]? )

<hwb()> =
hwb( [ <hue> | none ] [ <percentage> | none ] [ <percentage> | none ] [ / [ <alpha-value> | none ] ]? )

<lab()> =
lab( [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )

<lch()> =
lch( [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ <hue> | none ] [ / [ <alpha-value> | none ] ]? )

<oklab()> =
oklab( [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )

<oklch()> =
oklch( [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ <hue> | none ] [ / [ <alpha-value> | none ] ]? )

<color()> =
color( <colorspace-params> [ / [ <alpha-value> | none ] ]? )

<cmyk-component> =
<number> |
<percentage>

<alpha-value> =
<number> |
<percentage>

<hue> =
<number> |
<angle> |
none

<colorspace-params> =
<predefined-rgb-params> |
<xyz-params>

<predefined-rgb-params> =
<predefined-rgb> [ <number> | <percentage> | none ]{3}

<xyz-params> =
<xyz-space> [ <number> | none ]{3}

<predefined-rgb> =
srgb |
srgb-linear |
display-p3 |
a98-rgb |
prophoto-rgb |
rec2020

<xyz-space> =
xyz |
xyz-d50 |
xyz-d65

示例

HTML

<div>I have a border, an outline, AND a box shadow! Amazing, isn't it?</div>

CSS

div {
  border: 0.5rem outset pink;
  outline: 0.5rem solid khaki;
  box-shadow: 0 0 0 2rem skyblue;
  border-radius: 12px;
  font: bold 1rem sans-serif;
  margin: 2rem;
  padding: 1rem;
  outline-offset: 0.5rem;
}

结果

规范

规范 状态 说明
CSS Backgrounds and Borders Module Level 3
border
Candidate Recommendation 在理论上删除了对transparent的支持,因为<color>已经接受它作为一种有效的颜色值。这不会对实际使用有任何影响。
虽然 border 不能给border-image赋特定的值,但可以用于重置border-image为初始值 (none).
CSS Level 2 (Revision 1)
border
Recommendation

加入inherit关键字。
接受 transparent 作为有效的颜色值。

CSS Level 1
border
Recommendation 初始定义

浏览器兼容性

BCD tables only load in the browser