前端一些理论知识(真的很理论)
前端 CSS 学习目录导航
浏览器前缀
-
有的时候,我们是可以发现有一些CSS属性的前面是具有一些特殊的符号的:
-o- -xv- -ms- -moz- -webkit-然后这些就是一些浏览器标识的属性,添加这些,我们就可以实现解决兼容性问题- 稀土掘金博主书写
- 官方文档的专业术语为:
vendor-specific extensions供应商特定扩展 - 首先我们开发一个属性的时候,我们首先需要的是我们的:
draft --> recommend的过程
BFC (block formatting context)
-
FC
(Formatting Context)[格式化上下文]-
元素在标准流中都是属于一个
FC的- 下面的描述就是表示的是我们的网页中的某一个元素的话,可能是属于我们的
BFC也可能是IFC
- 下面的描述就是表示的是我们的网页中的某一个元素的话,可能是属于我们的
-
-
BFC(Block Formatting Context)-
- 因为我写的不一定描述的很清楚,但是官网的话,描述十分清晰
-
在我们的标准流中的实现的时候,对于块级元素之间,都是实现的是在我们的 BFC 中实现的布局
-
所以说这个时候,我们就可以回顾我们的
margin-top导致的高度塌陷的问题了-
在两个块级元素为父子关系的时候,我们会发现,给子盒子设置
margin-top设置,会导致整体的移动 -
这个就是我们的
BFC导致的,两个处于一个BFC中,所以说导致了这个的效果 -
但是如果我们手动再创建一个单独的
BFC出来,这样就不导致出现这个效果了
-
-
什么情况下可以实现形成我们的 BFC
- 根元素
<html> - 浮动元素
元素的 float 属性不是 none - 绝对定位元素
元素position为absolute或者fixed - 行内块元素
元素的display 为 inline-block - 使用了不是属性值
visible的overflow的block-level element - 表格单元格
每个单元格都是含有一个 BFC的
- 根元素
-
BFC 有的体现效果:
-
html根元素形成一个 BFC 后,那么其他的块级元素就开始在里面实现一个一个的在垂直方向实现排布
- 然后每一个盒子和盒子之间的距离就是通过的我们的
margin来实现的设置 - 因为最终我们的
margin的设置是通过的我们的BFC实现的解析
- 然后每一个盒子和盒子之间的距离就是通过的我们的
-
如果含有了 行内级元素,那么就会形成 IFC,按照 IFC 的特性实现排布
-
在BFC中,box会在垂直方向上实现一个挨着一个实现排布
-
垂直方向上的盒子间距是通过我们的
margin实现的控制 -
在同一个 BFC 中,两个相邻的 box 之间会发生
margin折叠现象(collapse) -
在 BFC 中,每一个元素的左边缘是挨着包含快的 左边缘的
-
-
通过官方文档,我们的 BFC 可以实现解决的问题有那些:
-
解决上下两个盒子之间的
margin collapse的问题-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body { padding: 0; margin: 0; .container { /* container 又是一个新的 BFC 了,这个也是可以实现解决高度塌陷问题的,默认的都是属于 html 的 BFC 的 */ /* 新的 BFC 有新的布局特性,反正不是 html 的默认的 BFC 的 布局特性了的 */ overflow: hidden; margin-top: 10px; .box01, .box02 { height: 100px; } .box01 { background-color: skyblue; margin-bottom:10px; /* 为了实现预防这个现象,我们需要开创一个新的 BFC 出来 */ /* overflow: hidden; */ } .box02 { background-color: orange; margin-top: 20px; /* 当设置了我们的这个属性后就可以发现没有生效,这个就是 BFC 的实现的效果 */ } } } </style> </head> <body> <div class="container"> <div class="box01"></div> <div class="box02"></div> </div> </body> </html>
-
-
解决浮动带来的高度塌陷问题
-
BFC 的高度在设置为
auto的时候的元素的高度的计算- 首先先实现查看的是我们的是否含有:
inline-level element,是行高的顶部和底部的距离 - 如果含有
block-level element,是由最底层的块级元素的上边缘和最底层的下边缘之间的距离(z轴) - 如果有绝对定位元素直接忽略
- 如果有浮动元素,就会实现增加高度来实现包括这些浮动元素的下边缘
- 首先先实现查看的是我们的是否含有:
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body { padding: 0; margin: 0; .container { width: 600px; background-color: skyblue; overflow: hidden; margin: 100px auto; .sonFloat { width: 100px; height: 100px; } .sonFloat { background-color: red; float: left; } } } </style> </head> <body> <div class="container"> <div class="sonFloat"></div> </div> </body> </html> -
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> body { padding: 0; margin: 0; .container { width: 600px; height: 600px; background-color: skyblue; margin: 100px auto; .sonFloat, .sonNormal { width: 100px; height: 100px; } .sonFloat { background-color: red; float: left; } .sonNormal { /* 通过开辟一个新的 BFC 出来就可以实现我们解决浮动带来的问题 */ overflow: hidden; background-color: yellowgreen; } } } </style> </head> <body> <div class="container"> <div class="sonFloat"></div> <div class="sonNormal"></div> </div> </body> </html>
-
-
-