踩过的坑 vertical-align&line-height

需要实现一个简单的效果,如下:

要求这个块的高度是固定的,为40px;“标题”字体20px;“更多>”是18px。

不打算用float,用inline-block实现这两个效果,结果连踩两个雷,代码如下:

.parent {
            background-color: #9383ff;
            line-height: 40px;
            width: 500px;
        }
        .parent > div {
            display: inline-block;
            font-size: 20px;
            width: 50%;
        }
        .child_b {
            text-align: right;
        }
        .child_a {
            text-align: left;
        }
        .sp {
            font-size: 18px;
        }
<div class="parent">
    <div class="child_a">标题
    </div><div class="child_b">
        <a class="child_b_a">
            <span class="sp">更多></span>
        </a>
    </div>
</div>

(ps:inline-block之间的空白问题不谈)

原以为父元素高度会是40px,结果打脸:

“标题”所属inline-block的div高度是40px,但“更多>”的高度是40.8px,这个差异后面再说。

为了显示问题,给“标题”和“更多>”这两个inline-block加个背景色,结果如下:

换成白色背景可以更明显看到问题:

想起以前读过的一篇文章(文章地址:http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height/),这是vertical-align默认baseline对齐造成的,改一下即可,比如改成vertical-align: top:

果然,inline-block带来的问题解决了,然后发现第二个雷:为什么“标题”的div高度是40px,而“更多>”是41px(这个高度差和font-family有关,不同字体,不同浏览器,这个高度差想必是不一样的)。仔细找区别,然后发现“更多>"的a标签字体是继承的20px,但包裹它的span标签又设置为18px,统一这两个值试试:

果然,问题解决了,这又是vertical-align默认对齐为baseline搞的鬼,推荐文章:https://juejin.im/post/5a3b592c6fb9a045263bc191

注意,不要在包含“更多>”的span标签里改字体大小,要在那两个inline-block里改。最终代码如下:

.parent {
            background-color: #9383ff;
            width: 500px;
            line-height: 40px;
        }
        .parent > div {
            display: inline-block;
            width: 50%;
            vertical-align: top;

        }
        .child_b {
            text-align: right;
            font-size: 18px;
        }
        .child_a {
            font-size: 20px;
            text-align: left;
        }
<div class="parent">
<div class="child_a">标题
</div><div class="child_b">
<a >
<span >更多></span>
</a>
</div>
</div>
 
 

水平有限,写的东西肯定有不足,望谅解。

 

posted @ 2017-12-23 11:20  木门槛  阅读(80)  评论(0)    收藏  举报