CSS中的盒子模型
box:每个元素在页面中都会生成一个矩形区域(盒子)
盒子类型:
- 行盒,display属性等于inline的元素
- 块盒,display属性等于block的元素
行盒在页面中不换行,块盒在页面中会换行
display的默认值为inline
浏览器默认样式表设置的块盒: 容器元素(div)、h1~h6、p
常见的行盒:span、a、img、video、audio
盒子的组成部分
无论是行盒还是块盒,都由下面几个部分组成,从内到外分别是:
内容 content
width、height设置的是盒子内容的宽高
内容部分通常叫做整个盒子的内容盒(content-box)
填充 padding
盒子边框到盒子内容的距离
padding-left、right、top、bottom
padding简写属性(上、右、下、左)
填充区 + 内容区 = 填充盒(padding-box)
边框 border
边框 = 边框样式(borde-style) + 边框宽度(border-width) + 边框颜色(border-color)
边框区域 + 填充区 + 内容区 = 边框盒(border-box)
外边框 margin
边框到其他盒子的距离
margin-left、right、top、bottom
margin简写属性(上、右、下、左)
盒模型的应用
改变宽高范围
默认情况下,width和height设置的是内容的宽高
衡量设计师原型稿时,往往使用的是边框盒,但设置width和height,则设置的是内容盒
- 使用精确计算
- CSS3 box-sizing:(content-box - 默认 | border-box)
改变背景覆盖范围
默认情况下,背景覆盖边框盒
可以通过 backgroud-clip(padding-box | content-box | border-box - 默认) 修改
溢出处理
定长、定宽盒子内容可能会发生溢出
overflow(hidden | auto | scroll),控制内容溢出边框盒后的处理方式
断词规则
word-break,会影响文字在什么地方被截断换行
normal: 普通,CJK字符(中文、日文、韩文)(文字位置截断),非CJK字符(单词位置截断)
break-all: 截断所有,所有字符都在文字处截断
keep-all:所有文字都在单词处截断
空白处理
white-space:nowrap
行盒的盒模型
常见的行盒:包含具体内容的元素
span、storen、em、a、img、video、audio
显著特点
- 盒子沿着内容延伸
- 行盒不能设置宽高
调整行盒的宽高,应该使用字体大小、行高、字体类型等间接调整
- 内边距(填充区)
水平方向有效,垂直方向仅会影响背景,不会实际占据空间
- 边框
水平方向有效,垂直方向不会实际占据空间
- 外边距
水平方向有效,垂直方向不会实际占据空间
行高的取值
line-height(可继承)
px,像素值
无单位的数字:行高为字体大小的 n 倍
- 先继承
- 再计算像素值
em单位 : 行高为字体大小的 n 倍(会出现问题)
- 先计算像素值
- 再继承
百分比
行块盒
display:inline-block的盒子
- 不独占一行
- 盒模型中所有尺寸都有效
空白折叠
无论多少个空格、tab、换行都会折叠为一个
发生在行盒(行块盒)内部或行盒(行块盒)之间
可替换元素 和 非可替换元素
大部分元素,页面上显示的结果,取决于元素内容,称为非可替换元素
少部分元素,页面上显示的结果,取决于元素属性,称为可替换元素
可替换元素:img、video、audio
绝大部分可替换元素为行盒
可替换元素类似行块盒,盒模型中所有尺寸都有效