盒模型的应用

改变宽高范围

默认情况下设置内容盒的宽高

衡量设计稿尺寸的时候,往往使用的是边框盒,但设置width和height,则设置的是内容盒

  1. 精确计算
  2. CSS3:box-sizing

改变背景覆盖范围

默认情况下,背景覆盖边框盒

background-clip进行改变

溢出处理

overflow,控制内容溢出边框盒后的处理方式

断词规则

word-break,会影响文字在什么位置被截断换行

normal:普通。CJK字符(文字位置截断)、非CJK字符(单词位置截断)

break-all:在所有位置截断

keep-all 保持所有。所有文字在单词之间截断

空白处理

超出部分用圆点处理的方法

white-space:nowrap(不换行)
overflow:hidden
text-overflow:ellipsis

行盒的盒模型

常见的行盒:包含具体内容的元素

span、strong、em、i、img、video、audio

显著特点:

  1. 盒子随着内容延伸
  2. 行盒不能设置宽高

调整行盒的宽高,需要通过调试文字大小,宽度间接调整

  1. 内边距

水平方向有效,垂直方向仅会影响背景,不会占据空间

  1. 边框

水平方向有效,垂直方向仅会影响背景,不会占据空间

  1. margin

水平方向有效,垂直方向仅会影响背景,不会占据空间

行块盒

display: inline-block的盒子

  1. 不独占一行
  2. 但所有尺寸都有效

空白折叠

空白折叠,发生在行盒(行块盒)内部或行盒(行块盒)之间

可替换元素 和非可替换元素

大部分元素,页面上显示的结果,取决于元素内容,称为不可替换元素

少部分元素页面上显示的结果,取决于元素属性,称为可替换元素

可替换元素:img、video、audio

绝大部分可替换元素为行盒

可替换元素类似于行块盒,盒模型中所有尺寸都有效

常规流

盒模型:规定单个盒子的规则

视觉格式化模型(布局规则):页面中的多个盒子排列规则

视觉格式化模型,大体上将盒子的排列分成三种情况:

  1. 常规流
  2. 浮动
  3. 定位

常规流布局

常规流、文档流、普通文档流

所有元素默认情况下都属于常规流布局

总体规则:块盒独占一行,行盒水平依次排列

包含块(containing block):每个盒子都有包含块,包含块决定可盒子的排列区域。

绝大情况下:盒子的包含块,为其父元素的内容盒

块盒

  1. 每个块盒的总宽度,必须刚好等于包含块的宽度
    宽度的默认值为auto
    margin:默认值为0,但可设置为auto
    auto:将剩余空间吸收掉

width的吸收能力强于margin

若宽度、边框、内边距计算后仍然有剩余空间,该空间被margin-right全部吸收

在常规流中,块盒在其包含块中居中,可以定宽,左右设置为auto。

  1. 每个块盒垂直方向上的auto值

height:auto,适应内容的高度

margin,表示0

  1. 百分比取值

padding、宽高、margin可以取值百分比

所有百分比相对于包含块的宽度

高度的百分比:

1) 包含块的高度是否取决于子元素的高度,设置百分比无效
2)包含块的高度不取决于子元素的高度,百分比相对于父元素的高度

  1. 上下外边距的合并
    两个常规流块盒,上下边距相邻且相等时,会进行合并

当上下边距不相等时,取最大值

  1. 父子元素的外边距合并

相邻也要合并

浮动

应用场景

  1. 文字环绕
  2. 横向排列

浮动的基本特点

修改float属性值:

  • left:左浮动,元素靠上靠左排列
  • right:右浮动,元素靠上靠右排列
  • 默认值为none
    当元素使用浮动后,默认为块盒
    浮动元素的包含块和常规流一样,为父元素的内容盒

盒子尺寸

  1. 宽度为auto时,适应内容宽度
  2. 高度为auto时,与常规流一致,适应内容的高度
  3. margin为auto时,表示为0;
  4. 边框,内边距,百分比设置相当于父元素内容盒

盒子排列

  1. 左浮动盒子靠上靠左排列
  2. 右浮动盒子靠上靠右排列
  3. 浮动盒子在包含块中排列时,会避开常规流盒子
  4. 常规流块盒在排列时,,无视浮动盒子
  5. 行盒在排列时会避开浮动盒子
  6. 外边距合并并不会发生

如果元素没有在行盒中,浏览器将文字包裹为行盒,该元素叫做匿名行盒

高度坍塌

高度坍塌的根源:常规流的自动高度,不考虑浮动盒子

清除浮动,涉及CSS属性:clear

  • 默认值:none
  • left:清除左浮动,该元素必须出现在前面所有左浮动盒子的前面
  • right:清除右浮动,该元素必须出现在前面所有右浮动盒子的前面
  • both:清除所有浮动,该元素必须出现在前面所有浮动盒子的前面

定位

手动控制元素在包含块中的精准位置

涉及的CSS属性:position

position属性

  • 默认值:static,静态定位(不定位)
  • relative:相对定位
  • absolute:绝对定位
  • fixed:固定定位

一个元素,只要position取值不是static,认为该元素是一个定位元素

定位元素会脱离文档流(相对定位除外)

一个脱离了文档流的元素:

  1. 文档流中的元素摆动时,会忽略脱离了文档流的元素
  2. 文档流中元素计算自动高度时,会忽略脱离了文档流的元素

相对定位:

不会导致元素脱离文档流,只是让元素在原来位置上偏移

可以通过四个CSS属性对其设置偏移:
left、right、bottom、top

盒子的偏移不会对其他盒子造成影响。

绝对定位

  1. 宽高为auto,适应内容
  2. 包含块变化:找祖先元素中第一个定位元素,该元素的填充盒为其包含块。
    若找不到,则它的包含块为整个网页

固定定位

其他情况和绝对定位一致

包含块不同:固定为视口(浏览器的可视窗口)

定位下的居中

某个方向居中:

  1. 定宽(高)
  2. 将左右(上下)距离设置为0
  3. 将margin设置为auto.

绝对定位和固定定位中,margin设置为auto,会自动吸收剩余空间

多个定位元素重叠时

堆叠上下文

设置z-index,通常情况下,该值越大,越靠近用户

边框弧度:border-redius:50%

后边出现的在前(可以自设置)

只有定位元素设置z-index有效

z-index可以是负数,如果是负数,浮动元素,常规流元素在其前面

补充

  • 绝对定位,固定定位是块盒
  • 绝对定位,固定定位不是浮动
  • 没有外边距合并

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐