首页 > 其他分享 >CSS2.1规范笔记——9.4 常规流

CSS2.1规范笔记——9.4 常规流

时间:2023-07-22 19:57:56浏览次数:36  
标签:行框 BFC 行内 笔记 right CSS2.1 IFC 9.4 left

常规流

常规流中的盒属于一个FC,可能是BFC或是IFC中的一个。块级盒参与BFC,行内级盒参与IFC。

BFC

BFC的产生条件:

  • float:left | right
  • position:absolute | fixed
  • display:inline-block | table-cell | table-caption(以及匿名的表格元素)
  • overflow: hidden | auto | scroll

BFC的布局规则:

  • 在BFC中,盒从包含块的顶部开始在垂直方向一个接一个地放置;
  • 两个兄弟盒之间的垂直距离由margin属性决定;
  • 同一个BFC中的相邻块级盒之间的垂直外边距会合并。

在一个块格式化上下文中,每个盒的左外边界(margin edege)挨着包含块的左外边界(对于从右向左的格式化,右外边界挨着)。即使存在浮动(这是相对于IFC来说的,因为IFC中如果存在浮动,则行框的宽度会小一些,BFC显然就不会),这也成立。除非该盒建立了一个新的块格式化上下文(这种情况下,该盒自身可能会因为浮动而变窄)。

IFC

IFC布局规则:

  • 在IFC中,盒是从包含块的顶部开始在水平方向一个接一个地放置;
  • 这些盒的水平margin、border、pading都有效;
  • 盒可能会以不同的方式垂直对齐:以它们的底部或者顶部对齐,或者以它们里面的文本的基线对齐。

包含来自同一行的盒的矩形区域叫行框(inline box,或叫行盒)

行框的高度:由line-height和vertical-align属性决定。行框总是足够高的,能够容纳它包含的所有盒。然而,它可能比所包含的最高的盒还要高(例如,如果盒是以基线对齐的)。当盒B的高度小于它所在的行框的高度时,行中B的垂直对齐方式由vertical-align属性决定。当几个行内级盒在水平方向上不能共存于一个行框时,它们会被分到两个或多个垂直堆叠的(vertically-stacked) 行框里。因此,段落就是个行框的垂直栈(vertical stack)。行框没有垂直间隔地堆放(除非在其它地方有特别说明)并且它们不会重叠。同一个IFC中的行框一般高度各不相同(例如,一行可能含有一个搞图片,其他的只含有文本)。

行框的宽度:行框的宽度由包含块和浮动情况决定。一般来说,一个行框的左边界挨着其包含块的左边界,右边界挨着其包含块的右边界,也就是行框的宽度等于包含块的宽度。然而,浮动盒可能会跑到包含块边界与行框边界之间。因此,尽管同一个行内格式化上下文中的行框一般都有相同的宽度(即包含块的宽度),如果可用的水平空间因为浮动而减少了的话,它们的宽度就可能不同。当一行的行内级盒的总宽度小于它们所在的行框的宽度时,它们在行框里的水平分布由text-align属性决定。如果该属性值为justify,用户代理可能还会拉伸行内盒(不包括inline-table和inline-block)里的空格和单词。当行内盒超出行框宽度时,它会被分成几个盒,并且这些盒会跨多行框分布。如果一个行内块无法分割(例如该行内盒只含单一字符,或者特定语言的单词分割规则不允许在该行内盒里分隔,或该行内盒受到了一个值为nowrap或者pre的white-space的影响),那么该行内盒会从行框溢出。当一个行内盒被分割后,外边距,边框和内边距在发生分割的地方(或者在任何分割处,如果有多处的话)没有视觉效果。

同一个行框里的行内盒也可能因为双向文本处理而被分割成几个盒。

需要盛放IFC中的行内级内容时,创建一个行框。该行框不包含文本、保留空白符、外边距、内边距和边框非0的行内元素,以及其他流内内容(例如,图片,行内块或行内表格),并且不以保留换行符结束的(行框)在确定其内部元素的位置时必须被当做0高度行框,处于其他目的时,必须当它不存在。

相对定位

当一个盒根据常规流或者浮动摆放好后,他可能会相对于该位置移动,称之为相对定位。这种法师偏移盒B1的位置不会影响盒B2。

对于相对定位的元素,left和riht水平移动盒,不会改变其大小。因为盒没有被分割或拉伸,所以left的应用值总是满足:left=-right。

left应用值

right应用值

left计算值

right计算值

效果

auto

auto

0

0

盒待在原位置

auto

A

-A

A

盒向左移动A

A

auto

A

-A

盒向右移动A

A

B

位置被过渡约束,left和right其中一个会被忽略:如果direction是ltr,那么left有效,right被忽略;如果direction是rtl,那么right有效,left被忽略。

 

top、bottom和left、right基本类似,但有一点不同:如果都不是auto,则忽略bottom(因为常规流总是自上而下嘛)。

标签:行框,BFC,行内,笔记,right,CSS2.1,IFC,9.4,left
From: https://www.cnblogs.com/hdxg/p/17574105.html

相关文章

  • CSS2.1规范笔记——9.5 浮动
    浮动一个浮动盒会向左或向右移动,直到其外边界挨到包含块边界或者另一个浮动盒的外边界。如果存在行框,浮动盒的上外(边界)会与当前行框的上(边界)对齐。如果没有足够的水平空间来浮动,它会向下移动,直到空间合适或者再没出现过其他浮动。因为浮动盒不在常规流内,在浮动盒之前或者之后创......
  • CSS2.1规范笔记——9.6 绝对定位
    绝对定位绝对定位模型中,盒相对其包含块偏移,它会从常规流中全部移除(不会影响后面的兄弟)。绝对定位的盒会为常规流中的子级和绝对(不包括fixed)定位的后代建立一个新的包含块。然而绝对定位的内容不会沿着任何其他盒排列。它们可能会遮住其他盒的内容(或者被它们自身遮住),取决于重叠盒......
  • CSS2.1规范笔记——9.7 分层展示
    分层展示z-index属性该属性指定了:当前堆叠上限爱问(stackingcontext)中,该盒的堆叠层级(stacklevel);该盒是否应该建立一个堆叠上下文;该属性的取值为:<integer>:是生成盒当前堆叠上下文中的堆叠层级,该盒还会建立一个新的堆叠上下文。auto:生成盒在当前堆叠上下文中的堆叠层级为......
  • CSS2.1规范笔记——9.2 控制盒的生成
    控制盒的生成控制盒就是我们常说的盒。盒的类型对其在视觉格式化模型中的行为有一定影响。display的取值display属性指定了盒的类型:none:此元素不会被显示。block:此元素将显示为块级元素,此元素前后会带有换行符。inline:默认。此元素会被显示为内联元素,元素前后没有换行符。......
  • CSS2.1规范笔记——9.1 视觉格式化模型(视口和包含块)
    视觉格式化模型视觉格式化模型:对于可视化媒体,用户代理怎样处理文档树。在视觉格式化模型中,文档树中的每个元素根据其盒模型生成0或多个盒。这些盒的布局由以下因素控制:盒尺寸与类型定位方案(常规流、浮动与绝对定位)文档树中元素间的关系外部信息(例如视口大小、图片的固有尺寸......
  • CSS2.1规范笔记——8.2 外边距与margin合并
    外边距margin取值<length>:一个固定值<percentage>:百分比根据当前生成盒的包含块的width来计算。注意,margin-top和margin-bottom也是根据其包含块的width来计算的。如果包含块的width取决于该元素,那么产生的布局在CSS2.1是未定义的。auto:具体见“计算width与margin”章节。m......
  • CSS2.1规范笔记 - 8.1 盒尺寸
    中文链接:http://www.ayqy.net/doc/css2-1/cover.html英文链接:https://www.w3.org/TR/2011/REC-CSS2-20110607/本笔记是2020年自学前端时所写,当时写在word文档上,今天重温,就搬到博客园上来。盒尺寸盒模型的组成css盒模型描述了一个为文档树中的元素生成的,根据视觉格式化模型进......
  • MQTT学习笔记
    客户端:mqttxforwindows,并提供基于互联网的mqtt服务,不用再搭建 MQTT的C语言编程:下载paho的包,在github上,有基于Linux的release版本,下载后,将其解压到任意目录,比如:/opt/mqtt目录结构如下: 安装完毕后,进行配置(如果不配置,动态链接库无法找到)设置动态链接库的搜索路径export......
  • java学习笔记
    目录值传递&引用传递WeakHashMap-弱引用MapHashMapResponseEntityMessageFormat.format-代码里直接打印输出如何将java项目的依赖打成一个大的jar包加载证书报错:Couldnotparsecertificate:java.io.IOException:Incompletedatapowermock使用注意jpa的使用注意AOP切面java......
  • pyhon 基础学习笔记(一)List
    1.有两个索引 2索引的切片L=[1,2,3,4,5,6]L[start:stop:step]如L[1,2,2] 3.列表增加元素L.append(9),L.append([2,3])尾部追加L.extend([1,2,3]) 尾部追加L.insert(3,5)位置3插入5L[2:2]=[8,9] 下标为2的位置插入8,9 3.列表删除元素L.remove(4)删除元素4......