字母与基线

image.png

  1. 小写字母x的下边缘线就是基线baseline
  2. 小写字母x的上边缘线就是中线mean line(midline,距离基线到大写字母的上边缘线的1/2距离,即小写x的中间交叉点)
  3. 与x-height有关的CSS属性:vertical-align:middle,基线往上1/2 “x-height”高度
  4. vertical-align:middle不是相对容器中分线对齐的原因:因为内联元素垂直居中是对文字而言,并不是外部块级容器

ex单位

  1. 1ex = x-height
  2. 利用ex来设置inline-block元素高度实现视觉效果的垂直居中内联元素默认是基线对齐的,而基线就是x的底部,而1ex就是一个x的高度。图标高度就是1ex, 同时背景图片居中,那么图标和文字垂直居中,且完全不受字体和字号的影响。

image.png

  1. .icon-arrow {
  2. display: inline-block;
  3. width: 20px;
  4. height: 1ex;
  5. background: url(http://www.zhangxinxu.com/study/201506/arrow.png) no-repeat
  6. center;
  7. }
  8. <div id="divTest2" style="font-size: 24px;"> 垂直居中x
  9. <i class="icon-arrow"></i>
  10. xxAXA
  11. </div>

line-height

  1. line-height撑开了外部元素的高度,font-size决定了文字的大小 ```javascript .line-height { line-height: 0; border: 1px solid; margin-bottom: 20px; } .font-size { font-size: 0; line-height: 16px; border: 1px solid; }
test
test
![image.png](https://cdn.nlark.com/yuque/0/2022/png/248010/1642757946680-cde6b3ca-39b0-4b4b-98a3-41f1b1c6d9a4.png#clientId=ucf488040-2957-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=49&id=ud04d5b2e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=98&originWidth=694&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3562&status=done&style=none&taskId=u30367bd3-702b-4913-8482-60cf6a5da4d&title=&width=347) 2. **对于内联非替换元素,高度由line-height决定,line-height通过改变行距来改变高度** - 行距 = line-height - font-size - 内容区域与em-box,前者可理解为选中了文字的背景色所在区域,由font-family与font-size决定,后者由font-size决定(宋体的内容区域与em-box高度相同) - 在设计师的标注中,如果标注的间距是从文字的上边缘到下边缘,就可以设置line-height为1,否则标注距离和使用的margin边距不一致 - 或者,通过计算margin-top = 设计师标注 - (line-height - font-size) / 2 (去整)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/248010/1642758113617-bfb192eb-de77-43c9-b9df-f487d50966ab.png#clientId=ucf488040-2957-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=226&id=u1c0b2e10&margin=%5Bobject%20Object%5D&name=image.png&originHeight=452&originWidth=1136&originalType=binary&ratio=1&rotation=0&showTitle=false&size=180171&status=done&style=none&taskId=u7dc4af90-8057-48ef-ad2e-7f1affc0fd2&title=&width=568) 3. **对于内联替换元素和内联非替换元素同时出现的情况,高度与line-height有关,它决定了最小高度** ![image.png](https://cdn.nlark.com/yuque/0/2022/png/248010/1642758152799-db5b9450-7e06-4847-b5c2-3e71aee5a956.png#clientId=ucf488040-2957-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=272&id=u1de3652c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=544&originWidth=1098&originalType=binary&ratio=1&rotation=0&showTitle=false&size=72804&status=done&style=none&taskId=u2920c50b-ce95-48d1-b036-feeb03034e6&title=&width=549)javascript
test line-height - 图3

div.one { font-size: 16px; box-sizing: border-box; line-height: 100px; width: 500px; }

  1. 4. **对于块级元素,line-height对其本身没有影响,通过改变内部的内联元素的高度影响块级元素的高度**
  2. <a name="LI0Pw"></a>
  3. ## line-height与垂直居中
  4. 1. 单行的“近似”垂直居中。[https://codepen.io/ChloeFancy/pen/ERqGQK](https://codepen.io/ChloeFancy/pen/ERqGQK)
  5. ```javascript
  6. div {
  7. border: 1px solid;
  8. line-height: 60px;
  9. width: 200px;
  10. }
  11. <div>test</div>

近似的原因是,文字字形的垂直中线与行框盒子的垂直中线位置不一致,通常偏低

  1. 多行文字(块级元素)的“近似”垂直居中。近似的原因是,vertical-align:middle,与font-size以及总是偏低的x位置有关

    line-height属性值

  2. 默认值normal,与font-family有关,字体确定后在不同浏览器下基本相同

  3. 数值/百分比/长度值

image.png

  1. <div class="one">
  2. <h3>title</h3>
  3. <p>content</p>
  4. </div>
  5. <div class="two">
  6. <h3>title</h3>
  7. <p>content</p>
  8. </div>
  9. <div class="three">
  10. <h3>title</h3>
  11. <p>content</p>
  12. </div>
  13. div {
  14. margin: 20px 0;
  15. font-size: 14px;
  16. }
  17. h3,p {
  18. margin: 0;
  19. }
  20. h3 {
  21. font-size: 32px;
  22. }
  23. p {
  24. font-size: 20px;
  25. }
  26. .one {
  27. line-height: 1.5;
  28. }
  29. .two {
  30. line-height: 150%;
  31. }
  32. .three {
  33. line-height: 1.5em;
  34. }

image.png

内联元素的line-height大值特性

  1. <div class="box-one">
  2. <!-- A -->
  3. <span>内容......</span>
  4. </div>
  5. <div class="box-two">
  6. <span>内容......</span>
  7. <!-- <span>内容......</span> -->
  8. </div>
  9. .box-one {
  10. line-height: 96px;
  11. }
  12. .box-one span {
  13. line-height: 20px;
  14. }
  15. .box-two {
  16. line-height: 20px;
  17. }
  18. .box-two span {
  19. line-height: 96px;
  20. }
  21. .box-two span:last-of-type {
  22. line-height: 106px;
  23. }
  1. div的line-height > span的line-height
    image.png
  2. div的line-height < span的line-height
    image.png

无论哪一种情况,最终div的高度都是两个line-height中的最大值


原因分别是:

  • 幽灵空白节点,即span前面的一个宽度为0,高度为所设置行高的一个元素节点,决定了行框盒子的高度
  • 行框盒子的高度始终是高度最大的内联盒子的高度


image.png