CSS Box Model 盒子模型

1.概述

1.1前言

css盒子模型具备的属性:内容(content)、填充(padding)、边框(border)、边界(margin);而日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以用盒子模式来理解。

生活中的盒子说明:

内容(content):盒子里装的东西。

填充(padding):怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其他抗震的辅料。

边框(border):盒子本身。

边界(margin):盒子摆放的时候不能全部堆在一起,留一些空隙保持通风,同时也为了方便取出。

网页中的盒子说明:

内容(content):文字、图片等元素(一张图片里不能放东西,它自己就是自己的内容,故不是盒子),也可以是小盒子(div嵌套)。

填充(padding):像素填充,可有可无。

边框(border):像素展示,可有可无。

边界(margin):像素填充,可有可无。

两种盒子的差异:生活中的盒子中东西一般不能大于盒子,否则盒子会被撑坏。而css盒子具有弹性,里边的东西大过盒子本身最多把它撑大,但它不会损坏。

1.2 组成结构

 以Chrome浏览器中盒子模型为例:

content:内容区域,文本、图片出现的位置。CSS中的width、height属性直接作用的区域。

padding:内边距区域,存在于content 和 border 之间的区域。可使用CSS的属性有padding-top、padding-right、padding-bottom、padding-left以及padding。

border:边框区域,存在于padding 和 margin 之间的区域。在默认布局中border的宽度会设置为0,从而不显示元素的边框。

margin:外边距区域,控制其他元素与当前元素的边距距离。可使用CSS的属性有margin-top、margin-right、margin-bottom、margin-left以及margin。

1.2.1 示例

说明:样式宽度和真实占有宽度,不是同一内容

2.盒子模型

标准盒子模型与IE盒子模型差异说明:

  • 在CSS盒子模型(Box Model)规定了属性为:内容(content)、内边距(padding)、边框(border)、外边距(margin)
  • 在CSS的标准盒子模型中,width和height指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。IE盒子模型中,width和height指的是内容区域+边框(左右或上下之和)+内边距(左右或上下之和)的宽度和高度。 

2.1 标准盒子模型

2.2 IE盒子模型

 

2.3 盒子说明【标准盒子模型】

内容:width、height

盒子样例(真实占有宽高都为:302*302):

.box1{
        width: 100px;
        height: 100px;
        padding: 100px;
        border: 1px solid red;
   }
/*盒子真实占有宽度 = 左border + 左padding + width + 右padding + 右border  盒子真实占有高度 = 上border + 上padding + height + 下padding + 下border*/
.box2{
        width: 250px;
        height: 250px;
        padding: 25px;
        border: 1px solid red;
    }

盒子模型:

             

总结:

如果想保持一个盒子的真实占有高宽不变,那么加width/height的时候,就要减相应的padding。加padding的时候就要减相应的width/height。因为盒子变胖是灾难性的,会把别的盒子挤下去

3.元素的宽与高

默认情况下,CSS中width、height属性是指content(内容)区域的宽高。

在DOM中,获取元素高宽有以下属性:clientWidth/clientHeight、offsetWidth/offsetHeight、scrollWidth/scrollHeight。

3.1 clientWidth、clientHeight

说明:对象内容的可视区的宽度、高度;包含内边距、内容区域的宽度、高度,不包滚动条等边线。

公式:

element.clientWidth = padding-left + width + padding-right
element.clientHeight = padding-top + height + padding-bottom

示例:

3.2 offsetWidth、offsetHeight

说明:对象整体的实际宽度、高度;包含了边框、内边距、内容区域以及滚动条等范围的宽度、高度;

公式:

element.offsetWidth = border-left + padding-left + width + padding-right + border-right
element.offsetHeight = border-top + padding-top + height + padding-bottom + border-bottom

 示例:

3.3 scrollWidth、scrollHeight

说明:与clientWidth、clientHeight类似(包含内边距、内容区域,但不包括滚动条),不同的是scrollWidth、scrollHeight与元素的overflow样式属性息息相关:

当块级元素的内容超出元素大小时,其内容会根据overflow设定的值出现滚动条或内容溢出,scrollWidth、scrollHeight包含了这些不可见的内容区域。

示例:

4. box-sizing

在默认情况下,CSS中的width和height属性的值只会应用到元素的content(内容区域),而box-sizing属性可修改此默认范围。

box-sizing的值有content-box(默认值)和border-box

4.1 box-sizing:content-box

说明:表示CSS中的width和height属性的值只会应用到元素的内容区域。

如设置一个元素的width为200px,那么只是这个元素的内容区域宽度有200px。

4.2 box-sizing:border-box

说明:表示元素的边框和内边距的范围包含在CSS中的width、height内。

如设置一个元素的width为200px,那么此元素内容区域的宽度 = 200 - border - padding。

5. jQuery中元素宽度(高度)

jQuery提供了以下几种获取元素的宽度方法:

$(element).width():获取元素content(内容)区域的宽度。若元素的含有 box-sizing: border-box ,会减去相应的padding、boder。

$(element).innerWidth():获取元素 content区域 + padding 的宽度。

$(element).outerWidth():获取元素  content区域 + padding + boder 的宽度。

$(element).outerWidth(true):获取元素  content区域 + padding + boder + margin 的宽度。

示例图

posted @ 2018-08-31 21:33  ajuan  阅读(225)  评论(0编辑  收藏  举报