作者:94爱拍就是爱拍 | 来源:互联网 | 2023-09-02 11:58
不是谁都像你一样只向着前方就能活下去了,你就抛弃那些没用的同伴前行就好了,你注定是要成为海贼王的男人吧,而我就算没有远大的目标也可以。——《onepiece》
不是谁都像你一样只向着前方就能活下去了,你就抛弃那些没用的同伴前行就好了,你注定是要成为海贼王的男人吧,而我就算没有远大的目标也可以。——《one piece》
Block formatting contex
t (以下简写为BFC)又称做块级格式化上下文 ,源自CSS2.1 规范中的Visual formatting model,Visual fomatting model定义了视觉媒体该怎样处理文档内容,BFC属于Normal flow(正常流),它与其他正常流元素并没有本质的区别,BFC在CSS3中叫做 flow root 。了解怎样创建BFC,BFC的特性,以及它与其他属性
(如
float
,
clear
和
margin
)的相互作用。总而言之,BFC创造了一个的坏境,这个相对独立的环境,决定了它怎样影响外部和内部。
一,创建Block formatting context
满足以下任意一个条件,都将创建新的BFC.
浮动元素;
position 的值除 static 和 relative 以外的值;
display:table-cell 元素;
display:table-caption 元素;
display:inline-block 元素;
元素设置 overflow 值且不为" visible "( hidden | scroll | auto )[除非传播到视窗外];
display:table
本身并不会创建BFC,但因为它能生成匿名框,他们其中之一(
display:table-cell
)会创建BFC。换句话说,创建BFC的并不是
display:table
,而是
display:table-cell 。
position:fixed
也会创建BFC,因为
fixed
属于绝对定位的一个子类。
另外一个创建BFC的是
fieldset
元素,说来奇怪,在
www.w3.org
没有此信息。有提到这个是浏览器,但是有没有官方文档。事实上,如果fileset在大多数浏览器触发BFC的话,也不要认为其是理所当然的。
CSS2.1
并没有定义当属性应用与
form
和
frames
时的情况。
二,Block formatting context的特性
BFC与非BFC元素区分的重要点是BFC的特性,BFC主要有三个特性。
属于不同BFC中的想邻元素的垂直外边距将不会合并;
BFC闭合浮动;
BFC元素不会与浮动元素叠加;
1.Block formatting context禁止外边距叠加:
每个段落的上下垂直外边距都是1em,因为段落3处于一个新创建的BFC中,所以上边距不会像段落2和段落1一样,发生合并。所以段落2和段落3的距离变成了2em。
demo
2.Block formatting context闭合浮动
BFC能创造闭合浮动,里面的元素即使不用清除浮动,也不会溢出。例子中珊瑚色和天空蓝色的方块分别是左浮动和右浮动,但是它们都处于BFC闭合浮动中,别的说法是BFC中的元素参与高度计算。
demo
3.BFC元素不会与浮动元素叠加
根据概念,当一个BFC元素与浮动元素相邻时,触发BFC的元素的外边框不会与浮动元素的外边距叠加。
demo
如上图,第一种情况是黄色未浮动元素的一部分与浮动元素叠加,第二种是黄色块触发了BFC,BFC创造了一个隐形的外边距。如果我们要在两个元素之间制造一些空间,可以给左浮动元素添加外边距,或者给BFC元素添加大于浮动宽度的外边距。从而没有与浮动元素叠加,这个特性是非常有用的特性。一种最简单的应用BFC布局的就是左图右文字的布局。
三,Block formatting context与hasLayout的比较
你可能注意到前面例子中样式设置
overflow:hidden;zoom:1; 前面一个声明会创建BFC,后一个属性会在Internet Explorer 8(S)以下中触发hasLayout,
zoom 是设置或检索所选对象的缩放比例,它是有些的浏览器私有属性,Firefox和Opera并不支持,使用很少,但是它却能触发hasLayout,加上IEhack,就能兼容不支持BFC的浏览器。hasLayout是IE浏览器的私有属性,因为IE低版本浏览器并支持W3C的BFC,但因为两者是非常接近的,触发条件和BFC也类似,hasLayout也有BFC的相关特性。但是hasLayout和BFC的触发条件不尽相同,所以同时保证它们都触发是很重要的。
下列属性会触发hasLayout:
Internet Explorer 5 and 6
position:absolute;
position:fixed;
float (除none 的任意值);
display:inline-block;
width (除"auto "的任意值);
height (除"auto" 的任意值);
zoom (除"normal "的任意值);
writing-mode:tb-rl;
Internet Explorer 7
min-width (任意值);
min-height (任意值);
max-width (除"none"的任意值);
max-height (除"none"的任意值);
设置overflow 属性的元素(除visible 的任意);
overflow-x 和overflow-y (出visible 的任意值);
要注意的是使用诸如
zoom
等浏览器私有属性通不过W3C验证,IE5.0并支持
zoom
属性。当子元素的布局流与父元素的布局流不同时也会触发hasLayout(如rtl到ltr).
怪异模式 和 IE7 mode
当overflow设置的值是除visible的时,table-cell元素不会创建新的block formatting context;
当overflow设置的值是visble时,table-cell会创建一个新的block formatting context;
在Internet Explorer中,
(
在严格模式中
也是
)
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
。
BFC是一个布局环境,它是一个相对独立的空间,决定它怎样影响外部和内部元素。BFC的本质是正常六,但是它主要有三个特性:属于不同BFC中的相邻元素的垂直外边距不会合并,BFC可以闭合浮动,BFC元素不会与浮动元素叠加。因为低版本的浏览器(IE8(S)以下)没有BFC属性,但是它们有一个私有属性hasLayout,它的特性和BFC基本相同,但是它也可能导致一些bug。如果要兼容低版本浏览器(zoom:1 ),相反也是如此。
参考:http://w3help.org/zh-cn/causes/RM8002 、
http://www.yuiblog.com/blog/2010/05/19/css-101-block-formatting-contexts/ ,http://kayosite.com/block-formatting-contexts-in-detail.html
推荐阅读
本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ...
[详细]
蜡笔小新 2023-12-11 13:04:00
本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ...
[详细]
蜡笔小新 2023-12-14 12:09:13
本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ...
[详细]
蜡笔小新 2023-12-13 20:01:16
1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ...
[详细]
蜡笔小新 2023-12-13 18:03:01
本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ...
[详细]
蜡笔小新 2023-12-09 07:37:04
CSS|网格-行-结束属性原文:https://www.gee ...
[详细]
蜡笔小新 2023-10-17 15:21:56
本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-17 13:38:49
本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ...
[详细]
蜡笔小新 2023-12-14 15:56:00
本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ...
[详细]
蜡笔小新 2023-12-14 10:53:48
本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ...
[详细]
蜡笔小新 2023-12-13 11:21:32
本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ...
[详细]
蜡笔小新 2023-12-11 11:37:05
web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ...
[详细]
蜡笔小新 2023-12-11 11:25:16
本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ...
[详细]
蜡笔小新 2023-12-09 19:58:36
web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ...
[详细]
蜡笔小新 2023-10-17 20:40:03
python+selenium十:基于原生selenium的二次封装fromseleniumimportwebdriverfromselenium.webdriv ...
[详细]
蜡笔小新 2023-10-17 17:28:31