Skip to content

盒子模型

元素的显示模式

① 块级元素 block

显示模式是块级的元素称为块级元素,特点:

sh
1. 在页面中是一个块,能够独占一行
2. 可以设置宽度和高度

② 行内元素 inline

显示模式是行内的元素称为行内元素,特点:

sh
1. 显示在行内,不能独占一行
2. 无法设置宽度和高度

③ 行内块元素 inline-block

显示模式是行内块的元素称为行内块元素,特点:

sh
1. 显示在行内,不能独占一行
2. 可以设置宽度和高度

按照最早的标准,行内块元素也被当做行内元素!

HTML 元素的默认显示模式

① 默认显示模式是 block 的元素:

sh
排版标签: h1~h6、p、pre、hr、div
列表标签: ul、ol、li、dl、dt、dd
表单标签: form、option

② 默认显示模式是 inline 的元素:

sh
文本标签: em、strong、del、ins、sub、sup、span
超链接标签: a
表单标签: label

③ 默认显示模式是 inline-block 的元素:

sh
图片标签: img
表单标签: input、button、textarea、select
框架标签: iframe

修改元素的显示模式

使用CSS属性 display 可以设置元素的显示模式,该属性的值如下:

sh
inline
block
inline-block
none
visibility:hidden;
sh
按照最早的标准只有行内和块级,默认显示模式是行内块的元素,无法设置成真正的行内

隐藏元素

css
display:none
visibility:hidden;
hidden

盒子模型的组成

盒子模型的相关概念

image-20240311095022669

sh
1. 将元素比作成一个盒子
2. 页面布局就是盒子的排列和堆砌

内容(content): 内容是元素的核心区域,元素中的文本内容和后代元素都显示在内容上。

内边距(padding): 内容与元素边界的距离。

边框(border): 位于元素的边界上。

外边距(margin): 在元素边界之外,是与相邻元素的距离。

影响盒子大小的因素

sh
盒子的总宽度 = 内容宽度 + 左右内边距 + 左右边框
盒子的总高度 = 内容高度 + 上下内边距 + 上下边框

盒子中的内容区域

设置内容区域的宽高的 CSS 属性

CSS 属性名功能属性值
width宽度长度
max-width最大宽度长度
min-width最小宽度长度
height高度长度
max-height最大高度长度
min-height最小高度长度

注意: 最大最小宽高一般不与固定宽高一同设置!

元素的默认宽高

行内元素:

sh
默认宽度被内容撑开,没有内容就没有宽度
默认高度被内容撑开,没有内容也会有一个文字的高度

行内块元素:

sh
默认宽度被内容撑开,没有内容就没有宽度
默认高度被内容撑开,没有内容就没有高度

块级元素:

sh
默认宽度被内容撑开,没有内容就没有高度
sh
默认总宽度 = 父元素内容宽度 - 自身的左右外边距
默认内容宽度 = 父元素内容宽度 - 自身的左右外边距 - 自身的左右内边距 - 自身的左右边框

盒子的内边距 padding

① 相关 CSS 属性

CSS 属性名功能属性值
padding-left左内边距长度
padding-right右内边距长度
padding-top上内边距长度
padding-bottom下内边距长度
padding上下左右内边距多个长度空格分隔

② padding 设置规则

padding 值设置的规则:

sh
1. 不能是负值
2. 使用百分比,上下左右内边距都参照父元素内容宽度

padding 复合属性的设置规则:

css
/* 1个值: 上下左右 */
padding: 20px;
/* 2个值: 上下 左右*/
padding: 40px 30px;
/* 3个值: 上 左右 下*/
padding: 10px 20px 30px;
/* 4个值: 上 右 下 左*/
padding: 15px 25px 35px 45px;

不同显示模式的元素设置内边距:

sh
1. 块级元素、行内块元素内边距可以完美设置
2. 行内元素,左右内边距可以完美设置,上下内边距效果不完美

边框 border

  • 边框不会显示在 margin 中。
  • 背景颜色在边框中显示(实线的时候,我们看不到)。
  • 背景图片原点没有从边框开始 而是从padding开始的,但是可能会平铺到边框中。
CSS 属性名功能属性值
border-style边框风格none:无风格。
solid:实线。
dashed:虚线。
dotted:点线。
double:双实线。
border-color边框颜色颜色,默认值是文字颜色
border-width边框宽度长度,默认值是3px
border同时设置风格、颜色、宽度多个值使用空格分隔
border-left-style
border-left-color
border-left-width
border-left

border-right-style
border-right-color
border-right-width
border-right

border-top-style
border-top-color
border-top-width
border-top

border-bottom-style
border-bottom-color
border-bottom-width
border-bottom
css
border的子属性有: border-styleborder-colorborder-width

border-left 的子属性: bordre-left-styleborder-left-colorborder-left-width
border-right border-top border-bottom 各种具有子属性

border-style 的子属性: border-left-styleborder-right-styleborder-top-styleborder-bottom-style
border-colorborder-width 各种具有子属性

外边距 margin

sh
1. 外边距是元素与相邻兄弟元素的距离,如果没有相邻兄弟元素就是与父元素内容边界的距离
2. 左外边距和上外边距主要影响自己的位置,右外边距和下外边距主要影响相邻兄弟元素的位置

① 相关 css 属性

CSS 属性名功能属性值
margin-left左外边距长度
margin-right右外边距长度
margin-top上外边距长度
margin-bottom下外边距长度
margin外边距复合属性多个长度空格分隔

② margin 设置规则

margin 值设置的规则:

sh
1. 使用百分比,上下左右内边距都参照父元素内容宽度
2. 外边距可以是负值
3. 块级元素左右外边距都设置为 auto,该元素在父元素中横向居中

margin 复合属性的设置规则:

sh
1个值: 上下左右
2个值: 上下 左右
3个置: 左右
4个值:

不同显示模式的元素设置外边距:

sh
1. 块级元素、行内块元素外边距可以完美设置
2. 行内元素,只能设置左右外边距,上下外边距设置无效

③ margin 塌陷

什么是 margin 塌陷?

shell
1. 最上面元素的上外边距、最下面元素的下外边距会塌陷到父元素
2. 外边距塌陷只会发生在块级元素上

如何解决 margin 塌陷?

shell
- 方案一: 父元素设置边框
- 方案二: 父元素设置内边距
- 方案三: 父元素开启BFC,设置 overflow:hidden;

④ margin 合并

什么是 margin 合并?

shell
1. 上面兄弟元素的下外边距会与下面兄弟元素的上外边距合并,两者之间距离取较大的外边距
2. 外边距合并只会发生在块级元素上

如何解决 margin 合并?

shell
不用解决

内容溢出

CSS 属性名功能属性值
overflow设置溢出内容的显示方式visible:显示,默认值。
hidden:隐藏。
scroll:滚动条。
auto:自动。
overflow-xx轴方向溢出内容的显示方式同上
overflow-yy轴方向溢出内容的显示方式同上

auto 和 scroll 的区别:

shell
1. scroll 不论内容是否会溢出,都有滚动条
2. auto 只有内容溢出才会显示滚动条

隐藏元素

CSS
1. 设置 visibility:hidden;   元素隐藏但是占据位置
2. 设置 display:none;  元素彻底隐藏,不占据位置
3. 设置背景图片隐藏 backface-visibility

行内元素或行内块元素在布局中的特点

父元素设置的文本属性可以作用于行内元素和行内块元素

① 让行内块元素在父元素中水平居中

shell
给父元素设置 text-align:center

② 让行内块元素在父元素中纵向居中

shell
1. 给父元素设置行高
2. 给行内块元素设置 vertical-align:middle

行内元素或行内块元素之间的空白问题

① 元素之间的空白(左右)

产生原因:

shell
代码中,元素之间的换行

解决方案:

shell
方案一: 代码中,元素之间不写换行(不推荐)
方案二: 父元素设置字体大小为0; 如果行内块元素中还有文字单独设置字体大小。

② 底部的空白(图片的幽灵空白)

产生原因:

shell
行内块元素与文字基线对齐,底部的空白就是基线与底线的距离

解放方案:

shell
方案一: 父元素设置字体大小 0
方案二: 给行内块元素设置 vertical-align:bottom (推荐)
方案三: 经典解决方案,针对图片,将图片设置成块级元素

③ 文字内容个数不同的行内块元素水平排列无法对齐

产生原因:

shell
1. 如果行内块元素中没有文字,该元素的底部与基线对齐
2. 如果行内块元素中有一行文字,文字与外面的基线对齐,进而影响行内块元素的位置
3. 如果行内块元素中有多行文字,最后一行文字与外面的基线对齐,进而影响行内块元素的位置

解决方案:

html
给行内块元素设置 vertical-align, 值不是 baseline 都可以解决问题