盒模型
在HTML中, 基本单位是元素; 而在CSS中, 布局的基本单位是盒, 盒总是矩形的.
盒模型的概念与定义
盒模型: css用于布局的基本单位和数据结构.
- content(width/height)内容宽高
- padding内边距
- 控制内容和边框之间的距离
- border边框
- margin外边距
- 总是透明
各部分的赋值
在赋值时, 可以使用px, em, ex和百分比, 按照顺时针上右下左赋值:
h1 {
padding: 10px 0.25em 2ex 20%;
}
当设置为百分比时, 其参考仅为父元素的width, 即10%是父元素width的10%.
# 值未声明时的默认值
padding或border未声明值时, 标准默认值为0, 但是在不同浏览器下又通常不为0, 而是被设为浏览器的默认值. 可以通过覆盖这些属性为0来规避浏览器的不确定性, 但是使用全局reset更安全
# auto
auto常用来实现水平居中, 因为它会使元素先占据指定的width, 剩余的宽度在一分为二成为左右外边距 问题是, 当窗口小于width的时候, 浏览器会显示左右滚动条, 有可能使元素展示得像是溢出了一样. 设置max-width可以解决之前的越界问题, 可以很好地适配小窗口的问题.
外边距叠加
当两个垂直外边距相遇时, 会合并成为一个外边距, 大小为两者中较大者. 不会发生层叠的盒子
- 行内框
- 浮动框
- 绝对定位框
盒子大小的计算方式/box-sizing
# 默认算法
在box-sizing这一属性出现以前, css的边框盒大小计算方式为:
- 边框盒宽度: width(content) + 左右padding + 左右border
- 边框盒高度: heigth(content) + 上下padding + 上下border
上面这种算法, 也是box-sizing属性的默认值: content-box
# box-sizing
box-sizing是为了解决css盒模型在布局上表现力比较差这个问题而诞生的, 有观点认为css标准盒模型更适合文档排版而不是UI布局, box-sizing一定程度上反映了这个观点. box-sizing有三种值:
- content-box: 默认盒模型
- border-box : border和padding计入width
- inherit : 继承父元素的值
设置box-sizing属性为border-box后, 边框盒的计算方式就发生了变化. width/height不再仅仅代表content, 而是content + padding + border
## width/height默认为content
当不设padding和border的时候, width和height的值就是content的大小. 即 width/height = content + padding(0) + border(0)
## 照实展示padding, border, 压缩content
当设置了padding和border, 那就先从width/height中减去这部分大小, 剩下的大小再用来安排内容content. 当padding+border大于width的时候, padding和border仍然会展现其应有的大小, 但content的大小则相对不确定. 即 content = width/height - padding - border. 但总保留一些最小的空间用于展示content.
为了适配多种内核, 一般需要这样写:
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box; <br>
box-sizing: border-box;