CSS——可视化格式模型

CSS的可视化格式模型

  • CSS中规定每一个元素都有自己的盒子模型(相当一规定了这个元素如何显示);
  • 然后可视化格式模型则是把这些盒子模型按照规则摆放到页面上,也就是如何布局;
  • 换句话说,盒子模型规定了怎么在页面上摆放盒子,盒子的相互作用等等;
  • CSS的可视化格式模型就是规定了浏览器在页面中如何处理文档树

1、关键字:

  • 包含块(Containing Block)、
  • 控制框(Controlling Box)、
  • BFC(Block Formatting Context)、
  • IFC(Inline Formatting Context)、
  • 定位体系、
  • 浮动等

2、CSS三种定位机制:普通流、浮动流、绝对定位

3、包含块

  • 一个元素的box的定位和尺寸,会与某一矩形框有关,这个框就称之为包含块。
  • 元素h会为它的子孙元素创建包含块,但是,并不是说元素的包含块就是它的父元素,元素的包含块与它的祖先元素的样式有关:
  • 譬如:
    • 根元素是最顶端的元素,他没有父节点,它的包含块就是初始化包含块;
    • static和relative的包含块由他最近的块级、单元格或者行内块祖先元素的内容框(content)创建;
    • fixed的包含块就是当前可视窗口;
    • absolute的包含块由他最近的position属性值不为static的祖先元素创建:
      • 如果其祖先元素是行内元素,则包含块取决于其祖先元素的direction特性;
      • 如果祖先元素不是行内元素,那么包含块的区域应该是祖先元素的内边距边界。

4、控制框(Controlling Box)

块级元素和块框以及行内元素和行框相关的概念。

  1. 块框

    • 块级元素会生成一个块框(Block Box),块框会占据一整行,用来包含子box和生成的内容;
    • 块框同时也是一个块包含框(Containing Box),里面要么只包含块框,要么只包含行内框(不能混杂);
    • 如果块框内部有块级元素也有行内元素,那么行内元素会被匿名块框包围
    • 匿名块框的生成:

    ```

    <div>
    some inline text
    <p>more text</p>
    </div>
    ```

    • div生成了一个块框,包含了另一个块框p以及文本内容some inline text,此时文本内容会被强制加到一个匿名的块框里面,被div生成的块框包含;
    • 换句话说:如果一个块框在其中包含另一个块框,那么我们强迫它只能包含块框,因此其他文本内容生成出来的都是匿名块框(而不是匿名行内框)
  2. 行内框
    • 一个行内元素生成一个行内框;
    • 行内元素能排在一行,允许左右有其他元素。
    • 匿名行内框的生成:

    ```

    <div>
    some
    <em>more text</em>
    text
    </div>
    ```

    • div元素生成一个块框,其中有几个行内框(如em)以及文本some和text,此时会专门为这些文本生成匿名行内框;
  3. display属性的影响
    • display的几个属性也可以影响不同框的生成:

      • block,元素生成一个块框;
      • inline,元素产生一个或多个的行内框;
      • inline-block,元素产生一个行内级块框,行内块框的内部会被当做块框来格式化,而此元素本身会被当作行内级框来格式化(这也是为什么会产生BFC);
      • none,不生成框,不再格式化结构中,而另一个visibility:hidden则会产生一个不可见的框
  4. 总结:
    • 如果一个框里,有一个块级元素,那么这个框里的内容都会被当作块框来进行格式化,因为只要出现了块级元素,就会将里面的内容分成几块,每一块独占一行(出现行内可以用匿名块框解决);
    • 如果一个框里,没有任何块级元素,那么这个框里的内容会被当成行内框来格式化,因为里面的内容时按照顺序成行的排列。
  5. FC(Formatting Context)
    • FC即格式化上下文,它定义框内部的元素渲染规则,比较抽象,譬如:

      • FC就像是一个大箱子,里面装有很多元素;
      • 箱子可以隔开里面的元素和外面的元素(所以外部并不会影响FC内部的渲染);
      • 内部的规则可以是:如何定位、宽高计算、margin折叠等等
    • 不同类型的框参与的FC类型不同,譬如块级框对应BFC,行内框对应IFC
    • 注意:并不是说所有的框都会产生FC,而是符合特定的条件才会产生,只有产生了对应的FC后才会应用对应的FC渲染规则
  6. BFC渲染规则
    • 在块格式化上下文中,每一个元素左外边与包含块的左边解除(对于从右到左的格式化,右外边接触右边),即使存在浮动也是如此(所以浮动元素正常会直接贴近它的包含块的左边,与普通元素重合),除非这个元素也创建了一个新的BFC;
    • BFC特点:
      1. 内部box在垂直方向,一个接一个的放置;
      2. box的垂直方向由margin决定,属于同一个BFC的两个box间的margin会重叠;
      3. BFC区域不会与float box重叠(可用于排版)
      4. BFC就是页面上的一个隔离的独立容器,容器里的子元素不会影响到外面的元素,反之也是如此;
      5. 计算BFC的高度时,浮动元素也参与计算(不会浮动塌陷如overflow:hidden清除浮动就是这个原理);
    • 如何触发BFC
      1. 根元素;
      2. float属性不为none;
      3. position为absolute或fixed;
      4. display为inline-block、flex、inline-flex、table、table-cell、table-caption
      5. overflow不为visible
      6. display:table,本身不会产生BFC,但是他会产生匿名框(包含display:table-cell的框),而这个匿名框产生BFC。
  7. IFC规则
    • 在行内格式化上下文中,框一个接一个地水平排列,起点是包含块的顶部。水平方向上的margin,border和padding在框之间得到保留,框在垂直方向上可以以不同的方式对齐;
    • 它们的顶部或底部对齐,或根据其中文字的基线对齐
    • 行框:
      • 包含那些框的长方形区域,会形成一行,叫做行框。行框的宽度有它的包含块和其中的浮动元素决定,高度的确定由行高度计算规则决定;
    • 行框的规则:
      • 如果几个行内框在水平方向上无法放入一个行框内,它们可以分配在两个或多个垂直堆叠的行框中(即行内框的分割)
      • 行框在堆叠是没有垂直方向上的分割且永远不重叠;
      • 行框的高度总是足够容纳所包含的所有框,不过他可能高于他包含的最高的框(例如,框对齐会引起基线对齐)
      • 行框的左边接触到其包含块的左边,右边接触到其包含块的右边。
  • 总结:

    ```

    1. 行内元素总是会应用IFC渲染规则;
    2. 行内元素会应用IFC规则渲染,譬如text-align可以用来居中等;
    3. 块框内部对于文本这类的匿名元素,会产生匿名行框包围,而行框内部就应用IFC渲染规则
    4. 行内框内部,对于那些行内元素,一样应用IFC渲染规则;
    5. 另外,inline-block,会在元素外层产生IFC(所以这个元素可以通过text-align水平居中),当然,它的内部则按照BFC规则渲染

    ```

原文地址:https://www.cnblogs.com/lalalagq/p/9911186.html

时间: 2024-10-07 18:01:45

CSS——可视化格式模型的相关文章

CSS可视化格式模型(CSS Mastery随笔)

CSS渲染页面的时候,把每个文档元素看作是盒子. CSS盒子模型 margin,padding,border,内容. margin会出现margin折叠.上下元素的margin折叠.左右的不折叠.包含的元素之间marign也会折叠.margin折叠的好处是文档排版齐整. 每个元素都会有一个框.这个框分两种类型.块级元素的块框.行内元素的行内框. 行框:还有行框的概念,行框的高度由中间最高的行内框决定.设置行内框的高度.padding.margin并不影响行框的高度.行框的高度line-heigh

读《精通css》--第三章可视化格式模型

一. 盒模型: 1. IE 和 盒模型: 非标准盒模型 2. 外边距叠加:什么情况下外边距会叠加? 1)两个垂直的块元素 2)两个包含关系的块元素并且之间没有padding和border隔开 3)外边距与自身发生叠加,空元素,没有padding和border 4)空元素的外边距碰到另一个空元素的外边距. 解决办法:行内元素.浮动元素.绝对定位元素的外边距不会叠加.如果是包含关系的话,加上padding或者border. 二. 3种可视化格式模型: 1. 普通流:块级元素和行内元素. 1)块级框从

可视化格式模型(visual formatting model)

对于可视化格式模型这个概念,官方的原话是这样的:How use agents process the document tree for visual media.翻译过来就是用户端在媒介中如何处理文档树.用户端这个对于我们来说通常指的就是浏览器.媒介呢,就是展示页面的介质,比如显示器.文档树呢,就是源文档中元素树的编码.树中,每一个元素恰好有一个父元素,当然除了根元素. 一.框的布局影响因素 可视化格式模型中,每一个文档树中得元素都会根据box module(盒模型)来产生零个或多个控制框.这

可视化格式模型(visual formatting model)系列

俗话说得好,万丈高楼平地起.在前端各种框架和工具层出不穷的今天,研究css标准.js的基础特性这些并不是浪费时间,相反打好了基础,才能更好的去拥抱变化. 这个东西呢,是准备当做一个系列来写,主要参考官方的标准和前辈们的一些归纳总结,不是全盘翻译,只是一个知识的梳理,查漏补缺.这个系列主要还是理论概念,我会尽量通过demo和自己平时遇到的一些具体问题来结合说明.这个系列呢,初步的考虑是以下几篇组成: 1.可视化格式模型(visual formatting model): 2.控制包含框的生成(Co

精通css 高级web标准解决方案——可视化格式模型

1-盒模型的两种标准: IE :width 和 height属性 是包括padding和border在内的. w3c:width 和 height 属性,就是单纯的内容的宽高,padding 是内容之外的附加值. IE标准盒模型 w3c标准盒模型 我发现我以前总是记得有点混乱.现在绝对不会忘记了.box-sizing属性可以定义要使用哪种盒模型 解决这个问题分方法1:不要给元素添加具有指定宽度的内边距,尝试将内边距或者外边距添加到元素的父元素或者子元素. 方法2:待补充?? 2-对box-siz

精通css 高级web标准解决方案——可视化格式模型-定位模型

CSS 中有三种定位机制:普通流.浮动.绝对定位.(默认为普通流) 改变文档流:display: inline-block; (支持到ie8及以上) 1-匿名块框: <div> 你好! <p>廖阿丽!</p> </div> 这一块中的“你好”,属于匿名块框,因为它没有与专门定义的元素想关联. 2-相对定位 元素相对定位就是相对于它本来的位置来定位的. <!DOCTYPE html> <html> <head> <ti

三种可视化格式模型:普通文档流、相对定位与绝对定位、浮动

在CSS中是有三种定位机制的:普通文档流.浮动和绝对定位.在未指定其它两种定位机制的情况下,所有框都是在普通文档流中定位的. 普通文档流: 普通文档流,顾名思义,就是根据块级元素的标签在HTML里的顺序,像水流一样,从上至下.当然对于行内元素而言,还是在一行中水平排列的. 这里插入一个积累的小知识点. 行内元素可 以在水平(内间距.边框.外边距)方向上修改它们水平尺寸,但是在垂直方向上对行内元素的高度是毫无影响的,还有就是直接定义行内元素的 width/height也是毫无影响.对与行内元素来说

第3章 可视化格式模型

一·盒模型 1 IE 和盒模型 IE早期版本包括IE6,在混杂模式下使用自己的非标准盒模型,其width属性不是内容的宽度,而是内容,内边距,和边框宽度的总和.因此,IE专有的盒模型使元素预期小.目前最好的解决方法是,不要给元素添加具有指定宽度的内边距,而是尝试将内边距或外边距添加到元素的父元素或子元素.其他方法见后. 2 外边距叠加 两个或多个垂直外边距相遇,将叠加形成一个外边框,高度等于两者中的较大者. 可以利用外边距使段落之间的空间保持一致. 只有在普通文档流中才会叠加,行内框,浮动,绝对

CSS 可视化设计模型(1)块框(Block boxex)和 行内框(Inline boxes)

包含块(Cotaining Blocks) 在CSS2.1中,很多 box 的定位和大小都根据一个名为包含块 Containing Block 的矩形盒的边缘来计算.一般地,生成的 box 会充当其后代 box 的包含块:我们称盒为其后代"创建"了包含块.说"box的包含块"即是说"box所处的包含块",而不是box所产生的包含块. 每个box会被赋予一个相对于其包含块的位置,但它不会被局限在其包含块内:它有可能溢出. <div> &