03.css基础1,非布局样式:选择器,伪元素与伪类,字体和字体族,行高

选择器(1)

dom树

假如 DOM 的结构如上图,匹配规则是 .mod-nav h3 span。
若从左向右的匹配,过程是:从 .mod-nav 开始,遍历子节点 header 和子节点 div,然后各自向子节点遍历。在右侧 div 的分支中,最后遍历到叶子节点 a ,发现不符合规则,需要回溯到 ul 节点,再遍历下一个 li-a,假如有 1000 个 li,则这 1000 次的遍历与回溯会损失很多性能。
再看看从右至左的匹配:先找到所有的最右节点 span,对于每一个 span,向上寻找节点 h3,由 h3再向上寻找 class=”mod-nav” 的节点,最后找到根元素 html 则结束这个分支的遍历。

伪元素与伪类

伪元素伪类

非布局样式(字体和字体族)

VBTt1A.md.png

非布局样式(行高)

VB77a8.png

  • 有n个inline box元素,每一个的行高都不一样,最大为30px,弄清楚几个概念,
    inline box 组成line box,就是n个span组成line box(一行的元素,div),line box的高度由inline box决定(inline box最高为30px),所以如图所示,div为30px高度,

  • line-height会撑起来inline box的高度,但不会影响它布局的高度,只是影响他占据空间的高度,所以div是30px高,而最大行高的span的行高并没有30px!~~

  • 行高怎么来的?由linebox(div)来的,linebox由inline box(span)来的,所以inline box决定行高


  • 背景颜色是根据字体大小来渲染的,和行高没有关系

VBHjYD.png

如果把font-size设大,背景颜色-蓝也会边长

  • 行高大于字体大小,那么文字居中,字体大小决定背景颜色的高度长度和行高没关系
    VBqMgH.png

一道面试题:
VBObge.md.jpg

  • 图片下面有空隙,为什么?因为图片是inline元素,那么在一行上有顶线,中线,基线,底线,默认inline box对齐方式默认的vertical-align是baseline的基线,不是底线bottom,而基线到底线有距离,所以有空隙

    从上到下四条线分别是顶线、中线、基线、底线,很像才学英语字母时的四线三格,我们知道vertical-align属性中有top、middle、baseline、bottom,就是和这四条线相关。
    顶线、中线、基线、底线

VBXJV1.md.png

所以面试题解决空隙的方案是:vertical-align:底线bottom