vertial-align细节小记

示例图

Paste_Image.png

关键点

  • baseline简单来说就是图中小写字母i、n、x(下文中称之为单行小写字母)等的下边界
  • 倘若一行中文字有大有小,此时baseline的确立是由一个行盒中距离底部最高的单行小写字母的下边界确立的
  • 一个行内块元素或是多行的行内元素,其作为一个整体,baseline是由最后一行的单行小写字母下边界决定的
  • 在baseline确定后middle的确定是在baseline的基础上加上父盒子字体大小下小写字母x高度的一半,官方说明中指出middle是在baseline的基础上加上1/2的小写字母x的高度,但是这个小写字母x的大小具体是以什么为基准的呢,经过测试,是以父盒子的字体大小为基准的

实例代码

  • html:
<div class="box">
    ![](./collection_active.png)
    <span class="big_text">Xx</span>
    <span class="small_text">Xx</span>
    <span class="inline_bolck"><p>Xx</p><p>ixp</p></span>
</div>
  • css:
.box {
    background: red;
    font-size: 12px;
}
.big_text {
    font-size: 20px;
}
.inline_bolck {
    display: inline-block;
}
.small_text {
    font-size: 10px;
}
span {
    background: purple;
}
img {
    background: yellow;
}
  • 效果:


    Paste_Image.png
  • 作为对比我们看下只有img的情况:

  • html:

<div class="box">
    ![](./collection_active.png)
</div>
  • css:
.box {
    background: red;
    font-size: 12px;
}
img {
    background: yellow;
}
  • 效果:


    Paste_Image.png

.box盒子内没有文本,但是图片距离下边距有一点间距,原因就是没有显示地为.box盒子设置字体大小,其默认情况下继承了父盒子即body的默认字体大小14px,然后再根据14px的大小的单行小写字母下边界确立了baseline,最后因为img默认是inline-block模型,默认对齐方式是vertial-align:baseline,所以得到了上图的显示效果。
这也是我们在消除图片下边间隙是通过设置父盒子的font-size:0来实现的原因。

由于对比情况较多,这里不一一列举代码以及效果,具体可以通过调整示例一的代码得到不同的情况,主要对比场景有:

<div class="box">
    ![](./collection_active.png)
    <span class="small_text">Xx</span>
</div>

将box盒子字体设置成20px,再将span字体设置成10px,不断增大span字体大小但不超过父盒子字体,会发现img距离父盒子的下边距不会发生改变,证明此时baseline是通过较大的字体20px来决定的(因为20px大的单行小写字母距离底部比10px大的单行小写字母距离底部要高)

middle的确定-实验事例:

<div class="box">
        <span>x</span>![](./collection_active.png)<span class="inline_bolck"><p>Xx</p><p>xixp</p></span><span class="big_text">Xx</span><span class="small_text">Xx</span>
</div>
.box {
    background: lightblue;
    font-size: 16px;
}
.big_text {
    font-size: 20px;
}
.inline_bolck {
    display: inline-block;
    font-size: 16px;
}
.small_text {
    font-size: 10px;
}
span {
    background: purple;
}
img {
    background: orange;
        vertical-align: middle;
}
p {
    margin: 0;
}
  • 效果:
Paste_Image.png

其中最左边的x的字体大小时通过父盒子box设置的,而右边紫色文本块的字体大小都是有直接设置的,试验中通过修改父盒子box的字体大小,会发现vertial-align:middle的心形块的中线始终和最左边x的中点在同一水平线上,而修改右边文本块的字体大小,并不影响这一对齐,由此可见,行框的middle线是在baseline的基础上加上1/2行框字体大小下小写字母x的高度,而与行框内其他子元素的字体大小无关

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,682评论 1 92
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 8,883评论 0 6
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 10,114评论 0 26
  • 阅读目录移动开发基本知识点 calc基本用法box-sizing的理解及使用理解display:box的布局理解f...
    张宪宇阅读 5,468评论 0 1
  • 如今这个看脸的时代,像小K这种身材火辣,从童颜时期就C罩的姑娘,也是一个不可预测的潜力骨。 大学刚毕业,小K就找到...
    肖小含阅读 4,781评论 0 1