常用布局之IFC布局

前面两篇分别介绍了BFC以及FFC布局,因为BFC和FFC布局经常用到,而且东西比较多,所以每一个都分别写了一篇文章并且详细的介绍了他们的功能。这里就介绍一些其他布局方式IFC还有GFC布局以及一些布局的总结。

bfc传送门:常用布局之BFC布局_问白的博客-CSDN博客

ffc传送门:常用布局之FFC布局_问白的博客-CSDN博客

IFC(Inline-Formatting-Contexts)即内联格式化上下文布局。一般都是行内元素比如:input a img span 以及display 属性值为inline-block的元素。

而行内元素有哪些特点呢。?如下列举:

  1. 水平方向根据direction依次布局。
  2. 不会在元素前后换行。
  3. 受white-space属性的影响。
  4. margin/padding 在竖直方向无效,水平方向有效的。
  5. white/height 对非替换行内元素无效,宽度由元素内容决定。(替换元素在下面解释)
  6. 非替换行内元素的行框高由line-height决定而替换行内元素的行框高则是由height,padding,border,margin决定
  7. 浮动或者绝对定位会转化为block
  8. vertical-align属性生效

替换元素我个人理解是他自己元素本身没有实际的东西,最终显示出来的东西需要浏览器根据自身的某一个属性去判断。

比如<img>属性,最终显示的东西由src这个属性值来决定的。再如input元素,最终展现出的东西事由type属性值来决定的。

<textarea>,<select><object>等这些都是替换元素。

IFC的布局规则如下:

  1. 框会从包含快的顶部开始,然后一个接一个的排列。
  2. 在放置这些框的时候,他们在水平方向上的外边距,边框和内边距所占的空间都会被考虑在内(这样就得到了一个一个的)。然而在垂直方向上,这些框可能会以不同的方式来对齐,比如他们可以顶部对齐,或者底部对齐也有可能按照文本的基线对齐。而把这一行上的框都包含进去的一个大框我们称之为改行的行框。水平的padding,border,margin有效,竖直方向则无效。不能指定框高。
  3. 行宽的宽度由包含块和存在的浮动决定的。行框的高度至少会高到足以包含他内部的所有框。
  4. 当一行上的行级总宽度(某一个小框的宽度或者若干个小框的总宽度)小于行宽的时候,他们在行宽内的水平方向上的排布由text-align决定。
  5. 当一个行内框的宽度超过了该行的行宽的时候,就会被分成几个框。(ex.文字换行的时候 字都不在同一行了,那换行的时候自然就会多一份,自然也就多了一份行宽)但是如果设置这个框就不能被分割的话(比如,文字强制不给换行white-space设置为nowrap)那么这时候该行内框就会溢出该行的行宽。
  6. 一般情况下行宽的左边紧贴在他的包含块的左边,同样他的右边也是紧贴在其包含块的右边。但是也不一定,比如出现浮动的话,浮动元素可能会插在包含块和行框之间。所以一般在同一个IFC中行框通常有相同的宽度(包含快的宽度)但是某一行的行宽的宽度也可能受浮动元素影响,减少了水平可用的宽度了。在同一个IFC中,行框的高度通常是变化的,不一定的,比如某一行的某个框是个很高的图片,而改行框中其他框只是文字。
  7. 计算行框内各个框的高度,对于非替换元素就是起line-height,而对于替换元素就是边界框的高度了。 行框的高是最顶端框的顶边到最底端框的底边的距离。

包含块的概念:

简单说就是定位参考框或者定位坐标参考系,元素一旦定义了定位显示(相对、绝对、固定)都具有包含块性质,它所包含的定位元素都将以该包含块为坐标系进行定位和调整。定位参考框或者定位坐标参考系,元素一旦定义了定位显示(相对、绝对、固定)都具有包含块性质,它所包含的定位元素都将以该包含块为坐标系进行定位和调整。
是视觉格式化模型的一个重要概念,它与框模型类似,也可以理解为一个矩形,而这个矩形的作用是为它里面包含的元素提供一个参考,元素的尺寸和位置的计算往往是由该元素所在的包含块决定的。

注意上面提到的几个字眼:框,行框,包含块。

 .container{
            width: 1200px;
            background: #a6d5ec;
            height: 170px;
            margin-bottom: 20px;
        }
        .item{
            margin: 10px;
            padding: 10px;
            width: 420px;
            height: 50px;
            border: 1px solid red;
        }
<div class="container">
   <span class="item">这是一个测试的span元素(非替换行内元素) 设置宽高无效 margin/padding 竖直方向无效</span>
    <input type="text" class="item" value="我是替换的行内元素 input,我设置的宽高 magin/pdding 竖直方向都有效哦">
</div>
 


IFC布局其实在我们平时业务开发中经常遇到用到,不过可能很多人没有意识到自己所用的就是IFC布局。

还有另一个布局是GFC(GridLayout Formatting Contexts)布局,即网格布局格式化上下文,当为一个元素设置display值为grid的时候,此元素将会获得一个独立的渲染区域,我们可以通过在网格容器(grid container)上定义网格定义行(grid definition rows)和网格定义列(grid definition columns)属性各在网格项目(grid item)上定义网格行(grid row)和网格列(grid columns)为每一个网格项目(grid item)定义位置和空间。 

那么GFC有什么用呢,和table又有什么区别呢?首先同样是一个二维的表格,但GridLayout会有更加丰富的属性来控制行列,控制对齐以及更为精细的渲染语义和控制。这个布局我感觉不怎么经常用到,所以就提出来,大家知道有这个东西就好了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

问白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值