作者: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
推荐阅读
深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ...
[详细]
蜡笔小新 2024-11-07 20:50:46
【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ...
[详细]
蜡笔小新 2024-11-10 12:50:42
使用 ListView 浏览安卓系统中的回收站文件 ...
[详细]
蜡笔小新 2024-11-09 16:34:55
ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ...
[详细]
蜡笔小新 2024-11-07 13:17:24
本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ...
[详细]
蜡笔小新 2024-11-05 16:56:48
为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ...
[详细]
蜡笔小新 2024-11-13 12:14:35
createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ...
[详细]
蜡笔小新 2024-11-12 19:26:15
在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ...
[详细]
蜡笔小新 2024-11-12 18:52:04
php更新数据库字段的函数是,php更新数据库字段的函数是 ...
[详细]
蜡笔小新 2024-11-12 11:37:31
PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ...
[详细]
蜡笔小新 2024-11-11 13:40:49
本文探讨了在PHP中实现MySQL分页查询功能的优化方法与实际应用。通过详细分析分页查询的常见问题,提出了多种优化策略,包括使用索引、减少查询字段、合理设置缓存等。文章还提供了一个具体的示例,展示了如何通过优化模型加载和分页参数设置,显著提升查询性能和用户体验。 ...
[详细]
蜡笔小新 2024-11-11 12:46:36
本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ...
[详细]
蜡笔小新 2024-11-09 19:48:22
出库管理 | 零件设计中的状态模式学习心得与应用分析 ...
[详细]
蜡笔小新 2024-11-09 19:39:44
在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ...
[详细]
蜡笔小新 2024-11-08 17:43:20
如何在C#中配置组合框的背景颜色? ...
[详细]
蜡笔小新 2024-11-08 13:06:59