CSS

边框大小 | box-sizing

box-sizing

box-sizing 属性用于更改用于计算元素宽度和高度的默认的 CSS 盒子模型。可以使用此属性来模拟不正确支持CSS盒子模型规范的浏览器的行为。

/* Keyword values */ box-sizing: content-box; box-sizing: border-box; /* Global values */ box-sizing: inherit; box-sizing: initial; box-sizing: unset;

在CSS中,你设置一个元素的widthheight只会应用到这个元素的内容区。如果这个元素有任何的 border或 padding,绘制到屏幕上时的盒子宽度和高度会加上设置的边框和内边距值。这意味着当你调整一个元素的宽度和高度时需要时刻注意到这个元素的边框和内边距。当我们实现响应式布局时,这个特点尤其烦人。

box-sizing属性可以被用来调整这些表现:

  • content-box  是默认值。如果你设置一个元素的宽为100px,那么这个元素的内容区会有100px宽,并且任何边框和内边距的宽度都会被增加到最后绘制出来的元素宽度中。

  • border-box 告诉浏览器去理解你设置的边框和内边距的值是包含在width内的。也就是说,如果你将一个元素的width设为100px,那么这100px会包含其它的border和padding,内容区的实际宽度会是width减去border + padding的计算值。大多数情况下这使得我们更容易的去设定一个元素的宽高。

一些专家甚至建议所有的Web开发者们将所有的元素的box-sizing都设为border-box

上面的例子显示了三种情况。在每种情况下,都有一个包含子DIV的父DIV(带有橙色边框)。子DIV已经定了width: 100%,并且有一个淡蓝色的背景。

  • 第一个场景使用默认值box-sizing: content-box。子DIV没有填充物,没有边界,整齐地贴在父DIV上。

  • 第二个场景使用默认box-sizing: content-box. 子DIV增加了填充和边框。然后,子节点溢出到父服务器之外,因为它的宽度仅使用内容计算:然后添加填充和边框,以获得呈现的宽度。

  • 第三种场景使用box-sizing: border-box现在,子div可以很好地嵌入到它的父母中,因为它的width: 100%说明了填充和边框。

初始值content-box
适用元素all elements that accept width or height
是否是继承属性no
适用媒体visual
计算值as specified
Animation typediscrete
正规顺序the unique non-ambiguous order defined by the formal grammar

语法

box-sizing属性被指定为从下面的值列表中选择的单个关键字。

content-box默认值,标准盒子模型。widthheight只包括内容的宽和高, 不包括边框(border),内边距(padding),外边距(margin)。注意: 内边距, 边框 & 外边距 都在这个盒子的外部。 比如. 如果 .box {width: 350px}; 而且 {border: 10px solid black;} 那么在浏览器中的渲染的实际宽度将是370px;

正式语法

content-box | border-box

示例

HTML

<div class="content-box">Content box</div> <br> <div class="border-box">Border box</div>

CSS

div { width: 160px; height: 80px; padding: 20px; border: 8px solid red; background: yellow; } .content-box { box-sizing: content-box; } .border-box { box-sizing: border-box; }

结果

规范

SpecificationStatusComment
CSS Basic User Interface Module Level 3The definition of 'box-sizing' in that specification.Candidate RecommendationInitial definition.

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support1.0 -webkit1 10.0(Yes)-webkit (Yes)1.0 (1.7 or earlier)-moz1 29.0 (29.0)28.017.03.0 (522)-webkit 5.13
padding-boxNo supportNo support1.0 (1.7 or earlier)-moz1 29.0 (29.0) Removed in 50.0 (50.0)No supportNo supportNo support

FeatureAndroidEdgeFirefox Mobile (Gecko)IE PhoneOpera MobileSafari Mobile
Basic support2.1-webkit1 4.0(Yes)-webkit (Yes)1.0 (1.0)-moz1 29.0 (29.0)29.0(Yes)(Yes)
padding-boxNo supportNo support1.0 (1.0)-moz1 29.0 (29.0) Removed in 50.0 (50.0)No supportNo supportNo support