BFC_IFC

本文深入解析了图片在网页布局中出现底部间隙的原因,涉及到strut、line-height和vertical-align属性的影响,并提供了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在图片中可以看到 img 与外层的 div 存在一个间隙这是因为浏览器认为每一个 line box 的起始位置都存在一个宽度为 0 的,没有任何字符的 匿名 inline box(下文会提到的 strut),也就是说这个 匿名 inline box 的高度会影响整个 line box 高度的计算。

上文所说的 strut 其实就相当于一个不可见的字母 x,父元素的基线就是 strut 的基线所在的位置。而 strut 本身是具有 line-height 的,所以就导致图片底部多了一段间隙。

总结一下存在间隙原因:

strut 存在 line-height
vertical-align 默认值为 baseline

对应的解决方案:

修改 strut 的 line-height,因为 strut 的 line-height 不是能够直接设置的,所以需要设置父元素的 line-height,然后让 strut 继承,或者修改 font-size
将 vertical-align 设置为其他值

<div>我是一个匿名 inline box <em>我是一个 inline box</em> 我是另一个匿名 inline box</div>

IFC 中有两种盒子:inline-level box 和 line box。多个 inline-level box 组成了一个 line box。
line box 高度计算

浏览器会计算 line box 中每一个 inline-level box 的高度,对于不同的 inline-level box 计算方式有所不同。如果是一个替换元素,高度由其 margin box 决定,如果是一个非替换元素,高度由它的 line-height 决定。

line box 中所有 inline-level box 的最高点以及最低点决定了它的高度(该计算包括了 strut 的高度,后文 line-height 中提到 strut)。

img 所在的 line box 最高点是图片的顶部,最低点是 strut 的底部。img作为一个 inline-level box,它的高度就是图片的高度,而 strut 其实就是个普通的文字,再加上 vertical-align: baseline 的作用,最终撑开了整个 line box。多个 line box 堆叠起来就撑开了父元素的高度,在这里只有一个 line box,撑开了 div>的高度。

非替换元素的的 margin,padding 以及 border 并不会影响 line box 高度的计算。当一个 inline-level box 的 line-height 小于 content area 的时候,line box 的高度就会小于 content area(line box 的高度与 content area 是没有关系的),此时元素的 background 以及 padding 等就会溢出到 line box 之外。

div {
    background: #eee;
    border: 1px solid #000;
    box-sizing: border-box;
    font-size: 50px;
    line-height: 10px;
}
span {
    background: red;
    margin: 10px;
    padding: 10px;
}
<div><span>xxx</span></div>

我的简单理解是,对于由行内元素组成的块级元素而言,line-height 决定了 line box 的最小高度,浏览器会假定每一个 line box 以一个宽度为 0 的 inline box (strut)开始,而这个 strut 从父元素继承到 font 以及 line-height。(issue 开头的例子就是 strut 造成的)

baseline:元素基线与父元素基线对齐,如果元素没有基线,比如 ,则使用 margin 底边与父元素基线对齐。

middlee:元素的垂直中点位置与父元素的基线加上一半 x-height 的位置对齐。

借鉴于https://www.jianshu.com/p/1d9bd8959711

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值