了解什么是 CSS 中的 BFC 的文章?
个人理解
1、BFC是一个独立的布局环境,BFC内部的元素布局与外部互不影响;
2、可以通过一些条件触发BFC,从而实现布局上的需求或解决一些问题;
3、可以将BFC想象成一个工具,无需探究其定义,只要着重理解其功能(特性)即可。
二、BFC有什么用?
BFC的触发条件
1、根元素(<html>)
2、float值非none
3、overflow值非visible
4、display值为inline-block、table-cell、table-caption、flex、inline-flex
5、position值为absolute、fixed
BFC的特性
1、属于同一个BFC的两个相邻容器的上下margin会重叠(重点)
2、计算BFC高度时浮动元素也参于计算(重点)
3、BFC的区域不会与浮动容器发生重叠(重点)
4、BFC内的容器在垂直方向依次排列
5、元素的margin-left与其包含块的border-left相接触
6、BFC是独立容器,容器内部元素不会影响容器外部元素
BFC功能总结
1、可以利用BFC解决两个相邻元素的上下margin重叠问题;
2、可以利用BFC解决高度塌陷问题;
3、可以利用BFC实现多栏布局(两栏、三栏、圣杯、双飞翼等)。
开启bfc之后
1.开启BFC 的元素不会被浮动元素所覆盖
2.开启BFC的元素子元素和父元素外边距不会重叠
3.开启BFC的元素可以包含浮动的子元素
常见margin重叠的两种方式:
-
相邻两个相邻Box的margin
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>解决margin重叠</title>
<style>
*{
margin:0;
padding: 0;
}
.up,.down{
width:200px;
height: 200px;
background: pink;
margin:50px;
}
</style>
</head>
<body>
<div class="up"></div>
<div class="down"></div>
</body>
</html>
效果图
解决办法:
在外层包一层div解决margin重叠,overflow:hidden开启新的BFC,使其不属于同一个BFC。
<body>
<div class="up"></div>
<div style="overflow: hidden;">
<div class="down"></div>
</div>
</body>
-
子父margin重叠:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>子父margin问题</title>
<style>
*{
margin:0;
padding:0;
}
.wrap{
width:300px;
height: 300px;
background: pink;
/*overflow: hidden;*/
/* border:1px solid black; */
}
.inner{
width:150px;
height: 150px;
background: green;
margin:50px auto;
}
</style>
</head>
<body>
<div class="wrap">
<div class="inner">
</div>
</div>
</body>
</html>
解决办法:
1、在父节点中 overflow:hidden开启新的BFC
2、在父节点外边描一个1px的框,隔开不在同一个BFC
什么是高度塌陷?怎么通过bfc解决?
在浮动布局中,父元素的高度默认是被子元素撑开的,当子元素完全脱离文档流,子元素从文档流中脱离将会无法撑起父元素的高度,导致父元素的高度丢失。父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱。这就是高度塌陷。
解决高度塌陷的方法,在发生塌陷的元素上:
- 1 将父元素的高度固定(但不推荐,因为在后续更改样式会不太方便)
- 2 在父元素结尾添加一个空的div,因为这个空的div并没有浮动,可将父元素内容撑 开,但会导致页面结构增加
- 3 使用after伪类解决高度塌陷
.box1::after{
content:''; ——内容不显示,无内容显示
display:block; ——after元素是一个行内元素,将它显示为一个块元素
}
2.开启BFC
BFC(间接 开启,或多或少会有一些不好的影响)BFC是一个CSS中的一个隐含的属性,可以为一个元素开启BFC,开启BFC该元素会变成一个独立的布局区
开局已经说了怎么开启bfc了
1.设置元素的浮动(不推荐用来开启BFC)例如: float:left;
2.将元素设置为行内块元素(不推荐用来开启BFC)例如: display:inline-block;
3.将元素的overflow设置为一个非visible的值 overflow:hidden;
常用的方式为元素设置overflow:hidden;开启其BFC,以使其可以包含住它的子元素
推荐阅读
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
什么是代码中的魔鬼数字,如何解决?
-
华为鸿蒙系统爆出惊天骗局!-点击图片直达书单现场 今日话题 留言分享:你认为华为的鸿蒙的系统发布之后将会有什么样的改变 ?或者留言分享你觉得华为的鸿蒙系统发布之后对安卓,苹果会有怎么样的冲击(留言字数50-100 )?精选留言中随机抽取一名留言 幸运读者(次日头条文章第一个置顶留言公布)送出上图中书单中任意书籍一本。 ▲ END 关注民工哥技术之路微信公众号,在后台回复关键字:1024 或 2048 ,可以获取一份最新整理的技术干货。 - MORE | 往期精彩文章 -
-
1024程序员节及程序员职责:您需要了解什么是1024程序员节以及程序员的工作内容
-
小白也能懂!C#中LINQ的基础使用教程 - 什么是LINQ?
-
想了解 CSS Parser 的原理吗?现在是 2023 年了!
-
什么是数学中的24点游戏?
-
汽车后面的字母是什么意思?-增压发动机 类型一:TSI 大众的TSI在国内外有着不一样的意思,国外的意思是Twincharger Stratified ion,指双增压(涡轮和机械增压)分层喷射技术。而国内的意思,T代表涡轮增压,Si代表燃油直喷,而不是T与FSI的简称,并没有燃油分层喷射技术,因为国内燃油质量一般,达不到分层喷射的要求。 在国内,我们经常会看到不同的TSI标志。有全红的、有就“SI”是红的、还有只有“I”是红的。但大家别误会他们技术不一样,这只是为了区分不同的排量而已。例如:2.0排量和1.8排量为“SI”是红色的,而2.0TSI车型中的高配车型或者高端车型则使用全红的标识,那么1.4排量的当然只能是只有“I”是红色的了。 类型二:TFSI TFSI发动机也是涡轮燃油直喷发动机它可以说是FSI发动机和涡轮增压器的结合。即涡轮增压(Turbocharger)+FSI。它的T和TSI中的T一样,表示采用涡轮增压技术,后面的FSI即燃油分层喷射发动机(Fuel Stratified ion),S表示“分层次的”。TFSI发动机既分层喷射,又有涡轮增压,是TSI发动机的升级版。 类型三:TDI TDI是英文Turbo Direct ion的缩写,意为涡轮增压直接喷射柴油发动机。 为了解决SDI(自然吸气式柴油发动机)的先天不足,人们在柴油机上加装了涡轮增压装置,使得进气压力大大增加,压缩比一般都到10以上,这样就可以在转速很低的情况下达到很大的扭矩,而且由于燃烧更加充分,排放物中的有害颗粒含量也大大降低。TDI技术使燃油经由一个高压喷射器直接喷射入气缸,因为活塞顶地造型是一个凹陷式的碗状设计,燃油会在气缸内形成一股螺旋状的混合气。 自然吸气发动机类型一:CGI/CDI 发动机CGI技术是一种奔驰公司开发的缸内直喷技术。供油动作已完全独立于进门与活塞系统之外,ECU也因而拥有更多的主导权。超乎传统喷射理论的稀薄燃烧与更多元的混合比便得以实现。在稳定行进或低负载状态下,采用缸内直喷设计的发动机得以进入Ultra lean(精实)模式。 在此设定下,发动机于进气行程时只能吸进空气,至于喷油嘴则在压缩行程才供给燃料,以达到节约的效果。根据实际测试,其最高能达到1:65的油、气比例,除了节能表现相当惊人,整体动力曲线也能够维持相当高的平顺度。而CDI则为该技术的柴油版本。类型二:VVT/CVVT/VVT-I/MIVEC/VTEC/i-VTEC 发动机可变气门正时技术(VVT,Variable Valve Timing)原理是根据发动机的运行情况,调整进气(排气)的量,和气门开合时间、角度,使进入的空气量达到最佳,提高燃烧效率。优点是省油,功升比大而缺点是中段转速扭矩不足。 目前本田的VTEC、i-VTEC、;丰田的VVT-i;日产的CVVT;三菱的MIVEC;铃木的VVT;现代的VVT;起亚的CVVT;江淮的VVT;长城的VVT等也逐渐开始使用。总的说来其实就是一种技术,名字不同。 但部分车型仅具有可变气门技术而没有正时技术,虽然比一般发动机要省油,但依然赶不上带正时技术的发动机。绿色发动机 类型一:Hybrid
-
在TS中,什么是泛型?它适用于哪些实际场景 - 泛型的运用与示例解析
-
理解Java中的继承概念: 什么是Java继承性?