CSS盒模型分成W3C标准盒模型和IE模型

html-css07

CSS盒模型分成W3C标准盒模型和IE模型,第1张

W3C标准盒模型(默认):box-sizing: content-box

padding和border都会撑开盒子,改变盒子的宽度高度

总宽度:width + 左右border宽度 + 左右padding宽度 + 左右margin宽度

内盒宽度:width + 左右border宽度 + 左右padding宽度

IE盒模型:box-sizing: border-box

padding和border都不会撑开盒子,不会改变盒子的宽度,盒子的内容会相应缩小

总宽度:width + 左右margin宽度

内盒宽度: width

盒子模型布局稳定性

我们根据稳定性来分,建议如下:

按照 优先使用宽度,其次使用内边距,再次外边距。 即:width >padding >margin

原因:

(1)margin 会有外边距合并

(2)padding 会影响盒子大小,需要进行加减计算(麻烦) 其次使用

(3)width 没有问题我们经常使用宽度剩余法来做

padding margin 百分比

当margin和padding的值设置为百分比时,是相对于最近的块级或内联块父元素width(非总宽度)的相应百分比的值。

即使是margin-top、margin-bottom、padding-top、padding-bottom,设置为百分比时也是以最近块级父元素的width(非总宽度)为基准,而非height。

margin塌陷问题

相邻块元素垂直外边距的合并

当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和,而是两者中的较大者。这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。

解决方法:

将其放在不同的 BFC 父容器中

<div class="container">

    <div class="child"></div>

</div>

<div class="container">

    <div class="child"></div>

</div>

.container {

    overflow: hidden

}

.child {

    width: 100px

    height: 100px

    background: #f0

    margin: 100px

}

嵌套块元素垂直外边距的合并

对于两个嵌套关系的块元素,必须是block元素。如果父元素没有上内边距padding、没有上边框border、没有内容,则父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距取其较大者。即使父元素的上外边距为0,也会发生合并。

解决方法:

给父元素加 overflow:hidden,相当于给父元素添加了一个BFC

给父元素加上内边距 或 上边框

BFC

BFC 全称为块格式化上下文 (Block Formatting Context) 。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用

BFC触发条件:

overflow:除 visible 以外的值 (hidden、auto、scroll)

float:除 none 以外的值

display: inline-block、flex

position:absolute、fixed

BFC作用:

BFC解决margin塌陷问题

BFC解决浮动元素引起父元素高度塌陷问题

在通常情况下父元素的高度会被子元素撑开,而如果父元素没有设置高度,其子元素均为浮动元素,此时父元素会发生了高度坍塌,上下边界重合,即浮动元素无法撑起父元素。这时就可以用BFC来清除浮动了,将父元素整体设置为BFC环境

BFC解决元素被浮动元素覆盖问题

如果有两个相邻元素,第一个元素左浮动,第二个元素不设置浮动,这时候第二个元素会有部分被浮动元素所覆盖(但是文本信息不会被浮动元素所覆盖)。 如果想避免元素被覆盖,可触发第二个元素的 BFC 特性,在第二个元素中加入 overflow: hidden即可

龙华大道1号 http://www.kinghill.cn/Dynamics/2106.html

转自 菜鸟教程

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括: 边距(外边距) 边框 填充(内边距) ,和 实际内容

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):

转自 链接

盒子模型有两种,分别是W3C盒子模型(标准盒模型)和IE盒子模型(怪异盒模型)

1.标准盒模型中width指的是内容区域content的宽度;height指的是内容区域content的高度。

2.标准盒模型下盒子的大小 = content + border + padding + margin

1.怪异盒模型中的width指的是内容、边框、内边距总的宽度(content + border + padding);height指的是内容、边框、内边距总的高度

2.怪异盒模型下盒子的大小=width(content + border + padding) + margin

建议不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素和子元素。

即box-sizing属性可以指定盒子模型种类,content-box指定盒子模型为W3C(标准盒模型),border-box为IE盒子模型(怪异盒模型)。

标准模型 和IE 盒模型

内容: border + content + margin + padding

两种盒模型的区别

计算高度和宽度的方式不同

标准盒模型的计算方式 是 content 的高度和宽度

IE 盒模型的计算方式是 content + padding + border

1. 获取内联样式的宽、高.. (只能获取内联样式)

2. 内联和外联样式都能取到(只支持IE)

3. 所有的都支持

4. 计算绝对位置,能获取4个元素值 top right width height

对于行内元素 margin-top margin-bottom 设置无效, margin-left margin-right 有效! 对于相邻的块级元素 margin-top 和 margin-bottom 两者叠加按照一定的规则

(1) 都是整数 margin值取两者的最大值

(2) 都是负数 margin值取最小值

(3)两者正负相反,margin值取两者之和

(1) BFC 这个元素的垂直方向的边距会发生重叠。

(2) BFC 的区域不会与浮动元素的box重叠

(3) BFC 在页面是一个独立的容器,内外元素互补干涉

(4)计算 BFC 高度的时候浮动元素也会参与计算

根元素:

(1) float 属性不为 none

(2) position 为 absolute 或 fixed

(3) display 为 inline-block table-cell`````` table-caption``````flex`````` inline-flex

(4) overflow 不为 visible

(2) BFC 不与 float 重叠

(3) BFC 子元素即使是浮动元素,也不影响父集元素的计算。

如果不创建 BFC 父级元素的高为 0