css盒子模型学习笔记

290 阅读25分钟

盒子模型的基本概念

盒子示意图:

盒子模型示意图

div、span和a等元素都可以看作一个盒子,但是图片、表单等元素一律看作是文本。 这个很好理解,一张图片并不能放任何东西进去,他自己就是自己的内容。

一个盒子主要由4个区域组成:

  • 内容区域:尺寸为内容宽度(或称content-box宽度),内容高度(或称content-box高度)
  • 内边距区域:尺寸是 padding-box 宽度 和 _padding-box 高度。
  • 边框区域:尺寸为 border-box 宽度 和 _border-box 高度。
  • 外边距区域:尺寸为 margin-box 宽度 和 _margin-box 高度;由于盒之间共享外边距,外边距不容易弄清楚(BFC)。

标准盒模型和IE盒模型

  • 标准盒模型中width和height只指内容区域(content)的宽度和高度

  • IE盒模型中width和height由内边距区域(padding)、边框区域(border)以及内容区域(content)的宽度高度共同组成

css中可以通过box-sizing来设置这两种模型

box-sizing: content-box; // 标准盒模型
box-sizing: border-box; // IE盒模型

知识点

  1. padding区域就是内边距,padding区域也有背景颜色,且与内容区域相同。也就是 说,background-color将填充所有border以内的区域。
  2. <body>标签有必要强调一下。很多人以为<body>标签占据的是整个页面的全部区域,其实是错误的,正确的理解是这样的:整个网页最大的盒子是<document>,即浏览器。而<body>是<document>的儿子。浏览器给<body>默认的margin大小是8个像素,此时<body>占据了整个页面的一大部分区域,而不是全部区域。
  3. 如何用border属性画三角形?
div {
    width: 0px;
    height: 0px;
    border: 50px solid transparent;
    border-bottom-color: red;
}

三角形示意图

  1. margin叠加问题,当两个盒子相邻的上下margin同时存在时,会取较大值作为实际的margin值。
  2. margin传递问题,在嵌套元素中(父子、兄弟),子元素的margin-top不会生效,解决方案:
  • BFC规范
  • 给父容器加一个border
  • 使用padding代替margin
  1. margin:auto 可以做到左右自适应居中,但不能垂直居中。