• inline-blcok 之间的空白间隙


    前言:

    • inline-blcok 布局时,通常情况下, inline-blocks 之间有空白,尽管通常我们是不想要的,毕竟不像padding或者margin一样好控制,如图:

      <div class="parent">
        <span class="child child1">child child1</span>
        <span class="child child2">child child2</span>
        <span class="child child3">child child3</span>
        <span class="child child4">child child4</span>
        <span class="child child5">child child5</span>
      </div>
    
    * {
      margin: 0;
      padding: 0;
      color: black;
    }
    .parent {
      background-color: pink;
    }
    .child {
      display: inline-block;
      border: 10px solid darkorange;
      background-color: lightblue;
    }
    

    原因

    产生空白的原因,其实有两个:

    • white-space默认为normal,根据MDN上来说,就是

    连续的空白符会被合并,换行符会被当作空白符来处理。填充line盒子时,必要的话会换行。

    这个不合理么?不,这是合理的,这也就是为什么你的行内标签之间有那么多空白符或者换行,但是在实际展示的时候,都被缩成了一个空白。

    • inline-blcok元素对外是按照IFC来布局的,所以 inline-blcoks 之间的空白就变会被合并,变成一个空白,如果 inline-blcoks 之间没有空白,那自然就不存在这个问题了,当然这在实际编码中可行性不大。

    方案:

    • text-space-collapse:discard,然而这个规范才出来,2018.5 还没有浏览器支持,戳 草案
    • 负偏移,具体有很多种设置方法,如下:
    1. .parent设置letter-spacing : -0.3em.child设置letter-spacing:0.parentletter-spacing过大也不会有大问题,opera 老版浏览器和 IE6/7 可能会有问题。
    2. .child 设置margin-right:-0.3em。但margin-right过大可能会产生负间隙。
    3. .parent设置word-spacing : -0.3em.child设置word-spacing:0。但.parentword-spacing过大可能会产生负间隙。
    • .parent设置font-size : 0.childfont-size设置成原来的值。缺点明显,如果原来字号都用的em,就不太好用。
    • float布局或去flex布局。

    总结:可行的方案就是负偏移font-size,考虑兼容性就结合font-sizeletter-spacing ,如:

    .parent {
      letter-spacing: -0.3em;
      font-size: 0;
    }
    .child {
      display: inline-block;
      letter-spacing: 0;
      font-size: 12px;
    }
    

    如果不考虑 opera 老版浏览器,就 letter-spacing就可以了,这个应该是趋势。

    注意letter-spacing不要用-0.3em-0.31em之外的值,否则会出现类似下面的情况,在 chrome66上测试过。

    除此之外,还有些十分不优雅的方法,这里就截图一下,看看就好:




    参考文章:
    How do I remove the space between inline-block elements?
    display: inline-block extra margin
    Unwanted margin in inline-block list son sons
    拜拜了浮动布局-基于 displayinline-block 的列表布局

  • 相关阅读:
    使用Dictionary键值对判断字符串中字符出现次数
    Linq实现字符串拼接多条件查询
    js数据类型转换
    js前端数据类型检测typeof,instanceof,Object.prototype.toString.call
    moment.js格式化日期,获取前一个月的时间
    css 样式中height100%失效问题
    记一次react项目运行崩溃
    null和undefined区别
    windows腾讯云/阿里云服务器更换操作系统为linux
    csrf攻击原理和防御-生成token防御代码
  • 原文地址:https://www.cnblogs.com/xianshenglu/p/9023366.html
Copyright © 2020-2023  润新知