进一步理解:inline-block,vertical-align,line-height

看似三个最常见的概念背后却隐藏了很深的很深“水”
那有多深呢,先来看下面的代码

引出问题

<style>
    .inline-block {
      display: inline-block;
    }
    .border {
      border: 1px solid #000000;
    }
    .span {
      width: 100px;
      height: 100px;
    }
    .bak {
      background: #33CCFF;
    } 
    .o-hidden {
      overflow: hidden;
    }
</style>
<div class="border">
   <span class="inline-block border"></span>
</div>
<div class="border">
   <span class="inline-block border span"></span>
</div>
<div class="border">
    <span class="bak inline-block">x</span>
    <span class="inline-block border span"></span>
</div> 
<div>
    x
    <span class="inline-block border span">x</span>
    <span class="inline-block border span"></span>
    <span class="inline-block border span o-hidden">xjq</span>
</div> 

好,同学们把这四段代码放到编辑器里面然后打开浏览器,如果对于你眼前的画面没有感到疑惑,那么其实你就无需向下看了

On a block container element whose content is composed of inline-level elements, ‘line-height’ specifies the minimal height of line boxes within the element. The minimum height consists of a minimum height above the baseline and a minimum depth below it, exactly as if each line box starts with a zero-width inline box with the element’s font and line height properties. We call that imaginary box a “strut.” (The name is inspired by TeX.).

翻译成国语:

在一个由行内元素组成的块级元素中,line-height指定了这个元素中的所有line box的最小高度。这个最小高度包括在baseline上面的最小高度和baseline下面的最小深度,就好像每个line box是由一个0宽度的,有着元素的font和line-height属性的行内框开始的,我们称这个虚拟的盒子为strut

关于baseline和line box的概念请参考张鑫旭大大的文章:
http://www.zhangxinxu.com/wor...

看着很乱是吧,上图来看:

分析原因

图片描述

图片描述

这是前两段代码的示意图,对比两张图发现span没有宽高的情况下,baseline上下分别有隐形高度;设置宽高之后,下面的strut仍然存在,再来看第三段代码的示意图

图片描述

图中蓝色区域为行内框的高度,红线即字母x的baseline,strut的高度正好是红线到底边框的高度,也就是说默认垂直对齐方式是baseline;扫了一眼MDN关于vertical-align的文档,默认值果然是baseline,印证了这一说法。

看最后一段代码示意图:
图片描述

wtf,这又是几个意思??baseline怎么又和底边框接上了??

The baseline of an ‘inline-block’ is the baseline of its last line box in the normal flow, unless it has either no in-flow line boxes or if its ‘overflow’ property has a computed value other than ‘visible’, in which case the baseline is the bottom margin edge.

再来翻译成国语:

对于一个 inline-block 元素,如果它内部没有内联元素,或者它的overflow属性不是visible,那么它的baseline就是元素margin的底端。否则,就是它内部最后一个元素的基线。

好了,图中三个框可以很好地理解这段话:

最前面的x是用来确定这个代码中最外层的div的基线。左起第一个矩形内部有文字,属于内联元素,那么第一个inline-block的基线为内部x的基线,第二个inline-block的内部无内联元素,那么它的基线就是margin的底端,第三个inline-block内部有内联元素,但是他的overflow属性为hidden,不是visible,所以它的基线还是margin的底端。

解决方案

  1. font-size: 0 或者 line-height: 0

  2. vertical-align !== baseline

方法1和方法2是两个不同的实现思路,方法1是让strut那个东西消失;方法2说起来就有点多了,简单理解就是inline-block垂直方向设置非baseline,从而让strut没有顶到底部,也就不会有空白出现了

感觉自己写的很乱,有耐心看完的同学真是谢谢你们了~~

还是张鑫旭大大写得好写的全
http://www.zhangxinxu.com/wor...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值