美文网首页
vertical-align与line-height

vertical-align与line-height

作者: tency小七 | 来源:发表于2018-10-20 20:31 被阅读0次

    有这样一个经典的问题,以下代码为什么图片下面有空隙呢?

        .omg{
            background-color:red;
        }
        <div class="omg">
            <img src="./111.png"/>
        </div>
    
    image.png

    其实,这就是vertical-align和line-height搞的鬼!!!!首先,大家一定要意识到这么一点:对于内联元素,vertical-align与line-height虽然看不见,但实际上到处都是
    那这两个到底是什么东西呢?

    关于line-height

    看代码:

    <div class="word-wrap">
        <span class="word1">我是一个大傻逼</span>
        <span class="word2">我是一个大傻逼</span>
    </div>
    .word-wrap{
       background-color:blueviolet;
     }
     .word1{
       line-height: 60px;
       color: #fff;
       background-color: black;
       vertical-align: middle;
      }
     .word2{
       color: #fff;
       background-color: black;
       vertical-align: middle;
     }
    

    子元素的line-height会把父元素的高度撑开,而不是把自己撑开。

    image.png

    可以看到子元素的高度是跟自己的内容高度一致的,父元素的高度就是我们设置的line-height:60px
    如果line-height >子元素的高度,那么多出来的高度就会均分在子元素的顶部和底部。这就可以被我们用来实现垂直居中啦,真是机智!

    关于vertical-align

    vertical-align有好多种属性值啊啊啊

    /* 关键字值 */
    vertical-align: baseline;
    vertical-align: sub;
    vertical-align: super;
    vertical-align: text-top;
    vertical-align: text-bottom;
    vertical-align: middle;
    vertical-align: top;
    vertical-align: bottom;

    /* <长度> 值 */
    vertical-align: 10em;
    vertical-align: 4px;

    /* <百分比> 值 */

    vertical-align: 10%;

    /* 全局值 */
    vertical-align: inherit;
    vertical-align: initial;
    vertical-align: unset;

    那么问题来了?我们对于内联样式完全没有去设置vertical-align,那么vertical-align默认的对齐方式是什么呢?

    vertical-align默认值是baseline, 也就是 基线对齐
    什么是基线呢?
    基线就是字母X的下边缘,咦,我们看

    如果更改html代码如下,我们可以看到

    <div class="omg">
        <img src="./111.png"/>XX
    </div>
    
    image.png

    妈呀,真的是和X的下边缘对齐的!!!
    但是X他本身也有高度啊,我们给X加个背景颜色,这时候一切都迎刃而解了


    image.png

    后面XX文字的高度从何而来???
    后面XX文字的高度是由行高决定的!也就是我们的line-height

    所以,造成了我们开头所说的那个问题的罪魁祸首就是line-height和vertical-align。

    如何解决?
    1. 让vertical-align失效,因为vertical-align只对行内元素感冒,如果我们给img加上display:block的属性就不会有空隙啦


      image.png

      不过不要影响到页面本来的布局哟

    2. 我们也可以给vertical-align设置其他的值,设置vertical-align:bottom

       img{
           vertical-align: bottom;
       }
       .Xcolor{
           background-color:#fff;
           vertical-align: bottom;
       }
      

    参考博文来自张鑫旭大神

    https://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height/

    相关文章

      网友评论

          本文标题:vertical-align与line-height

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