文档流:从浏览器角度重新解释CSS

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:oo2009123456
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:由于W3C标准的存在,让DIV+CSS成为主流页面布局技术。可是由于标准与实际的浏览器之间存在一定的偏差,让我们可能对CSS的使用和标准的理解产生头痛,本文就是通过对文档流的讨论和研究,从浏览器角度,揭开CSS问题的神秘面纱。
  关键词:文档流;CSS;浏览器;WEB;布局定位模式
  中图分类号:TP393.092 文献标识码:A 文章编号:1007-9599 (2012) 13-0000-02
  由于一直都找不到关于文档流(Document Flow)的正式定义,故在此用本文作者自己的语言来通俗阐述一下个人观点:文档流就是一个文档(Document)在计算机中的读取流和输出流的综合。而所谓的读取流(Input Flow),就是以文本形式存储的文档作为数据源时,一点点读入程序进程或计算机内存中的整个时域性的数据流。相对地,输出流就是由程序或相应进程将读入的数据经一定的算法或操作以一定的格式输出或显示的整个输出过程。
  那么在WEB中,即对于网页文档(Web Page),其文档流则可以十分容易地理解为,浏览器(Browser)对网页数据的读取和其对应的格式输出。所谓的网页数据则无非就是HTML+CSS+JS脚本语言文本,而输出的格式也就是网页的图文排版。如此一来,我们在WEB中讨论文档流,其实质上就是在讨论浏览器对于网页脚本的解析流。故在此作如下几方面展开:
  一、为什么要在WEB中引入文档流(Document Flow)
  其主要原因如下:
  1.系统化学习,并高效理解CSS标准
  2.从原理级理解浏览器对网页的解析过程
  3.让CSS HACK得到可遵循解释
  4.降低CSS HACK管理的难度
  设想,如果对CSS的学习和理解,可以像其他理工课程内容一样,有一个一般性的原理和规则来解释其中的现象或行为,那么无疑对于解决以上四个问题均提供了有力保证。
  本文作者认为,文档流(Document Flow)就可以作为一个具有一般性的,能解释CSS和浏览器对WEB的解析情况的理论。同时本文中所讨论的角度主要从浏览器实际行为出发,故在下面阐述的观点中,与W3C官方所定标准之间存在一定的偏差。
  二、文档流在WEB中如何工作
  如开篇所述,文档流是在浏览器中输入与输出的综合。那么讨论文档流在WEB中如何工作,其实就是在讨论浏览器对网页的解析过程,也就是浏览器本身的行为过程。
  在计算机中,一个程序进程读取文件一定是通过文件指针(File Pointer),从起始位一直移动到文件结束(End Of File)。而对应该进程的输出过程也一定是与输入过程相同的顺序,故可形象地将文件指针的移动过程本身看作文档流。
  那么浏览器进程输出显示网页排版内容,就一定是按照其在文档流中的顺序而输出的。形象地说,整个文档开始的内容一定是最先输出,而且其后所跟的内容在文档中也一定是记载于其对应部分之后。(Content at the top of the document,for example,is displayed first and is followed by the content after it.)
  在WEB里,所有内容都是通过HTML作为载体。故其文档流,就是由一个个的HTML元素(HTML Elements)组成。在代码上,HTML元素又是通过HTML标签来作为实体,故在W3C标准中,将HTML标签分成块级元素(Block-level Elements)与行级元素(Inline-level Elements)两类,来定义WEB中的文档流工作实质:
  1.在同一文档流平面中,块级元素在显示时独占一行,同级的块级元素也只能与其上下相邻。HTML4中与之对应的标签是

  2.行级元素是作为其所在文档流中的一个内容部分来显示,相当于是段落中的文本内容部分,HTML4中与之对应的标签就是
  由上可见,WEB中文档流如何工作的讨论重点,就是浏览器对块级元素与行级元素的解析与输出规则。
  而这两类元素之间,行级元素就是含在块级元素中的内容,而块级元素是作为一个个的盒子(Box Model)在整个页面中起占位排版的作用。
  三、用文档流解释CSS布局定位模式(Positioning Schemes)
  根据W3C标准,在布局定位模式(Positioning Schemes)中,将文档流分成三类:常规流(Normal Flow)、浮动流(Floats)与绝对定位流(Absolute Positioning)。
  这样就可以很好地在整个空间体系中来形象描述CSS的布局定位模式。在此将整个浏览器屏幕所在平面定义为xoy平面,那么在这个空间中的z轴则是垂直于屏幕,这其实正是CSS中的z-index属性——垂直于屏幕向外为该z轴的正方向。
  在一个文件中,可以由多个流组成,而每个流从xoy平面上来看均占满整个平面。那么流与流之间就是在z轴上的层叠关系。这个关系也有点类似于作图软件中的图层关系,即每一个流相当于一个图层。
  流也分成三类,那么不同类型的流则也表现不同:
  1.常规流(Normal Flow)是一个文档流内部的原始体系,可以想像成一张平铺的白纸。
  2.绝对定位流(Absolute Positioning)是脱离原始的流而形成一层新的流,并按给定的相应属性或规则(如z-index),与其他流之间形成层叠覆盖关系。
  3.浮动流(Floats)在本文中认为其本身未脱离所在的流,却相对于所在的母体流形成突起,从而使得在表现上类似于绝对定位流,与母体流形成层叠覆盖关系,可其实质上却并未脱离母体文档流。也就是相当于半个绝对定位。
  对于元素与流之间的关系,又可将不同定位属性的HTML元素分为如下三类:   1.置入文档流(In Flow):所有非绝对定位的元素均为置入文档流。而元素在文档流中可以形成突起浮动(Float),从而使得在输出表现上与脱离文档流相同。
  2.基本文档流(Fundamental Flow):作为整个文档中各层流的一个参考系。一般以z-index为0的那层流作为基本文档流。那么在基本文档流中的浮动流在表现上,相当于是形成了一层z-index为0.5的文档流(注:z-index必须为整数,此处的0.5只是为作一形象阐述)。
  3.脱离文档流(Out Of Flow):所有绝对定位的元素均脱离文档流。而所谓的流又都是通过HTML元素作为载体来表现的,那么每一个元素脱离文档流,实质上就是,该元素脱离了其父标签元素所在的文档流而独立形成一个新的流。
  以上观点虽与W3C标准略有出路,却可以更好地来解释和理解浏览器行为。
  HTML文档本身是由一个个HTML元素组成,在XHTML中,这些元素也被称为DOM元素。而根据以上观点,每一个元素本身又一定属于一种文档流,所以自然可以得出:
  元素作为整个HTML文档的根结点元素(Node),本身就是基本文档流。
  而元素中的一级子结点元素,若赋予绝对定位,那么该属性则是脱离基本文档流而形成一层新的流。
  综上所述,一个元素A的流,实质上就是一个由A元素本身和其内所有的置入文档流子元素所组成的集合。
  也有:常规流中的所有元素均为置入文档流。
  至此,CSS布局体系则可通过文档流来得到完全解释:
  四、用文档流解释不同浏览器引擎的兼容性问题
  不同浏览器引擎对网页的兼容性问题,主要就是来自浮动流(Floats)上。
  因为本文作者认为浮动流是介于常规流和绝对定位流之间,从而能同时看到这两种流各自的特点。而问题就是不同的浏览器引擎对于这个之间的程度把握不同。
  IE6、IE7中将浮动流很大程度上作为常规流解析,导致在IE6中并未做到浮动流相对于其母体流的突起,所以会出现IE6在边界问题上(margin值问题)与其他浏览器之间存在很大偏差。
  典型的IE捉迷藏问题(Peekaboo Bug)也可以通过文档流来进行很好的解释,其原因就是在于行级元素甚至直接就是文本内容与块级元素同级存放。这对浏览器的解析本身就是形成了困难,因为像IE6、IE7这样不突起形成z-index为0.5的浮动流,与IE8+和Firefox与Chrome这样接近W3C标准,将浮动流突起的浏览器引擎之间,解析自然就有问题了。所以也正如过去对捉迷藏问题的解决方案,注意DIV的嵌套习惯,避开不同级别元素和文本同级情况。
  至此,可以看到其实浏览器兼容性问题的起因就是因为对文档流的解析输出不同,就是与W3C标准的输出存在偏差。若以文档流来讨论这些问题,会发现连怪异模式(Quirks Mode)也其实并不怪异。
  那么既然浏览器引擎的兼容性问题可以得到解释,CSS HACK管理的难度自然可以彻底下降。这样,不论是对于学习CSS还是设计WEB都可以在很大程度上减少对浏览器兼容性的思考,而将更大的精力集中于如何设计美观并具艺术性的网页上了。
其他文献
浙江栋梁新材股份有限公司的主导产品是建筑节能铝型材,由于市场需求的不断升温,产品处于供不应求的状况,为此,该公司决定投资50377万元扩建2010年扩建5万吨/年表面处理铝型
小说文体有它独特的本质的规定性,但小说家在进行小说创作的时候往往偏离这种规定性,造成非文体化,而这正是小说文体审美张力的重要体现。小说家对于“第二视野”的描绘和20世纪影视艺术的发达是造成非文体化的主要原因。非文体化主要表现为小说的诗化和散文化、小说的戏剧化、小说的绘画化、小说的音乐化等,它拓展了小说的文体空间,而读者和批评者对非文体化小说进行接受和批评的观念亦要转变
<正> 一、世界图书馆自动化发展现状当前世界科学技术日新月异,尤其是电子计算机的问世和迅猛发展,使人类社会产生了又一次新的飞跃,开始进入了新的技术革命的所谓“三C四A”
布鲁纳曾经说过:“学习最好的刺激乃是对所学材料感兴趣。”有了兴趣,你就会积极投入、探究,从而起到事半功倍的效果。要激发向课外延伸的阅读兴趣,就要在老师的带领下找到激趣的切入点,从而“牵一发而动全身”,眼随老师向文学殿堂迈进。  一、课堂带动阅读  (一)由局部到整体——从课本节选片段扩展到原著整体阅读  高中语文课本注重时代感和文学性,体现了“以人为本”的教育理念,目的是通过文学教育提高学生的整体
通过朗读,可以形象和生动的表现作品的具体思想内容。朗读教学在语文教育中有着重要的地位,是训练学生语言能力的有效方法。在朗读训练中,不仅需要培养学生表现声音的技巧,还需要让学生从声音和言语中倾听作者心灵的声音,把自己的情感融入到语言中,这样才能读出自己的个性、感受以及经验。  一、明确朗读的指导重点  在小学课堂教学中,教师的朗读教学指导方法往往过于生硬和机械。一般来说,都是“有感情的朗读这个部分,
随着课业负担的增多,学习压力的加大,很多学生对作业产生排斥心理。因此我常常在想,我们是不是应该做些什么,改变些什么,从而打破这种僵局。能不能在作业形式上做点文章,作业设计多样化,让学生乐于写作业,同时激发他们的思维与情感,从本质上提高他们的语文素养。因此,我在平时的教学中做了些努力与尝试,与大家一起交流、切磋。  一、分层设计作业,让学生体验成功  如果要让处在不同层次上的学生都能在完成作业的过程
90年代以来,中国逐步由计划经济转向社会主义市场经济,在这样的形势下,人们对信息及知识的需求日益迫切,他们需要从知识中吸取力量,从信息中获取致富的“金钥匙”。然而,乡村图书馆由
<正> 文科学生主要靠读书。吸取知识,不“吸收”,就没有东西可消化,“吸收”多了,才能融会贯通。为此,教师讲课的重要内容就是介绍有关各专题的各种著作、学说。教师不必替学
以刚羽化出房的大蜡螟(Galleria mellonella L.)雌、雄蛾为研究对象,采用全自动顶空固相微萃取(headspace solid phase microextraction,简称HS-SPEM)和气相色谱-质谱(gas chromat
以黄瓜灰霉病病菌为供试菌,以新津春4号黄瓜幼苗为供试材料,研究不同浓度苦参生物碱溶液对2、4、6叶期黄瓜幼苗叶片的病情指数和相对防效。结果表明,苦参生物碱溶液对黄瓜幼