🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 8 盒模型 > by [binlv](https://binlv.top) [TOC] CSS中的 [盒模型(Box model)](https://www.w3.org/TR/CSS22/box.html) 是根据 [视觉格式化模型](https://www.w3.org/TR/CSS22/visuren.html) 生成的 [文档树](https://www.w3.org/TR/CSS22/conform.html#doctree) 中的元素和布局来描述的**矩形框**。 听上去很绕,简而言之,CSS的盒模型就是为了让元素在页面中更好布局而定义的矩形框。 具体这个矩形框是什么样的?它又是怎么定义的?如何实现较好布局的呢?且往下看。 ## 8.1 盒子的规格 盒模型为更形象表达,下面我都叫它是盒子。 既然是盒子,当然是用来装东西的,在CSS中,东西就是元素。CSS中的每个盒子都有个被称为 ***内容区域*** (里面放文本text、图片img等)的地方,和可选的内容 ***周边区域*** (用来给内容区域包边装饰用)以及盒子之间的 ***间隙区域*** ,这三部分组成。定义内容区域大小用宽(width)、高(height),定义周边区域有内边距(padding)、边框(border),定义空隙区域用外边距(margin)。 一图胜千言。 <div align=center> ![盒模型的规格](https://www.w3.org/TR/CSS22/images/boxdim.png) </div> **说明:** - 像padding、border、margin这三个盒子的属性都可被拆分成 上(top)、右(right)、下(bottom)、左(left) 四个部分,即每个部分都可以单独设置值大小,所以图中TP就是Top Padding,其他类同。 内容(Content)区域的尺寸,包括 **盒子内容的宽度** 和 **高度**, 取决于几个因素:元素生成的盒子是否有<u>“宽度(weight)”</u>和<u>“高度(height)”</u>属性集;盒子里是否包含文本或其他盒子;盒子是否是一个表格等。框宽度和高度在 [关于视觉格式化模型细节](https://www.w3.org/TR/CSS22/visudet.html) 这章讨论了。 对了,Box model 有的地方翻译成 **框模型** ,个人感觉略显生硬。 ## 8.2 关于margins, padding, 和 borders 的例子 下面这个示例代码说明了 margins, padding, 和 borders 之间的相互作用。 ```html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Examples of margins, padding, and borders</TITLE> <STYLE type="text/css"> UL { background: yellow; margin: 12px 12px 12px 12px; padding: 3px 3px 3px 3px; /* 未设置border */ } LI { color: white; /* 设置文本颜色为白色 */ background: blue; /* 背景设置会使content和padding区域都生效 */ margin: 12px 12px 12px 12px; padding: 12px 0px 12px 12px; /* 注意padding-right是0px */ list-style: none /* 清除li的默认小圆点样式 */ /* 同样未设置border */ } LI.withborder { border-style: dashed; border-width: medium; /* 设置所有边的border宽度 */ border-color: lime; } </STYLE> </HEAD> <BODY> <UL> <LI>First element of list <LI class="withborder">Second element of list is a bit longer to illustrate wrapping. </UL> </BODY> </HTML> ``` ## 8.3 margin属性--- 'margin-top', 'margin-right', 'margin-bottom', 'margin-left', 和 'margin' margin属性指定一个框的边缘区域的宽度。使用缩写属性“margin”为所有四个方向设置属性,而其他的“margin-”属性只设置了各自的一个方向。这些属性适用于所有元素,但竖向边距不会对未替换的内联 (inline) 元素产生任何影响。 本节中定义的属性值是关于 **\<margin-width>** 的值类型的,有以下几种类型的值: **\<length>** 定义一个确定的宽。 **\<percentage>** 百分比是根据所生成的盒子的包含块的宽度来计算的。请注意,这对于“margin-top”和“margin-bottom”也是正确的。如果包含块的宽度取决于此元素,那么显示布局在CSS 2.2有定义。 **auto** 请参阅计算宽度和行为的边缘部分。 # 参考 - [Box Model by W3](https://www.w3.org/TR/CSS22/box.html) * * * * * 未完待续。