• 深入理解 vertical-align 属性


    语法

    用来指定行内元素或表格元素的垂直对齐方式

    相对父元素的值

    • baseline
      • 使元素的基线与父元素的基线对齐。HTML规范没有详细说明部分可替换元素的基线,如textarea,这意味着这些元素使用此值的表现因浏览器而异。
    • middle
      • 使元素的中部与父元素的基线加上父元素x-height(译注:x高度)的一半对齐。
    • sub
      • 使元素的基线与父元素的下标基线对齐。
    • super
      • 使元素的基线与父元素的上标基线对齐。
    • text-top
      • 使元素的顶部与父元素的字体顶部对齐。
    • text-bottom
      • 使元素的底部与父元素的字体底部对齐。

    相对行的值

    • top

      • 使元素极其后代元素的顶部与整行的顶部对齐。
    • bottom

      • 使元素及其后代元素的底部与整行的底部对齐。

      没有基线的元素,使用外边距的下边缘替代。

    baseLine

    1、baseLine 的含义

    屏幕快照 2019-08-31 下午3.11.20

    2、baseLine 的确定规则

    1. inline-table 的 baseline 是他的table的第一行的 baseline
    2. 父元素 [line box] 的 baseline 是最后一个 line box 的 baseline。
    3. inline-block 元素的 baseline 确定规则
        1. inline-block 元素,如果内部有 line box,则 inline-block 元素的 baseline 就是最后一个作为内容存在的元素 [inline box] 的 baseline,而这个元素的 baseline 的确定就要根据它自身来定了。
        2. inline-block 元素,如果内部没有 line box 或他的 overflow 属性是 visible 以外的值,那么 baseline 将是这个 inline-block 元素的 margin 边界。
    

    3、inline-block 的例子

    • 子元素为行内块,里面无行内框。
        <style type="text/css">
          .ctn-block {
            background-color: #bbb;
            height: 500px;
            text-align: center;
          }
        
          .ctn-block .child {
            display: inline-block;
             100px;
            height: 200px;
            background: orange;
          }
        </style>
        <body>
            <div class="ctn-block">
                x
                <div class="child">
                </div>
            </div>
        </body>
    
    ![屏幕快照 2019-08-31 下午5.04.28](https://shenggao.oss-cn-beijing.aliyuncs.com/blog/2020/02/29/ping-mu-kuai-zhao-20190831-xia-wu50428.png)
    

    原因:

    • 依照规则2。父元素的基线是最后一个行内框的基线。
    • 最后一个行内框为一个行内块。先判断该行内块 overflow 属性不是 visiable 以外的值,然后确定其内部没有行内框,得出该元素的基线是底部 margin 齐平。
    • 父元素的基线就是黄色块的底部 margin。
    • 子元素为行内块,里面有行内框。
    <style type="text/css">
          .ctn-block {
            background-color: #bbb;
            height: 500px;
            text-align: center;
          }
        
          .ctn-block .child {
            display: inline-block;
             100px;
            height: 200px;
            background: orange;
          }
    </style>
    <body>
        <div class="ctn-block">
          x
          <div class="child">
            x
          </div>
        </div>
    </body>
    

    屏幕快照 2019-08-31 下午5.15.10
    原因:
    * 依照规则2。父元素的基线是最后一个行内框的基线。最后一个行内框为一个行内块。
    * 先判断得出该行内块 overflow 属性不是 visiable,然后确定其有一个作为内容存在的元素,所以当前行内框的baseline就是最后一个作为内容存在的元素的baseline,也就是内容 x 的baseline,默认是 x 的底部。
    * 所以当前父元素的基线是内容区 x 的底部。

    • 子元素有行内块,且其 overflow 属性为 hidden。
      则子元素的基线是底部 margin。所以相应的父元素的基线是底部 margin。

    inline-block 元素下方有空隙。

    • 垂直空隙
    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style type="text/css">
        * {
          margin: 0;
          padding: 0
        }
    
        ul {
          background-color: bisque;
        }
    
        .box {
          display: inline-block;
           100px;
          height: 100px;
          background-color: aliceblue;
        }
      </style>
    </head>
    
    <body>
    
      <ul>
        <li class="box"></li>
        <li class="box"></li>
        <li class="box"></li>
        <span>x</span>
      </ul>
    </body>
    
    </html>
    

    屏幕快照 2019-08-31 下午5.53.01
    出现的原因:li 为行内块,且其 vertical-align 属性默认为 baseline,也就是字母 x 的底边,而相对于 s、y 等一些较高的字母,其底部会长一下,所以 baseline 的下方会给字母的一部分留出空间,因此会产生间隙。解决方法,就是**改变 line box 的 baseline 位置,比如设置 li 的 vertical-align 为 middle。如下所示。
    屏幕快照 2019-08-31 下午5.58.34

    • 左右间隙
      出现原因:li 元素的水平空隙是因为换行引起的,这个换行会变成一个空白,这个空白会被解析为 DOM 中的文本节点。
      解决办法:
      1. li 前后兄弟元素连起来书写。
      2. 用注释来代替空白,注释节点默认在渲染的时候是不渲染的。
  • 相关阅读:
    JSP ——第九次作业
    JSP ——第八次作业
    JSP ——第七次作业-mail_system
    JSP ——第六次作业
    JSP——第五次作业
    软件测试——第二次
    JSP作业 四——2
    JSP 作业 四 —(1)
    JSP 第三次作业
    NSData的同步下载与NSConnection的同步下载
  • 原文地址:https://www.cnblogs.com/shenggao/p/12382060.html
Copyright © 2020-2023  润新知