vertical-align 和 line-height关系的一点感想

本篇主要理性的认识一下感性的line-height 与vertical-align之间的纠缠关系 你可以理解为滚床单 如果这样理解 那床要大 而且还经常在床边的地毯上翻滚.. line-height 很任性

而vertical-align却很慈爱 [早离早好啊你]

<p>内的line-height值为默认

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        p{
            background-color: pink;
        }
        span{ width: 100px; height: 100px; border: 1px solid #000; display: inline-block; }
        /*span:nth-child(1){ vertical-align: baseline;  }*/   ==========>>> 第一步要加入的vertical-align的值(bottom)
        /*span:nth-child(2){ vertical-align: baseline; }*/    ==========>>> 第二步要加入的vertical-align的值(top)
        /*strong{ vertical-align: baseline; }*/               ==========>>> 第三步要加入的vertical-align的值(top)
        /*em{ vertical-align: baseline;  }*/                  ==========>>> 第四步要加入的vertical-align的值(bottom)

    </style>
</head>
<body>
    <p>
        <span></span><span>xx</span><strong>xxx</strong><em>XXX</em>eee<i>123</i>  //eee为行内隐匿字符节点的显示表示 i元素内的数字始终不谈加任何css 以示对比
    </p>
    <script>
        console.log(document.querySelector(‘p‘)[‘clientHeight‘])  =========>> 通过查看clientHeight来尝试性一探究竟
    </script>
</body>
</html>

现在的网页表现为:(这里只考虑chrome > 50)

   这个时候因为基线对齐而inline-block的span盒子会撑开行高 所以line-height达到了186 PS:看到没有 行高现在已经开始在‘作‘了 因为是初夜 所以还比较低调

   多说下为什么会这么表现: 盒子本身的baseline为下边缘 但是如果盒子内有文字 那盒子的baseline会变为内部文字的baseline 而文字的baseline为字母‘x‘的下边缘 所以带

有文字的盒子的下边缘即为盒子内文字‘x‘的下边缘 而因为此时所有元素是baseline对齐 所以呈现出比翼双飞的局面..

第一步: 给第一个span添加vertical-align 为bottom 局部代码为:

span:nth-child(1){ vertical-align: bottom;  }

现在的页面表现为:

  此时第一个span由于vertical-align为bottom 故与他的盒子下边缘与第二个span盒子的下边缘对齐了

!!但是 从第一副画面可以看到 本来第二个span上面是有大大的空间的哦~ 那第一个span掉下来对齐 为什么上面没有了呢??

个人理解 因为HTML是默认从左上开始渲染的 那现在底部对齐 上面没东西了 HTML就会自作主张 把上部的空间砍掉了! 以至于p元素的背景色(pink)变矮了 那砍掉了什么呢? 这时

候可以看到控制台显示的line-height高度 变成了102了哦 原来砍掉的是84的line-height高度 从旁观者来看 md 行高说都不说就自己搞掉了自己一小半 wtf..

ok 少了也就罢了 那基线是如何变化的呢 不用问 直接从原来的中间变成了现在的上方 也就是数字123的下边缘位置 .. 我擦 连基线位置都改变了 line-height 你就继续‘作‘吧

第二步:
给第二个span添加vertical-align 为top 局部代码为:

span:nth-child(2){ vertical-align: top;  }

页面表现为:..

!有人说 第二个span搞毛啊 本来经过第一步 第二个span的上边缘不是已经和第一个span的上边缘对齐了嘛 那还top个毛啊

不过 她们还真真的玩出了花样 (比69式更离奇)

从图上可以看出 这次他们确实是底部对齐了(原来也是好嘛) 问题是 他们竟又把上面的行高给撑了起来!!(..) 而又把下面的行高给砍了去 这次加上的行高与第一步砍掉的还一模一样

最直观的表示是 eee123又掉下来了.. 也就是说 表征为line-height(行高)的变化使得基线再一次被玩[有种被扇耳光的感觉].. OK 继续

第三步:
给第一个xxx添加vertical-align 为top 局部代码为:

strong{ vertical-align: top; }

页面表现为:

  到了这一步 事情就简单多了 从图中可知 现在的基线接近于p元素的底边缘 而整个的大盒子顶端在span的顶部 所以在<strong>xxx</strong>设置vertical-align:top后 xxx

的顶部对齐了大盒子的顶部

第四步:
给第一个XXX添加vertical-align 为bottom 局部代码为:

em{ vertical-align: bottom;  }

页面表现为:

所有元素纹丝未动..

  [前方高能]

更改em的显示水平

em{ vertical-align: middle;  }

页面表现为:

  注意 middle对齐竟然比bottom更往下了! 而baseline与bottom页面表现一致...

这是由于 虽然页面表现 下部的line-height没有了 但在vertical-align的心里 下部的line-height还是一直存在的 用张鑫旭的话说‘心心念念着他的小伙伴 55555‘...

这里上一张图 大概就能明白意思了

  上面的图 是页面原始状态下 只调整em元素的vertical-align值为middle的结果 图中清晰显示了middle对齐后em元素的位置

既然middle对齐的是整个大盒子的行高中心位置往下偏移1/2字体的高度 那就说明 在上上张图里 下部去掉的line-height在vertical-align的对齐里还是考虑的

为什么非要考虑呢 我想了想 行高~=content area+上下间距 而间距这东西应该每个元素都有 如果这里不管下面的间距了(下部的line-height) 那别的地方是不是也可以不管呢---

-当然不行 因为虽然这样看起来会难以理解一些 但是如果没有间距 那整个页面会更加的难以布局和理解.这就做到了在HTML布局中即考虑到整体的可操作性 又保证整体页面的紧凑

不至于到处是line-height折腾出的空白.

在打字的同时 隐隐约约可以感到为什么各种标准制定的举步维艰.向css标准制定组织致敬.

********
以上就是这几天对vertical-align line-height 和基线的一些学习心得 纯属个人理解 不对的地方请指正 谢谢! 特别感谢慕课网张鑫旭同学的视频 收益良多 谢谢[本人所写 但最初上传于慕课手记]

********

时间: 2024-10-03 21:54:33

vertical-align 和 line-height关系的一点感想的相关文章

line height 与 vertical align

一.line height 其中代表inline box(包含上下间距,若height==line-height,则行间距=line-height - font-size/2),big代表content area. 注: 若line-height < content area ,则line box要取line-height的值,这也是为什么会重叠的原因. line-height属性取值: 1. % 若自身没有设置line-height,则line-height = 父元素的font-size *

Delphi研究,对全局变量函数与OOP编程关系的一点体会 good

感叹:设计VCL的人真是神人啊,感觉比Pascal编译器的设计人还要牛很多,把整个Windows架构理了一遍,封装的如此之好,复用的如此之好(以至于Delphi的控件满天飞,使用还特别容易),简直惊为天人.难怪charles petzold当初觉得不可能用PASCAL语言做Windows编程(李维说的),以前我对这句话的理解是,Pascal语言本身达不到windows编程的要求,可能是因为他这方面的功力达不到(觉得可能是因为petzold对比anders的编译器功力相差太远,不知道编译器的许多细

读《少有人走过的路》的一点感想

这本书是美国心理医生斯科特*派克写的,不属于励志类书籍,但对人的启迪感觉比励志类的要好.心理疾病在我们国家属于极端被鄙视的一种病之一,骂人"神经病"也属于比较恶毒的一类.其实心理疾病在我们国家很普遍,因为我们的文化和社会环境更为容易滋生这类疾病,而且由于讳病忌医的缘故,造成了很多的人间悲剧.最为常见的一种心理疾病就是抑郁症.而得抑郁自杀的其实每年都有很多,其实这里面很多人,如果能够得到必要的治疗,是完全可以避免悲剧发生的. 作者的观点是人生就是苦难重重的,既然人生是苦难重重的,那么就应

由$(this).attr(&#39;id&#39;)引出的一点感想

这几个月一直在学习JS,对HTML不够重视,有些很基础的东西还没完全掌握,于是暴露了问题. 在看DOM元素属性时突然看到了id属性,不由得想起之前我竟然是这么来获取id的 $('#btn').on('click', function() { var id = $(this).attr('id'); //... }); this指向被点击的dom元素,id的话这样取就好了 $('#btn').on('click', function() { var id = this.id; //... });

学习javascript 的一点感想

原文:学习javascript 的一点感想 //动态性是指,在一个Javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可,如下例:var obj=new object();obj.name="myname";obj.say=function(){    alert("hello");}obj.say();//Javascript是弱类型的,它的数据类型无需在声明时指定,解释器会根据上下文对变量进行实例化,比如:var

关于 ACM 的一点感想

关于 ACM 的一点感想 从昨天到现在,WA好几次,终于把题目AC了,突然很有感想,记录下此刻的感受. 我始终觉得只要给我足够的时间,就没有我A不了的题目.暂时A不了的题目,就先记着,等哪天学习了相关的知识点,一定回头把它搞掉. 我发现这个ACM 很能虐人,面对无数次的WA, 要不停地审题, 甚至审视自己写过的每一行代码,各种情况进行思考,有时候还不得不推翻以前的所有思路,重新写代码,被ACM 虐了上百遍,我觉得搞ACM的,都是自虐狂.我同样也是自虐狂,有时候一道题目明明AC了,但并不满足于此,

关于CPU位数,OS位数以及内存大小关系的一点总结

(这个学期做助教,说来好惭愧啊,虽然我也是考研进来的,但是就在两年前复习的资料居然全部都忘光了.对大二的孩子们提问的问题多半都解决不了!!!越来越觉得自己的学习方法有问题了,总是想着一些知识能够根据自己多看几遍印象就深刻了,或者说每次记忆知识时总是想下次再记在脑海里吧!这样导致很多东西必须看资料才能想起来:啊原来是这样的,我看过啊,我知道的啊!这样的陋习一定要赶紧改正了,每次学习一个新的知识,都要记在脑海里,深刻地理解一下!!!) 1. CPU位数:一个时钟周期内处理器处理的二进制位数. CPU

深入了解css的行高Line Height属性

来源:http://www.cnblogs.com/fengzheng126/archive/2012/05/18/2507632.html 什么是行间距? 古时候我们使用印刷机来出来文字.印刷出来的每个字,都位于独立的一个块中. 行间距,即传说中控制两行文字垂直距离的东东.在CSS中,line-height被用来控制行与行之间垂直距离. 不过,行间距与半行间距,还是取决于CSS中的line-height.那么,如何来使用line-height呢? 默认状态,浏览器使用1.0-1.2 line-

冒个泡,还活着??做了个项目,一点感想。

的确,成家后,很多时间都由不得自己安安静静地花时间去学习了.从3月底到7月底,香港.买车.婚礼,很多事情都在今年一起办了. 8月初的时候接到一个项目,做微信定制开发的,由于是兼职,有持续一周的时间,每天晚上和朋友加班到晚上3.4点,第二天又正常上班.而且之前没做过定制开发(甲方要求用户体验高.很多细节的技术还要即时攻尖),虽然很累,但是最后做出来了,而且上线20多天,经过2000人左右的体验,没出什么大问题,已经感到很高兴了. 虽然还有项目尾款没拿到,但还是用之前的钱,为自己换了一台mac pr