w3c系列CSS之路(五):详解visual formatting model

本文是对w3c系列CSS之路(四)种的VFM的完善和补充,官方原文:http://www.w3.org/TR/2011/REC-CSS2-20110607/visudet.html

1 containing block

containing block(包含框)上节有提到,这里给出更详细的介绍。一个盒子的位置和大小通常都跟包含它的矩形框有关,这个矩形框就是这个盒子的包含框。标准给出了一个元素的containing block的定义:

  1. 首先,根元素的居住的包含框叫做initial containing block(初始包含框);
  2. 对于非根元素,如果其position为static或relative,containing block的形成依赖于其最近的block container祖先块的内容边界;
  3. 如果position属性为fixed,containing block依赖于viewport而建立;
  4. 如果position属性为absolute,containing block的形成依赖于最近的,并且position值为relative | absolute | fixed 的先祖元素。如果它没有这样的先祖元素的话,containing block就是initial containing block。

为了更好的理解,我们举个例子就知道了:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
   <HEAD>
      <TITLE>Illustration of containing blocks</TITLE>
   </HEAD>
   <BODY id="body">
      <DIV id="div1">
      <P id="p1">This is text in the first paragraph...</P>
      <P id="p2">This is text <EM id="em1"> in the
      <STRONG id="strong1">second</STRONG> paragraph.</EM></P>
      </DIV>
   </BODY>
</HTML>

html的containing block是由initial containing block建立的,#div1的containing block是由body建立的,#p1的containing block是由#div1建立的,#em1的containing block是由#p2建立的......

如果加上以下样式的话:

#div1 { position: absolute; left: 50px; top: 50px }
#em1  { position: absolute; left: 100px; top: 100px }

#div1的containing block则是由initial containing block建立的。而#em1的containing block则是由#div1建立的。

2 width宽度的计算

width属性指定了元素内容的宽度,相关信息如下:

可取值:   <length> | <percentage> |
auto | inherit
初始值:   auto
适用于:   all elements but non-replaced inline elements, table rows, and row groups
是否继承:   no
百分比:   取决于containing block的宽度
Media:   visual
Computed value:   百分值, 或者auto,或者是绝对长度

width属性对non-replaced inline elements无效,因为non-replaced inline elements 的宽度就是其内容的宽度。

时间: 2024-09-13 19:52:43

w3c系列CSS之路(五):详解visual formatting model的相关文章

w3c系列CSS之路(二):错误解析和基本数据类型

有时候当你发现你写的样式代码并没有如期执行时,很可能是你打错字了.但是其他元素的样式并没有失效,这跟其他语言还是有区别的,比如C,语法出错编译就会报错,更别说执行了.CSS对于语法错误有它自己的解析机制,下面我们就来探讨一下. 1.错误处理 要想解析语法错误,首先得明白语法,一些基本的用法这里就不说了,说些关键点: 1.注意关键字的使用.不要在关键字外加引号.比如:color:"red";是不对的. 2.支持厂商对关键字的扩展.比如_height在非IE浏览器下是非法无效的,但在IE6

深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)

深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇) 上篇文章<深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)>我们通过对mybatis源码的简单分析,可看出,在mybatis配置文件中,在configuration根节点下面,可配置properties.typeAliases.plugins.objectFactory.objectWrapperFactory.settings.environments

深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇) 上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, 本篇继续讲剩下的配置节点之一:typeAliases. typeAliases节点主要用来设置别名,其实这是挺好用的一个功能, 通过配置别名,我们不用再指定完整的包名,并且还能取别名. 例如: 我们在使用 co

构建安全的Xml Web Service系列之wse之错误代码详解

原文:构建安全的Xml Web Service系列之wse之错误代码详解     WSE3.0现在还没有中文版的可以下载,使用英文版的过程中,难免会遇到各种各样的错误,而面对一堆毫无头绪的错误异常,常常会感到迷茫和无助,我起初就觉得这个框架使用起来真的很难用,有时候一些莫名其妙的错误会困扰我半天或者几天的时间,而一些英文的解释理解起来似是而非,很难一针见血的获得哪里出了问题,我将用几篇文章将wse所涉及到的错误代码和错误消息翻译成中文,并且根据个人的一点经验,提出引发错误的原因,并总结出解决建议

Jquery揭秘系列:ajax原生js实现详解(推荐)_jquery

讲到ajax这个东西,我们要知道两个对象XMLHTTPRequest和ActiveXObject ,提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力.可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容.XMLHTTPRequest基本上算是标准化了,兼容大部分浏览器ActiveXObject这玩儿意儿是微软的东西,所以是为了兼容IE版本,我们用的只是它的xmlHTTP功能. 为了功能的明确和清晰,我们

ASP.NET深入浅出系列2-页面生命周期详解

上个系列中介绍了页面生命周期的整体流程,可能有些读者还想更进一步了解整个生命周期的细节,限于篇幅我不可能讲到所有细节,也没必要,这里仅举几个例子,大家可以通过这几个例子学习一下页面生命周期的研究方式. Control类中有如下事件 // 当服务器控件绑定到数据源时发生. public event EventHandler DataBinding; // 当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段. public event EventHandler D

iOS开发系列--通知与消息机制详解_IOS

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 本地通

MVC系列(3) HttpRuntime详解分析(下)

文章内容 话说,经过各种各样复杂的我们不知道的内部处理,非托管代码正式开始调用ISPAIRuntime的 ProcessRequest方法了(ISPAIRuntime继承了IISPAIRuntime接口,该接口可以和COM进行交互,并且暴露了 ProcessRequest接口方法).至于为什么要调用这个方法,大叔也不太清楚,找不到微软相关的资料哦.但大叔确定该方法就是我们进入 HttpRuntime的正式大门,接着看吧. public int ProcessRequest(IntPtr ecb,

MVC系列(2) HttpRuntime详解分析(上)

文章内容 从上章文章都知道,asp.net是运行在HttpRuntime里的,但是从CLR如何进入HttpRuntime的,可能大家都不太清晰.本章节就是通过深入分析.Net4的源码来展示其中的重要步骤.请先看下图: 首先,CLR在初始化加载的时候,会加载一个非常重要的类AppManagerAppDomainFactory,这个类是做什么用的呢?首先这个类继承了IAppManagerAppDomainFactory接口,而这个接口是是有个可供COM调用的Create方法,代码如下: [ComIm