css - inline-block 盒子下的内容文字错位问题

参考资料:

  “display:block-inline形式的Span或Div中添加文字后,致使Span或Div排版掉落、错位”的缘由及解决方法;css

 

正文:

  场景:两个 div 排在一行上,各有固定宽高,其中有一个 div 内部有文字和排版等其余填充;两个 div 杂七杂八的宽度加起来远小于 father 宽度。html

  拿到设计图以后,略想了一下,这不 so easy 么,既然有足够的宽度空间,那不就是随意发挥么:两 son 变 inline-block,那个有内容的 div 内或 padding ,或 flex,大体弄个上下等距不就 ok  了么,正好前面的人用 table-cell 来垂直居中,正好能够试试。然而事实证实太 naive 了,inline-block 中就藏了一个坑。
浏览器

  

  首先是思路中的效果:dom

.container {
    width: 900px;
    height: 300px;
    background-color: #eee;
    margin: 100px auto;
}

.inbox {
    display: inline-block;
    width: 400px;
    height: 100px;
    background-color: #7b7f88;
}

<div class="container">
    <div class="inbox"></div>
    <div class="inbox"></div>
</div>

  很快啊,上面没什么问题(由于父元素的宽度足够,两个子元素之间的间隙能够忽略,固然这里也会出现隐藏坑,后叙)。因而很开心地去填充内容了,dom 结构变成:字体

<div class="container">
    <div class="inbox"></div>
    <div class="inbox">
        <div>
            <h2>55</h2>
        </div>
    </div>
</div>

   愉快地 ctrl + s 以后 F5,而后就懵逼了,这不对啊,怎么成这样了,刚才不还好好的么,就加了句话???flex

 

  因而通过翻山越岭地 Google baidu 以后,找到了参考中的资料:css 有个属性 vertical-align,它只在 display为 inline 或者 inline-block 的状况下起做用,默认值是 baseline。这意味着把元素设置成 inline(-block) 的时候,内部的文字会按照基线对齐,这也是为何用尺子量,“55” 正好切了前一个 inbox 的 bottom。spa

  那解决办法就简单了,每一个 inbox 设置 vertical-aligh: top(若是父元素的高度是撑开的话,设置成middle、bottom、text-bottom、text-top 均可以),就能够回归思路,以下图:
.net

 

其余:

  在第一张图咱们也看到, inline-block 的盒子之间是存在一点间隙的,这个问题和 HTML 的结构有关。正如上面咱们贴的代码,两个 inbox 之间有一个换行,而浏览器在解释的时候遇到 inline(-block) 会把这个换行符解释成一个空白文本节点,这在视觉上就出现了间隙。解决办法有不少,贴两个常见的:设计

  1. 代码写一行上,不过不利于维护;
htm

  2.父元素设置 font-size: 0,子元素从新设置字体大小;

各有优缺点,按需取用。

相关文章
相关标签/搜索