美文网首页css
并列元素设置display:inline-block

并列元素设置display:inline-block

作者: peakol | 来源:发表于2018-05-17 12:26 被阅读0次

    有时候我们设置相邻元素样式时,比如三个div块元素,我们想要让它在一行显示,当然除了定位,浮动之外我们可以设置他的display为inline-block,让它变成行内块进行一行显示。当然普通的行内元素我们有时候也会这样设置。下面的例子我们用div举例
    如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style>
        .item {
          width: 150px;
          height: 200px;
          background: red;
          display: inline-block;
        }
      </style>
    </head>
    <body>
      <div class="list">
        <div class="item">111111</div>
        <div class="item">2222</div>
        <div class="item">333</div>
      </div>
    </body>
    </html>
    

    我们设置好便签的内容,我们理想的呈现状态是这样的:


    期望正常显示状态

    但我们真正写业务时,标签的数据是不可控的,不是像我们写demo那样数据是写死的,动态的数据有时我们也会出现标签内的内容为空的时候,这里我们将第二个item的内容置为空,看看效果是不是会变

    <div class="list">
        <div class="item">111111</div>
        <div class="item"></div>
        <div class="item">33333</div>
      </div>
    

    此时显示的效果是


    此时显示成这样

    不甘心,再让第一个item内容变为空


    前两个内容都为空
    此时我们好像发现了什么,当相邻元素设置成display:inline-block,有数据的元素与没有数据的元素相邻,有数据的元素会发生偏移。似乎好诡异,查下资料发现:当元素display设置为inline-block,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递。对象呈递为内联元素,而同一行内的内联元素默认是基于 baseline 对齐的,如下图
    基线

    图中的黑色线条就是我们所说的基线:为什么3个元素的方向不是相同的呢?为什么有内容的元素向下,而无内容的元素会向上呢?就此我们需要了解CSS渲染机制:对于一个inline-block元素,如果内部没有inline内联元素,或者overflow不是visible,则该元素的基线就是它margin的底边缘,否则就是元素内部最后一行内联元素的基线。
    简单地就以上这种情况来说,没有内容的item会基于它的margin底边缘也就是它的下边缘对齐,而包含内容的item会基于其内部内联元素的基线对齐,所以会造成这种一上一下的情况。
    了解清楚这些原理我们想想有什么方法可以解决以上问题。当然我们首先可以想到,还用啥inline-block,直接float浮动一下,问题瞬间解决,想到了浮动,当然我们也可以想到定位去解决;当浮动和定位对于上下文布局影响太大,当然你要说一句再清除浮动,这话我没法接,我只想说能不能少点代码,有简单的干嘛去复杂了写,我们可以改变vertical-align的属性,根据需求设置相关的值(top/middle/bottom),鉴于上面的实例我们试一下:

      .item {
          width: 150px;
          height: 200px;
          background: red;
          display: inline-block;
          vertical-align: top;
        }
    

    此时的效果:


    完美

    有内容的和没内容的已经完美“平等”,没有“高低”

    相关文章

      网友评论

        本文标题:并列元素设置display:inline-block

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