剑客
关注科技互联网

CSS之格式化上下文(formatting context)

CSS之格式化上下文(formatting context)

格式化上下文,是CSS视觉渲染过程的一个概念,它主要影响盒子的布局。普通流中的每一个CSS盒子,都会属于一个格式化上下文,是块格式化上下文(block formatting context)和行内格式化上下文(inline formatting context)中的一种。块级盒子参与块格式化上下文,行内级盒子参与行内格式化上下文。

块格式化上下文

块格式化上下文,即block formatting context,简称BFC,可由如下元素创建:

  • 根元素
  • float浮动定位元素
  • 绝对定位元素
  • display为inline-block或table-cell或tabel-caption的元素
  • overflow值不为visible的元素
  • flex弹性盒子(display为flex或inline-flex)

特性

  • 独立性

    块格式化上下文包含创建它的元素和它的所有不创建新的块格式化上下文的子元素,即块格式化是相互独立的,其只影响上下文内部的元素。

  • 排列

    在块格式化上下文中,盒子按垂直方向,从包含块的顶部开始一个接一个地放置。

  • 崩塌(collapse)

    两个相邻盒子的垂直距离由margin属性值决定。一个块级格式化上下文中的相邻块级盒子之间的垂直margin会发生崩塌(collapse)。

  • 边界

    一个块格式化上下文中,每个盒子的左外边界碰触包含块的左边界(从右到左方向的格式化上下文,则是右边界碰触),即使某盒子是浮动定位,此特性依然成立,除非该盒子创建一个新的格式化上下文,此时该盒子会变窄。

  • 浮动

    浮动定位只影响同一块格式化上下文中的元素布局,清除浮动只能清除同一块格式化上下文中它前面元素的浮动。

行内格式化上下文

行内格式化上下文,即inline formatting contex,简称IFC,和块格式化上下文一样,它是页面进行CSS视觉渲染时的一个概念。通常由display属性计算值是inline或inline-block或inline-table的元素创建。

特性

  • 排列

    在一个行内格式化上下文中,盒子按水平方向,从包含块的顶部开始一个接一个地放置。

  • 间距与边界

    水平margin,边界(bordr),padding,在盒子间依然保留。

  • 垂直对齐方式

    这些盒子垂直方向对齐方式可以有多种:按顶部或底部对齐;按文本基线对齐等。

  • 行盒

    通常我们把占据一行的整个矩形区域,叫做行盒,其包含了许多盒子。

  • 行盒的宽高

    行盒(line box)的宽度由包含块和浮动绝对,高度是由其line-height计算规则决定。

    一个行盒的高度总是足够容纳其包含盒,甚至大于包含盒中最高值,比如按基线对齐的盒子, 可以参见我的另一篇博客:两端对齐布局与text-align:justify

  • vertical-align

    在行盒中,当其包含的某一盒子(命名a)的高度小于其高度时,这个a盒子在行盒内的的垂直方向对齐值由vertical-align属性值决定。

  • 拆分

    当一个行盒不能容纳多个行内级盒子时,它们会被拆分成两个或多个垂直堆积的行盒,比如段落,一个段落是多个行盒的垂直堆积,行盒在垂直方向没有间距也不重叠地堆积。

本篇主要讲了一个CSS视觉渲染过程中的一个概念,它可以帮助我们理解很多CSS渲染出的结果,比如块格式化上下文中margin的崩塌,行内格式化上下文中垂直方向如何居中对齐等等,此篇篇幅不长,是下一篇要讲述的CSS之视觉格式化模型的引导篇。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址