【分享】说说标准——CSS核心可视化格式模型(visual formatting model)之四:常规流中的Block formatting context

WebAdvocate 2010-08-02 06:34:38
加精
在上次分享的【分享】说说标准——CSS核心可视化格式模型(visual formatting model)之三:定位体系概述中,大致介绍了可视化模型中的定位体系。其中,常规流是最为基础的。

这次就和大家分享常规流的一些布局要点和重要的概念。

在常规流中的框(boxes,元素形成的矩形区域),都属于一个格式化的上下文中,可能是块的,也可能是行内的,但不可能同时是行内的又是块的。块框参与块格式化上下文。行内框参与行内格式化上下文。

块格式化上下文(Block formatting contexts)
有的资料上将 context 翻译成 “内容”。在这里,之所以把context翻译成“上下文”,是因为,它强调框存在的环境。所谓上下文,有活动范围,有效区域的意思。

如何触发
浮动元素,绝对定位元素,inline-blocks,table-cells,table-captions,以及 'overflow'不是 'visible'的元素,会创建新的block formatting context。

在CSS3中,对这个概念做了改动:http://www.w3.org/TR/css3-box/#block-level0
CSS3中,将Block formatting context 叫做 flow root。对于触发方式也做了修改:
The value of ‘position’ is neither ‘static’ nor ‘relative’ (见[CSS3]).

从上下文(context)变成了根(root),这个概念确实挺费解的。

可见,CSS3中的描述更加准确,position在 ‘fixed’ 的时候也会创建 flow root。这并不是CSS2.1的疏忽,因为 position:fixed 本身就是 position:absolute 的一个子类。

注意,display:table 本身并不产生 block formatting contexts。但是,它可以产生匿名框,其中包含 display:table-cell 的框会产生 block formatting context。总之,对于 display:table 的元素,产生 block formatting contexts 的是匿名框而不是 display:table。

它做了什么

这也是一个比较抽象的概念。可以把它想象成一个大箱子,里面装着很多元素,箱子可以隔开里面的元素和外面的元素。好像JS中的闭包,保护其中的元素。它可以包含浮动元素,可以阻止margin折叠,可以防止元素被浮动元素覆盖……

块格式化内容是个重要的概念,它对宽高的计算,margin折叠,定位等都有一定的影响。后续会有详细的说明。

在块格式化上下文中,框会一个接一个地被垂直放置,它们的起点是一个包含块的顶部。两个兄弟框之间的垂直距离取决于'margin'属性。在block formatting context中相邻的块级元素的垂直边距会折叠(collapse)。

在块格式化上下文中,每一个元素左外边(见:【分享】说说标准——你真的了解盒子模型(box model)吗?
)与包含块的左边相接触(对于从右到左的格式化,右外边接触右边),即使存在浮动也是如此(尽管一个元素的内容区域会由于浮动而压缩),除非这个元素也创建了一个新的block formatting context。

现实意义

Block formatting context 表现的很像普通的块框,那么它比较特殊的地方在哪里呢?
1. 可以包含浮动元素
2. 不被浮动元素覆盖
3. 阻止父子元素的 margin 折叠

另外,Block formatting context 的特性在某些地方像 IE 中的 hasLayout,对于两者的比较,稍后会奉上。

参考文章:
W3C:http://www.w3.org/TR/css3-box/#block-level0
Yahoo:CSS 101: Block Formatting Contexts

可视化格式模型概述:
http://topic.csdn.net/u/20100719/17/ff203b89-135e-46cf-8fce-705f16e37beb.html?006156676166584196

更多说说标准系列:
【分享】说说标准系列目录
...全文
4000 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
zonglp 2010-08-20
  • 打赏
  • 举报
回复
学习了。。。。。
iseebaby 2010-08-09
  • 打赏
  • 举报
回复
太深奥了,先下了看看,研究一下
macklau 2010-08-08
  • 打赏
  • 举报
回复
学习了
zjssgohyes 2010-08-08
  • 打赏
  • 举报
回复
看不太懂
D13474823348 2010-08-08
  • 打赏
  • 举报
回复
太深奥了,先下了看看,研究一下
pinsum 2010-08-08
  • 打赏
  • 举报
回复
不错,看看
yulai578 2010-08-08
  • 打赏
  • 举报
回复
高手啊
hopelaser 2010-08-07
  • 打赏
  • 举报
回复
学习学习
lkjh998 2010-08-07
  • 打赏
  • 举报
回复
8888888888888
tangtangkkkk 2010-08-07
  • 打赏
  • 举报
回复
学习。。
fengqipiaobo 2010-08-07
  • 打赏
  • 举报
回复
貌似很高深哦!
meijunguo 2010-08-07
  • 打赏
  • 举报
回复
FDAFDSFAADSFDSAFD
carzxc 2010-08-07
  • 打赏
  • 举报
回复
DDFDFDFDFD
tisumila1027 2010-08-06
  • 打赏
  • 举报
回复
学习了。。。
dans88 2010-08-06
  • 打赏
  • 举报
回复
学习学习
wangluo987 2010-08-06
  • 打赏
  • 举报
回复
太深奥了,先下了看看,研究一下
sffntm111 2010-08-05
  • 打赏
  • 举报
回复
不知道啥样看了再说
sffntm321 2010-08-05
  • 打赏
  • 举报
回复
不知道啥样看了再说
dongchz 2010-08-05
  • 打赏
  • 举报
回复
学习学习
litalmz 2010-08-05
  • 打赏
  • 举报
回复
先看看吧
加载更多回复(27)
内容概要:本文介绍了一种基于双层优化的微电网系统规划设计方法,旨在通过Matlab代码实现,解决微电网在规划与运行中的多目标、多层次决策问题。该方法将优化过程分为上下两层:上层通常负责容量配置、设备选址等长期规划决策,下层则聚焦于能量管理、出力调度等短期运行优化,通过迭代交互实现全局最优。文中详细阐述了模型构建、约束条件设定、目标函数设计及求解算法实现流程,并提供了完整的Matlab代码供复现实验,有助于深入理解微电网系统的设计逻辑与优化机制。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源、微电网、综合能源系统等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习和掌握双层优化理论在微电网规划设计中的具体应用;② 通过阅读和运行Matlab代码,复现并改进经典优化模型,用于学位论文、科研项目或实际工程方案设计;③ 深入理解微电网中分布式能源、储能与负荷的协同优化调度策略。; 阅读建议:此资源以Matlab代码实现为核心,强调理论与实践的结合。建议读者先理解双层优化的基本思想和数学模型,再结合代码逐行分析,重点关注变量定义、约束条件的代码转化以及主从问题间的迭代逻辑。鼓励在提供的代码基础上进行参数调整、场景扩展或算法改进,以深化学习效果。

5,007

社区成员

发帖
与我相关
我的任务
社区描述
解读Web 标准、分析和讨论实际问题、推动网络标准化发展和跨浏览器开发进程,解决各种兼容性问题。
社区管理员
  • 跨浏览器开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧