文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页网页设计HTML/CSS  → CSS定位机制之普通流详解

CSS定位机制之普通流详解

时间:2010/11/25 20:25:23来源:葵中剑作者:iifksp我要评论(0)

由于没有找到自己认为完整的关于普通流、浮动和绝对定位的中文文章,于是鼓起勇气决定自己来写篇。为此大致啃掉了CSS2.1里的8Boxmodel以及9Visualformattingmodel.实话说,还真是看得有点头大,呵呵~文档流,其实标准里根本就没有这个词。如果把文档流直译为英文就是documentflow,但标准里只有另一个词,叫做普通流(normalflow),或者称为常规流。但似乎大家更习惯文档流的称呼,因为很多中文翻译的书就是这么来的。比如《CSSMastery》,英文原书中至始至终都只有普通流normalflow这一词,从来没出现过文档流documentflow.但是中文译本“普通流”和“文档流”却是交替出现的。

什么是普通流?简单说就是元素按照其在HTML中的位置顺序决定排布的过程。并且这种过程遵循标准的描述。

为了从不同角度说明,我采集了一些可能冗长、具体或者晦涩的其他人给出的定义:

将窗体自上而下分成一行行,并在每行中按从左至右的顺序排放元素,即为文档流。

Jennifer.Kyrnin@About.com:普通流是元素在多数情况下呈现在web页面上的方式。所有HTML都在块框(blockboxes,块级元素)或者行内框(inlineboxes,行内元素)中。

RainboDesign:当浏览器开始渲染HTML文档,它从窗口的顶端开始,经过整个文档内容的过程中,分配元素需要的空间。除非文档的尺寸被CSS特别的限定,否则浏览器垂直扩展文档来容纳全部的内容。每个新的块级元素渲染为新行。行内元素则按照顺序被水平渲染直到当前行遇到了边界,然后换到下一行垂直渲染。这个过程被成为普通文档流。

可见,把流(flow)理解为流程,完全说的通。普通流即是通常情况下的元素排布和定位流程。

但其实在CSS2.1RC里,普通流的本质是三种定位机制(Positioningschemes)之一,被定义为:

引用:

Normalflow.InCSS2.1,normalflowincludesblockformattingofblockboxes,inlineformattingofinlineboxes,relativepositioningofblockorinlineboxes,andpositioningofrun-inboxes.

这个过程包括了块格式化(blockformatting),行内格式化(inlineformatting),相对定位(relativepositioning),以及run-inboxes的定位。似乎和上面那些迥然不同,但是把这些分解开来,仍然是一致的。

另外,9.4Normalflow下还有一段:

引用:

Boxesinthenormalflowbelongtoaformattingcontext,whichmaybeblockorinline,butnotbothsimultaneously.Blockboxesparticipateinablockformattingcontext.Inlineboxesparticipateinaninlineformattingcontext.

这是段描述,不是定义。在普通流中的Box(框)属于一种formattingcontext(格式化上下文),类型可以是block,或者是inline,但不能同时属于这两者。并且,Blockboxes(块框)在blockformattingcontext(块格式化上下文)里格式化,Inlineboxes(块内框)则在inlineformattingcontext(行内格式化上下文)里格式化。

我们知道,任何被渲染的元素都属于一个box,并且不是block,就是inline.即使是未被任何元素包裹的文本,根据不同的情况,也会属于匿名的blockboxes或者inlineboxes.所以上面的描述,即是把所有的元素划分到对应的formattingcontext里。

组合上面的定义,并且姑且先把formattingcontext看做是一种范围限定,那么具体讲,普通流就是这样的过程:

1.在对应的blockformattingcontext中,块级元素按照其在HTML中的顺序,在其容器框里从左上角开始,从上到下垂直地依次分配空间、堆砌(stack),并独占一行,边界紧贴父容器。两相邻元素间的距离由margin属性决定,在同一个blockformattingcontext中的垂直边界将被重叠(collapse)。并且,除非创建一个新的blockformattingcontext,否则块级元素的宽度不受浮动元素的影响(这就是浮动元素能盖在块级元素上面的原因)。

2.在对应的inlineformattingcontext中,行内元素从容器的顶端开始,一个接一个地水平排布。水平填充、边框和边距对行内元素有效。但垂直的填充、边框和空白边不影响其高度。一个水平行中的所有inlinebox组成了名为linebox的矩形区域。linebox的高度始终容下所有的inlinebox,并只与行高有关。linebox的宽度受到父容器和浮动元素存在的影响(这就是文本环绕浮动元素)。如果linebox的宽度小于容器,linebox的水平排布就取决于text-align.如果linebox的宽度大于容器,则截断linebox并换行在新的linebox中重新排布元素(截断处不应用padding和margin值)。如果linebox无法截断,如单词过长或者指定不换行,则会溢出容器。

相关视频

    没有数据

相关阅读 个性化jQuery和CSS3菜单源码CSS实现Tab技巧CSS复位-CSS Reset代码举例IE6绝对定位的bug及其解决办法CSS样式表创建美妙绝伦的网站几个最常用和实用的CSS技巧将网站(主页)变成黑白DW设计网页时组织CSS的建议

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 页面进入效果表单 XHTML校验需要注意的6个细节CSS样式表创建美妙绝伦的网站了解XHTML DHTML SHTML之间的区别HTML小技巧的一些小技巧

人气排行 容易被误解的overflow:hiddenCSS中dashed和dotted的区别CSS水平和垂直居中的几种实现方法DIV+CSS自适应高度兼容IE6,ie7,ie8和FF的解css优先级问题如何用CSS实现图片圆角化处理超链接target=_blank的使用方法Ctrl+H键的用法