块级格式化上下文(Block Formatting Context)

CSS块级格式化上下文是块级盒子的一种能力,这种能力并不是直接通过css属性声明而获得的,而是添加css的一部分相关属性之后自动获得的能力,也就是说没有一个明确的属性就是生成块级格式化上下文的。

块级格式化上下文的能力就是让具有该能力的盒子可以隔绝盒子内外的环境,盒子内部的布局不会影响到盒子外部,同样盒子外部也不会影响到盒子内部。

那么,没有格式化上下文的盒子怎么样才能被盒子外部影响或者说怎么样才能影响到盒子外部呢?这个后面再说,我们先来看下块级格式化上下文有哪些规定。

  1. 在块级格式化元素(下面简称BFC元素)内部块级元素(下面简称box)在垂直方向一个接一个摆放(这个不言自明,块级元素都是在垂直方向一个接着一个摆放的,即使不是BFC元素的子元素)
  2. box左外边距紧挨块级元素border-left,即使存在浮动(同上)
  3. box间的垂直距离由margin-top/bottom决定,会发生垂直外边距折叠(同上)
  4. BFC元素计算高度的时候会将float的子元素计算在内(BFC元素不会因为因为float的子元素引起高度塌陷,发现了清除浮动)
  5. BFC元素内部不会影响到外部的布局(指的是子元素的垂直外边距不会和父元素的垂直外边距折叠。不是BFC的元素没有上下padding和border的情况下会和子元素的垂直margin发生折叠)
  6. BFC元素不会和float元素重叠(我们都知道元素float起来之后,该元素后面的兄弟元素会移动到float元素原来的位置,被float元素覆盖,但是float元素不会被覆盖,但是也不是垂直排列,而是与float并排显示,只是收缩自身给float元素腾出了位置。发现一个两列自适应布局的方式)

好看完了BFC的规定继续上面的问题。

在布局中有两种布局方式会有意料之外的表现,并且可以用块级格式化上下文来解决:

  1. 元素浮动造成父元素高度塌陷
  2. 相邻元素之间垂直外边距发生折叠

浮动元素引起的父元素高度塌陷

<style>
.wrap{background: #e77918;
}.l{width: 200px;height: 100px;float: left;background: #ccc;
}
</style><body><div class="wrap"><div class="l"></div></div>
</body>

父元素高度塌陷

这就是浮动元素引起的父元素高度塌陷,父元素的背景颜色并没有展示出来。

.wrap加上 overflow: hidden;之后形成了 块级格式化上下文,盒子内部的布局并不会影响盒子外部,所以盒子的高度不会塌陷。

父元素高度未塌陷

相邻元素之间垂直外边距发生折叠

<style>
</style>
<body><p>段落一</p><p>段落二</p>
</body>

垂直外边距折叠

p标签的默认垂直外边距就会发生折叠,段落一的下外边距和段落二的上外边距发生了折叠。这样就是段落一和段落二的垂直距离不是两个外边距之和而是取两个钟较大的。

让两个p元素分别在不同的BFC中就不会形成外边距折叠。

<style>div{overflow: hidden;}
</style>
<body><div><p>段落一</p></div><div><p>段落二</p></div>
</body>

垂直外边距未折叠

#使用BFC实现两栏布局

在BFC中,每个盒子的左外边框紧挨着包含块的左边框(从右到左的格式,则为紧挨右边框)。即使存在浮动也是这样的(尽管一个盒子的边框会由于浮动而收缩),除非这个盒子的内部创建了一个新的BFC浮动,盒子本身将会变得更窄)。

<style>*{margin: 0;padding: 0;}.l{float: left;}.nofloat{background: red;color: #fff;}p{padding: 10px 0;}
</style>
<body><div><p class="l">浮动</p><p class="nofloat">本段落未浮动</p></div>
</body>

未形成BFC

为 .nofloat 加上 overflow: hidden 形成 BFC 之后。

形成BFC

这就是两栏布局,.nofloat盒子是自适应的。

怎么形成块级格式化上下文

通过上文知道可以使用 overflow: hidden;让盒子具有BFC属性,除了 overflow: hidden;还有以下CSS属性可以形成BFC

  1. position不为 relative 和 static

  2. display为inline-block、table-cell、table-caption、flex、inline-flex中任何一个

  3. overflow不为visible

  4. float不为none

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端性能优化方法总结

一个网站前端性能的好坏很大程度上影响了用户愿不愿意使用访问这个网站&#xff0c;因此对前端进行性能优化是个很重要的事情。  对于前端性能优化这个问题&#xff0c;主要学习自yahoo前端性能团队总结的35条黄金定律总结&#xff0c;觉得很全很赞&#xff0c;做个学习总结和…

Akka笔记–演员介绍

过去做过多线程的任何人都不会否认管理多线程应用程序有多么艰辛和痛苦。 我说管理是因为它一开始很简单&#xff0c;一旦您开始看到性能改进&#xff0c;它就会变得非常有趣。 但是&#xff0c;当您发现没有一种简单的方法可以从子任务中的错误或难以发现的僵尸错误中恢复时&a…

Java英雄:丹·艾伦

“ Java英雄 ”系列休息了很长时间。 老实说&#xff0c;我想即使有很多人想在这里收录&#xff0c;它也可能会以虚无收场。 其中之一是丹。 我第一次要求他捐款已经将近一年半了&#xff0c;与此同时发生的一切&#xff0c;让我不再有任何答案就让我安心了。 但是以下内容在Ja…

Java-Class-I:java.util.List

ylbtech-Java-Class-I&#xff1a;java.util.List1.返回顶部 1.1、import java.util.ArrayList;import java.util.List; 1.2、List<Integer> newList new ArrayList<Integer>();newList.add(3); 2、 2.返回顶部1.1、import java.util.*;public class Test{public …

推荐:个人时间跟踪工具 ManicTime

在《个人管理 &#xff0d; 目标管理之前&#xff0c;你会时间管理吗》中我介绍的时间管理三阶段之一“对时间的实际去处进行记录”时说过现在有很多时间管理工具&#xff0c;也有人希望我介绍一下我使用的工具&#xff0c;那么我就利用中午休息时间&#xff0c;马上给大家介绍…

SQL Server 2005怎样进行性能排错

很少会有偶然的性能下降。设计不良的数据库或工作负载配置不正确的系统会经常导致性能问题。管理员需要能预先阻止或最小化问题的影响&#xff0c;当管理员遇到问题时&#xff0c;应该诊断问题并采取正确操作来修复问题。本文提供了按部就班的指导&#xff0c;通过使用可用的工…

JVM PermGen –您在哪里?

这篇文章介绍了JVM内存结构的一些基础知识&#xff0c;并快速窥视了PermGen&#xff0c;以了解自Java SE 8出现以来它已消失的地方。 裸基础 JVM只是系统上运行的另一个进程&#xff0c;魔术始于java命令。 像任何OS进程一样&#xff0c;它需要内存才能运行。 记住– JVM本身是…

python6-函数

转载于:https://www.cnblogs.com/WIU1905/p/11101249.html

Windows Phone 7.1 “芒果” SDK Beta 下载地址

Windows Phone 7.1 “芒果” SDK Beta 今天早上发布&#xff0c;第一时间下载体验。功能果然激动人心。 下载地址&#xff1a; 离线ISO请点我&#xff0c; 在线安装请点我。转载于:https://www.cnblogs.com/finehappy/archive/2011/05/25/2056849.html

Windows系统安装 ffmpeg

下载及解压 ffmpeg官方下载地址&#xff1a;https://ffmpeg.org/download.html 下载好后将其解压至你想保存的位置中。 环境变量设置 打开Windows设置&#xff0c;在搜索框输入&#xff1a;系统高级设置。 新建环境变量&#xff0c;并输入bin目录具体位置。 安装检查 按住 w…

Java黑科技之源:JVMTI完全解读

Java生态中有一些非常规的技术&#xff0c;它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。 形象地说&#xff0c;JVMTI是Java虚拟机提供的一整套后门。通过这套后…

常见的CSS布局

各种常见的CSS布局 在工作中会经常用到很多的布局方式&#xff0c;这里总结一下所遇到的布局&#xff0c;会持续更新。 悬挂布局 实现这种布局的方式有很多&#xff0c;这边主要挑两个&#xff0c;如下&#xff1a; 方式一&#xff1a;使用浮动和块级格式化上下文特性 这种…

OSCP-Kioptrix2014-2 漏洞利用

pChart 2.1.3 文件包含漏洞 搜索漏洞查看漏洞理由代码:hxxp://localhost/examples/index.php?ActionView&Script%2f..%2f..%2fetc/passwd 之前的8080端口禁止访问,看看apache的配置:http://192.168.1.78/pChart2.1.3/examples/index.php?ActionView&Script%2f..%2f..…

CodeSmith注册机,支持5.2.2和5.2.1版

CodeSmith&#xff0c;不用说了&#xff0c;大名鼎鼎的代码生成工具。最早是免费的&#xff0c;后来收费啦这个注册机是针对目前新的CodeSmith 5.2.2的&#xff0c;支持Professinal和其他版本。使用的方法&#xff1a;安装原版的试用版本&#xff0c;从官方网站下载运行试用版&…

linux epoll,poll,select

epoll函数用法&#xff0c;还有点poll和select 1&#xff0c;LT的epoll是select和poll函数的改进版。 特点是&#xff0c;读完缓冲区后&#xff0c;如果缓冲区还有内容的话&#xff0c;epoll_wait函数还会返回&#xff0c;直到把缓冲区全部读完。 2&#xff0c;ET的epoll&#…

shell学习笔记1-文件安全与权限

1&#xff0c;创建文件的用户和他所属的组拥有该文件&#xff0c;文件的属主可以设定谁具有读、写、执行该文件的权限&#xff0c;根用户可以改变任何普通用户的设置。 2&#xff0c;一个文件一经创建&#xff0c;就具有三种访问权限&#xff1a;读&#xff08;可以显示该文件的…

最新70佳单页网站设计案例欣赏(上篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

Kubernetes 中文文档

Kubernetes 中文文档 如果想学习 Kubernetes 的小伙伴&#xff0c;可以参考如下文档学习&#xff1a; https://www.kubernetes.org.cn/docs 文档中详细讲解了 k8s 的设计理念&#xff0c;基本概念&#xff0c;常用命令等。 转载于:https://www.cnblogs.com/miracle-luna/p/1111…

网易原来也是个骗子

当初开通photo.163.com网易相册时&#xff0c;就是看着网易的宣传口号&#xff1a;免费而且不限容量&#xff01;结果现在坏了&#xff0c;规则说改就改&#xff0c;容量一下子收到1G&#xff0c;超过部份要么给钱&#xffe5;&#xffe5;&#xffe5;&#xffe5;&#xffe5…

不同设备屏幕尺寸和DPR适配

为什么需要适配 目前市面上设备屏幕属性十分多样化&#xff08;宽度和DPR并不一致&#xff09;&#xff0c;而作为设计和前端开发&#xff0c;无法为每个尺寸的设备单独设计一套UI并将其转为前端代码&#xff0c;这不现实。所以我们需要一套方案来将一套设计稿完美呈现在不同尺…