盒子模型

116 阅读5分钟

1、盒⼦模型的含义

所有的元素都是框,所有的元素在⻚⾯都占据空间,⽽计算元素所占空间⼤⼩的公式叫做

盒⼦模型

2、盒⼦的组成

i. 盒⼦的外形都是矩形的

ii. 盒⼦包括:

• 内容 (width + height 元素的⾼和宽)

• 内边距 (

padding 也叫填充和补⽩)

• 边框 (

border )

• 外边距 (margin)

3、内边距

1)特征

1.位于内容content与边框border之间

2.padding加给⽗元素的,⽬的是调整⼦元素或者内容的位置

3.padding会撑⼤盒⼦

4.padding没有颜⾊,背景⾊会覆盖到padding区域

5.⾕歌f12中盒⼦模型的颜⾊是绿⾊

6.padding不⽀持负值

2)属性

  1. 单边的内边距

padding-⽅位词(top/right/bottom/left)

  1. 1-4边的内边距

padding:⼀个值 四边

两个值 上下 左右

三个值 上 左右 下

四个值 上 右 下 左

  1. 取值

数值(正数)、百分⽐(参考⽗元素的宽度,值为⽗元素宽度的X%)

3)应⽤(⽹⻚布局时要习惯去看调试台的盒⼦模型)

  1. 调整盒⼦中内容的位置,并更改盒⼦⼤⼩

◦ 直接正常使⽤padding即可

  1. 调整盒⼦中内容的位置,并且不改变盒⼦⼤⼩

◦ 设定padding值

◦ 再将盒⼦的宽⾼在原基础上减去增加的内边距值

  1. 若插⼊图⽚后,发现图⽚与padding之间有空⽩区域,如下图红⾊区域所显⽰

a. 原因:图⽚太⼩了

b. 解决:设置图⽚⼤⼩=重新调整后的内容⼤⼩4. 如果⾕歌浏览器调试台的数值跟⾃⼰敲得不⼀样问题不⼤(⽐如敲10 显⽰9.8),这时

候只要将⻚⾯缩⼩为80%即可

4)问题

不独占⼀⾏的⾏内元素只能调整左右内边距,⽆法调整上下内边距

不独占⼀⾏的⾏内块元素则可以调整所有边距

4、外边距

1)特征

1.位于边框border之外

2.margin是添加给元素⾃⾝的,⽬的是调整⾃⾝的位置或者元素与元素之间的位置

3.margin不会撑⼤盒⼦

4.margin没有颜⾊

5.⾕歌f12中盒⼦模型的颜⾊是橘⻩⾊

6.margin可以设置负值

2)属性

  1. 单边的外边距

margin-⽅位词(top、right、bottom、left)

  1. 1-4边的外边距

◦ ⼀个值 四边

◦ 两个值 上下 左右

◦ 三个值 上 左右 下

◦ 四个值 上 右 下 左

  1. 取值数值(正负值)、百分⽐(参考⽗元素的宽度,值为⽗元素宽度的X%)、 auto(平均

分配空间)

3)应⽤

  1. 去除内外边距
  • { padding: 0; margin: 0; } 只有数值为0的时候,才可以省略单位
  1. 元素⽔平居中

◦ 独占⼀⾏的元素⽔平居中

margin:auto; 或者 margin:0 auto; (

0表⽰上下外边距为0)

auto是平均分配空间,是margin的特殊取值,哪个元素需要居中该在哪个元素的

属性中进⾏设置)

◦ 不独占⼀⾏的元素⽔平居中

给⽗元素添加text-align: center

4)问题

  1. 外边距溢出:⽗元素⾥⾯的第⼀个⼦元素添加margin-top,会把⽗元素带下来

◦ 原因:⽗元素和⼦元素共享margin-top

◦ 解决:

1)给⽗元素添加1px的padding-top或者1px的border-top(不推荐,因为会撑⼤

盒⼦,影响布局)

⸺如果使⽤border 必须同时设置边框颜⾊和样式

2)给⽗元素添加overflow: hidden;(触发了BFC)

  1. 外边距合并:相邻的上下两个元素,垂直外边距相遇,上⾯有margin-bottom,下⾯有

margin-top,间距会重叠,数值以⼤的为准

◦ 解决:间距写单⼀⽅向

◦ 但是左右⽅向的外边距不会合并,最终的两个元素之间边距会为两个值的和

  1. 不独占⼀⾏的⾏内元素,使⽤上下⽅向的margin/padding/border⽆效注意:两个⾏内元素(如span)之间的⽩⾊空处是因为有空格,要消除的话,需要删掉空

写作:span1span2

5、元素的宽度

▪ 元素的总宽度

• width + padding2 + border2 + margin*2

▪ 元素的实际宽度

• width + padding2 + border2

6、元素类型的分类

1)第⼀种:两类⸺块级元素、⾏内元素/内联元素(特殊的⾏内块元素)

2)第⼆种:两类⸺置换元素、⾮置换元素

置换元素=⾏内块元素,如:img

• 浏览器会根据元素的标签名和属性来决定渲染的内容

• 本质上置换元素会在⻚⾯上先绘制⼀个框,在框中渲染内容

3) 第三种:三类⸺块元素、⾏内元素、⾏内块元素

块元素

div p h1-h6 ul li ol dl dt dd hr

1.独占⼀⾏,在⽂档流中从上往下排列

2.设置宽⾼有效

3.默认宽度为⽗元素的100% 默认⾼度靠内容撑开

4.盒⼦模型的属性都有效

5.在⽹⻚中以块的形式存在,可以作为容器放置其他元素,常⽤于布局

6.p不能嵌套其他的块元素 h1-h6不能嵌套标题类的标签

⾏内元素

span a s del u sup sub strong b em i br

1.与其他的⾏内元素或者⾏内块元素共⽤⼀⾏

按顺序从左到右排列 ⼀⾏放不下⾃动换⾏

2.设置宽⾼⽆效

3.默认宽⾼靠内容撑开

4.设置margin/padding/border的上下属性⽆效

5.span常⽤于⼀⾏⽂本中要设置不同样式时6.span标签会把元素紧紧包围住,不会再有其他的空间

7.左右的⾏内元素有间隙,这其实是空格,如是要删除该空⽩,可以把两个标签之间的空

格删掉

⾏内块元素

img

1.与其他的⾏内元素或者⾏内块元素共⽤⼀⾏

按顺序从左到右排列 ⼀⾏放不下⾃动换⾏

2.设置宽⾼有效

3.默认宽⾼不考虑,因为⾏内块元素的默认宽⾼在不同浏览器是不同,所以这个是需要⾃

⼰后期再去根据要求设置

4.盒⼦模型的属性都有效

5.会出现幽灵空⽩节点,可以在img的css代码中加上 display:block#