#css3# box-sizing

box-sizing属性让css布局更容易并且更直观。但是为什么它有效又被热爱,先让我们看下它的历史。

盒子模型历史

自从css诞生,盒子模型就这样默认的工作:

width + padding + border = 元素被渲染的/实际可见的宽度

height + padding + border = 元素被渲染的/实际可见的高度

这可能是违法直觉的,因为一旦你给元素加了padding或border你设置的高度/宽度就会跑出window。

回顾一下web设计,IE早起的版本(<IE 6)在 quirks mode下处理盒子模型是不同的:

width = 元素被渲染的/实际可见的宽度

height = 元素被渲染的/实际可见的高度

border/padding的值被放进了元素盒子里,通过减小盒子的宽/高,而不是扩展它。

一些人更喜欢这种quirky的盒子模型,认为它更直观。

但是,在固定宽度设计的时代,一旦你理解了默认盒子模型,使用起来就不太复杂。你可以通过简单的数学计算出你需要设置多宽多高。对于现在的开发者的问题是那些绝对的px长度不会翻译成自适应的设计i,所以相同的数学问题不再适用。

自适应设计开始变得流行,开发者和设计者希望更新盒子模型。伟大的设计者Jon Hicks,以他的优秀的流式宽度设计出名,在CSS wishlist上加了这个主题:

我想要一个不一样的盒子模型。我发现一个把padding/border加在元素的宽度上很奇怪,希望能给出一种方式,比如textarea 100% 宽,3px padding,不用担心它会怎样布局。也许可以是一个内置padding?

现代box-sizing

这些想法促进了box-sizing属性被引入css3.即使box-sizing有三种值:content-box,padding-box,border-box,最常用的是border-box。

现在,所有浏览器的最新版本使用了原始的:width/height + padding + border = 实际宽/高 的盒子模型。用box-sizing:border-bbox;我们可以改变盒子模型为曾经的quirky方式,这种方式元素的具体宽高并不会受padding/border影响。这已经证明了自适应设计中很有用。

因此,你可能会自问,“是不是旧版本的IE做了正确的事情?”一些人是这样认为的。

Good,Better,and (probably) Best box-sizing Reset Methods

# The “old” border-box reset

* {
  box-sizing: border-box;
}

# Universal Box Sizing

*, *:before, *:after {
  box-sizing: border-box;
}
//这种方法包含了伪类元素。但是*选择器让开发者在别的地方使用content-box/padding-box比较困难。

# Universal Box Sizing with Inheritance

html {
  box-sizing: border-box;
}
*, *:before, *:after {
  box-sizing: inherit;
}
// 这种reset方法比之前的方法给你了更大的灵活性 -- 你可以任意使用content-box/padding-box,不用担心通配选择器覆盖你的css。

  

原文地址:https://www.cnblogs.com/tianmuxi/p/9076373.html