CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:外边距(margin)
、边框(border)
、内边距(padding)
、实际内容(content)
四个属性。
CSS盒模型:标准模型 + IE模型css
计算宽度和高度的不一样。
标准盒模型:盒子总宽度/高度 = width/height + padding + border + margin
。( 即 width/height 只是内容高度,不包含 padding 和 border 值 )
IE盒子模型:盒子总宽度/高度 = width/height + margin = (内容区宽度/高度 + padding + border) + margin
。( 即 width/height 包含了 padding 和 border 值 )html
标准:box-sizing: content-box;
( 浏览器默认设置 )
IE: box-sizing: border-box;
浏览器
(1)dom.style.width/height
只能取到行内样式的宽和高,style 标签中和 link 外链的样式取不到。
(2)dom.currentStyle.width/height
(只有IE兼容)取到的是最终渲染后的宽和高
(3)window.getComputedStyle(dom).width/height
同(2)可是多浏览器支持,IE9 以上支持。
(4)dom.getBoundingClientRect().width/height
也是获得渲染后的宽和高,大多浏览器支持。IE9 以上支持,除此外还能够取到相对于视窗的上下左右的距离。
(6)dom.offsetWidth/offsetHeight
包括高度(宽度)、内边距和边框,不包括外边距。最经常使用,兼容性最好。dom
例:父元素里面嵌套了一个子元素,已知子元素的高度是 100px,子元素与父元素的上边距是 10px,计算父元素的实际高度。
CSS:布局
.parents { width: 100px; background: #FF9934; } .child { width: 100%; height: 100px; background: #336667; margin-top: 10px; }
Html:flex
<section class='parents'> <div class='child'><div> </section>
它的父元素实际高度是 100px 或 110px 均可以。主要看怎么父元素的盒模型如何设置。如以上代码:父元素不加 overflow: hidden
,则父元素的实际高度为 100px; 如加上 overflow: hidden
父元素高度为 110px,给父元素建立了 BFC,块级格式化上下文。 完整案例: https://jsbin.com/dubimoyahe/...。spa
BFC: 块级格式化上下文
BFC基本概念:BFC
是 CSS
布局的一个概念,是一块独立的渲染区域,是一个环境,里面的元素不会影响到外部的元素 。
父子元素和兄弟元素边距重叠,重叠原则取最大值。空元素的边距重叠是取 margin
与 padding 的最大值。code
(1)内部的 Box
会在垂直方向,从顶部开始一个接着一个地放置;
(2)Box
垂直方向的距离由 margin
(外边距)决定,属于同一个 BFC
的两个相邻 Box
的 margin
会发生重叠;
(3)每一个元素的 margin Box
的左边, 与包含块 border Box
的左边相接触,(对于从左到右的格式化,不然相反)。即便存在浮动也是如此;
(4)BFC 在页面上是一个隔离的独立容器,外面的元素不会影响里面的元素,反之亦然。文字环绕效果,设置 float
;
(5)BFC 的区域不会与 float Box
重叠(清浮动);
(6)计算 BFC
的高度时,浮动元素也参与计算。htm
0、根元素,即 HTML 元素(最大的一个 BFC
)
一、浮动( float 的值不为 none
)
二、绝对定位元素( position 的值为 absolute 或 fixed
)
三、行内块( display 为 inline-block
)
四、表格单元( display 为 table、table-cell、table-caption、inline-block 等 HTML 表格相关的属性
)
五、弹性盒( display 为 flex 或 inline-flex
)
六、默认值。内容不会被修剪,会呈如今元素框以外(overflow 不为 visible
)blog
一、自适应两(三)栏布局(避免多列布局因为宽度计算四舍五入而自动换行)
二、避免元素被浮动元素覆盖
三、可让父元素的高度包含子浮动元素,清除内部浮动(原理:触发父 div
的 BFC
属性,使下面的子 div
都处在父 div
的同一个 BFC
区域以内)
四、去除边距重叠现象,分属于不一样的 BFC
时,能够阻止 margin
重叠
IFC: 行内格式化上下文
IFC基本概念:
(1)内部的 Box
会在水平方向,从含块的顶部开始一个接着一个地放置;
(2)这些 Box
之间的水平方向的 margin
,border
和padding
都有效;
(3)Box
垂直对齐方式:以它们的底部、顶部对齐,或以它们里面的文本的基线(baseline
)对齐(默认,文本与图片对其),例:line-heigth
与 vertical-align
。
更多文章分享:https://www.artroy.com.cn/