box-sizing 导致的宽高问题原理

来源:http://www.cnblogs.com/huangyin1213/p/6245109.html

css3的Sizing

Box-sizing是css3的box属性之一,遵循css的boxmodel原理,css中box model是分为两种,第一种是w3c的标准模型,另一种是ie的传统模型,他们相同之处都是对元素极端的模型,具体说就是对元素的width,height,padding,border以及元素实际尺寸的计算关系。

w3c的标准box model

外盒尺寸计算(元素控件尺寸)

Element空间高度 = content height +padding+border+margin

Element空间宽度 = content width +padding+border+margin

内盒尺寸计算(元素大小)

Element Height = content Height+padding+border(height为内容的高度)

Element Width = content Width +padding+border(width为内容的宽度)

ie传统下Box Model(ie6一下,不包括ie6版本)

外盒尺寸计算(元素空间尺寸)

Element空间的高度 = content heigth +margin(height包含了元素内容宽度,边框宽度,内距宽度)

Element空间的宽度 = content Width +margin(Width包含了元素内容宽度,边框宽度,内距宽度)

内盒尺寸计算(元素大小)

Element height = content height (height包含了的元素内容高度,边框高度,内距高度)

Element Width = content width(width包含了元素内容宽度,边框宽度,内距宽度)

box-sizing属性定义盒元素尺寸的计算方法:

content-box:默认值,计算方法为width/height = content,表示指定的宽度和高度仅限内容区域,边框和内边距的宽度不包含在内

padding-box:计算方法为width/height = content+padding,表示指定的宽度和高度包含内边距和北荣区域,边框宽度不包含在内

border-box:计算方法为width/height = content+padding+border,表示指定的w/h包含边框,内边距和内容区域。

inherit:表示继承父元素中box-sizing属性的值

正常情况下offsetWidth,offsetHeight获取元素的尺寸是足够了,但是某些元素比如SVG,MathML返回尺寸出错(这里不考虑),css3增加了一个box-sizing选择盒子模型,于是jquery里面就引入了augmentWidthOrHeight这个方法来处理因为box-sizing设置导致的问题,augmentWidthOrHeight这个方法其实就是对盒子模型的一个处理,所以jquery获取一个元素的w/h都是,ele.offsetW/H+augmentHeight方法也可以。