美文网首页
深入理解CSS中的行高

深入理解CSS中的行高

作者: 小杺 | 来源:发表于2018-05-30 13:46 被阅读166次

基线、底线、顶线

1.png
  • 行高指的是文本行的基线间的距离
  • 基线并不是汉字的下端沿,而是英文字母"x"的下端沿

行距、行高

2.gif

内容区

3.gif
  • 底线和顶线包裹的区域,实际中不一定看得到,但却是存在

行内框

4.gif
  • 行内框只是一个概念,它无法显示出来,但是它又确实存在
  • 它的高度就是行高
  • 在没有其他因素(line-height)影响的时候,行内框等于内容区域

行框

5.gif
  • 行框(line box)。同行内框类似,行框是指本行的一个虚拟的矩形框
  • 行框高度等于本行内所有元素中行高最大的值

元素对行高的影响

  • 对于行内元素如em、strong、span和等,其padding、margin、border-top、border-bottom 不会增加行高。padding会覆盖;margin将重置为0;border-top和border-bottom同样会覆盖。padding-left、padding-right、border-left和border-right可用
  • img元素会影响行高
  • 设置行内元素的padding、border和margin并不会撑大外层元素的高度,如下图
6.png

对于inline-block 和 inline 的嵌套问题

需要了解的基本概念

  • line-height 是继承的
  • vertical-align 是不继承的

术语

  • 行框
  • 行内框
  • 行框网格
  • 行内框网格
  • 自基准
    • 自基准是用于对齐基准网格,如vertical-align: top那么就会将自基准上的top line对齐到基准网格top line
  • 基准网格
    • 基准网格是作为本行框的对齐基准,其他的自基准必须根据vertical-align对齐到基准网格

结论:

介绍几个概念叫做行内对齐规则自基准选取规则

纯粹inline嵌套

对于行框内部存在一套隐式的对齐网格,我将这套对齐网格称之为行框网格(对于行内框,也有同样的隐式的对齐网格,称之为行内框网格

  • inline是不能设置widthheight
  • 对于例如:<span>hi,<span>hello jack</span style="font-size:2em;">the<span>apple <span>is too nice</span></span></span>对于这样的纯粹inline嵌套,对于<span>hello jack</span style="font-size:2em;">这一部分会计算出行框,然后用计算出的行框设置行框网格,这个计算出的行框网格将成为自基准

混合嵌套(inline-block,inline)

混合嵌套依然遵循行内对齐规则,只是对于inline-block自基准选取的时候和inline的选取规则不一样。

  • inline自基准选取规则
    • 以自身形成的行框行框网格作为外行框自基准行内框网格
  • inline-block自基准选取规则:
    • 以自身形成的的最底层的行框网格作为外层的行框自基准行内框网格

例子

  <style>
    .align-left {
        height: 50px;
        width: 50px;
        display: inline-block;
        word-wrap:break-word;
    }

    .align-left:nth-child(odd) {
        background-color: darkorange;
    }

    .align-left:nth-child(even) {
        background-color: aqua;
    }
</style>

<div class="container">
    <div class="align-left"></div>
    <div class="align-left"></div>
    <div class="align-left"></div>
    <div class="align-left">12sdfjsdf</div>
    <div class="align-left"></div>
    <span>sdfe</span>
</div>
<div>
    <div class="align-left"></div>
    <div class="align-left"></div>
    <div class="align-left"></div>
    <div class="align-left"></div>
    <div class="align-left"></div>
</div>
inlineBlock.png
<div style="border:1px solid black;">
    <span>hello world Well I wonder<span style="display:inline-block; border:1px solid red; width:100px;"> could it be When I was dreaming about you baby You were dreaming of me Call me crazy Call me blind To still be suffering is stupid after all </span>of this time Did I lose my love to someone better And does she <span>love you like I do I do,</span> you know I really really do Well hey So much I need to say</span>
    <span>hello node</span>
    <span>hello nice</span>
</div>
inlineBlock2.png
<div style="border:1px solid black; margin-top:50px;">
    <span style="vertical-align: top;">hello world Well I wonder<span style="border:1px solid red;"> could it be When I was dreaming about you baby You were dreaming of me Call me crazy Call me blind To still be suffering is stupid after all </span>of this time Did I lose my love to someone better And does she <span style="font-size: 2em;">love you like I do I do,</span> you know I really really do Well hey So much I need to say</span>
    <span>hello node</span>
    <span>hello nice</span>
</div>
inlineBlock3.png

相关文章

  • CSS行高

    css行高line-height的一些深入理解及应用 深入理解CSS中的行高

  • 深入理解CSS中的行高

    基线、底线、顶线 行高指的是文本行的基线间的距离 基线并不是汉字的下端沿,而是英文字母"x"的下端沿 行距、行高 ...

  • line-height和vertical-align的关系(一)

    说在前面:最近在学习张鑫旭大神的《css行高line-height的一些深入理解及应用》和《CSS深入理解vert...

  • 张鑫旭老师博客收藏

    1.css文字超出显示省略号。2.css行高line-height的一些深入理解及应用3.checkbox复选框的...

  • 笔记: CSS深入理解vertical-align和line-h

    参考 CSS深入理解vertical-align和line-height的基友关系 深入理解css中vertica...

  • CSS文章收藏

    CSS CSS中强大的EM你真的理解CSS的linear-gradient?深入理解 flex 布局以及计算使用C...

  • 深入理解CSS行高line-height

    行高: 两行文字“基线”之间的垂直距离 基线并不是汉字的下端沿,而是英文字母"x"的下端沿 行距: 一行“底线”至...

  • [前端日记]0.x.2/line-height: 2/2em的区

    前置知识 今天来说说CSS中我们必须了解,但大多数人并没有理解透彻的行高。首先,我们来了解一些基本概念: 行高:指...

  • 深入理解CSS过渡属性transition

    深入理解CSS过渡属性transition CSS中过渡属性transition,可以在不需要JS的情况下实现简单...

  • CSS总结笔记(三)

    一、行高和字号 1.1 行高 CSS中,所有的行,都有行高。盒模型的padding,绝对不是直接作用在文字上的,而...

网友评论

      本文标题:深入理解CSS中的行高

      本文链接:https://www.haomeiwen.com/subject/rybtsftx.html