最近做移动端页面时,经常会用到inline-block元素来布局,但无可避免都会遇到一个问题,就是inline-block元素之间的间隙。这些间隙会导致一些布局上的问题,需要把间隙去掉。对于inline-block元素及去掉间隙的方法,在这里做一个简单的总结。

回到顶部

inline-block是什么

inline-block 即内联块,在CSS的元素分类中可以分成三种:行内元素或者内联元素、块级元素、以及内联块元素。

内联块元素具有了内联元素以及块级元素的特性:(1)元素之间可以水平排列 (2)可以当做一个块级元素来设置各种的属性,例如:width、height、padding等。

例子1:定义一个内联元素span为inline-block元素

<div id="demo"><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span>
</div>
#demo span{display:inline-block;background:#ddd;
}

效果图:

回到顶部

inline-block兼容性

(1)inline level的元素

对于内联元素(inline element),所有主流浏览器都支持直接设置display 的value值为inline-block来将其定义为内联块。

(2)block level的元素

IE7及以下浏览器对块级元素(block element)的支持并不完全,它们只支持用display:inline-block去定义一个inline level的元素为内联块。

由于IE7及以下浏览器支持直接将inline level元素设置为内联块,所以我们可以变通实现,先将block level元素设置为inline,然后再去触发该元素的hasLayout,使其拥有和inline-block相似的特性。可以这样写:

例子2:

<div id="demo"><div>我是一个div</div><div>我是一个div</div><div>我是一个div</div><div>我是一个div</div>
</div>
#demo div{display:inline-block;*display:inline; /*IE7 hack*/*zoom:1; /*触发hasLayout*/
}

IE7及以下浏览器:block level元素转换为inline-block,在IE7及以下浏览器下元素间不出现间隙;inline level元素转换为inline-block,在IE7及以下浏览器下元素间出现间隙;紧跟block level转换为inline-block的元素之后有个inline level转换为inline-block的元素,在IE7及以下浏览器下这俩元素间不出现间隙;紧跟inline level转换为inline-block的元素之后有个block level转换为inline-block的元素,在IE7及以下浏览器下这俩元素间出现间隙;其它浏览器任何情况下均出现间隙;

回到顶部

inline-block元素间隙由来

在例子1中,定义为inline-block元素会产生间隙,如果不设置display:inline-block,会是什么效果?如下:

例子3:

<div class="demo"><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span>
</div>.demo span{background:#ddd;
}

效果图:

上面例子中,对span不做任何处理依然存在空隙,这到底是什么原因,是否是结构上的问题。假如将span标签都写成一行,又是怎样的效果,来看一下:

<div class="demo"><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span></div>
.demo span{background:#ddd;
}

效果图:

可以看到间隙是由换行或者回车导致的。只要把标签写成一行或者标签直接没有空格,就不会出现间隙。但是这种方式是不太可靠,存在太多不可控的因素导致失效,例如:代码生成工具、代码格式化、或者其他人修改了代码等等。下面列举了各种去掉间隙的方法,是否适合需要看具体的应用场景了。

回到顶部

移除inline-block元素间隙方法

(1)移除标签间的空格

元素间的间隙出现的原因是元素标签之间的空格,把空格去掉间隙自然就会消失。来看以下几种写法:

*写法一:

<div class="demo"><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span></div>

*写法二:

<div class="demo"><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span><span>我是一个span</span></div>

*写法三:利用HTML注释标签

<div class="demo"><span>我是一个span</span><!-- --><span>我是一个span</span><!-- --><span>我是一个span</span><!-- --><span>我是一个span</span></div>

(2)取消标签闭合

<div class="demo"><span>我是一个span<span>我是一个span<span>我是一个span<span>我是一个span</div>

.demo span{
background:#ddd;
display: inline-block;
}

把span标签的结束标签去掉,这样间隙就没有了。为了兼容IE6/IE7,最后一个标签需要闭合。

<div class="demo"><span>我是一个span<span>我是一个span<span>我是一个span<span>我是一个span</span></div>
.demo span{background:#ddd;display: inline-block;}

在美团webapp页面中貌似也是用到了这种方法。可以看下:

源代码:

(3)使用font-size:0;

在父容器上使用font-size:0;可以消除间隙,可以这样写:

<div class="demo"><span>我是一个span<span>我是一个span<span>我是一个span<span>我是一个span</span></div>.demo {font-size: 0;}.demo span{background:#ddd;display: inline-block;font-size: 14px; /*要设置相应的字号*/}

对于Chrome, 其默认有最小字体大小限制,考虑到兼容性,需要取消字体大小限制,这样写:

<div class="demo"><span>我是一个span<span>我是一个span<span>我是一个span<span>我是一个span</span></div>.demo {font-size: 0;-webkit-text-size-adjust:none;}.demo span{background:#ddd;display: inline-block;font-size: 14px; /*要设置相应的字号*/}
回到顶部

总结

在移动端的页面中,个人倾向于设置font-size:0这种方法来清除掉。对于PC端上,可以参考doyoe的全浏览器兼容方案。

以上是在工作上遇到一些问题的知识总结,不足之处,欢迎指正。

inline-block清除空隙2相关推荐

  1. [CSS]详解display:inline | block |inline-block的区别

    2019独角兽企业重金招聘Python工程师标准>>> [CSS]详解display:inline | block |inline-block的区别[点评网站][发布新闻][申请专栏 ...

  2. inline, block, inline-block区别

    inline, block, inline-block区别 inline Not height and width; Not margin-top & margin-bottom; Alway ...

  3. 关于css的display:flex inline block inline-block和float

    1.解释一下display的几个常用的属性值,inline , block, inline-block inline(行内元素):使元素变成行内元素,拥有行内元素的特性,即可以与其他行内元素共享一行, ...

  4. inline,block,inline-block的区别

    display:block block元素会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父元素宽度. block元素可以设置width,height属性.块级元 ...

  5. display:inline、block、inline-block

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  6. display(block,inline,none),visibility(visible,hidden)之间的关系及区别(不同)

    这段时间一直对display属性的block,inline,none和visibility属性的visible,hidden一直很模糊,总觉得很难理解,通过下面这个实例,就可以很好的牢记这几者之间的区 ...

  7. HTML清除浮动的四种方式

    在我们使用html搭建网页时,如果一个父元素中的某个子元素设置浮动后,就会造成父元素的高度塌陷,会导致页面结构混乱.这是因为在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高 ...

  8. 关于CSS清除浮动的三个方法

    介绍的四种方法都在下面源码的基础上修改演示! <!DOCTYPE html> <html lang="en"><head><meta ch ...

  9. inline-block什么意思中文_block,inline和inline-block概念和区别

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

最新文章

  1. [导入]深入了解OpenOffice.org(二){作者:路广}
  2. myeclips/eclipse配置总结(根据网络整理)
  3. 学习笔记Hive(七)—— 自定义函数
  4. 学完Python后可以做哪些工作呢?
  5. 舞台现场直播技术实践
  6. 【Matplotlib】【Python】如何使用matplotlib绘制折现图
  7. 计算机电源管理设置,关于电源管理的电源管理计划设置
  8. docker mysql扩容_docker pull mysql 时报错,说空间不足
  9. tensorflow: slim
  10. 织梦(Dedecms) V5.6 plus/carbuyaction.php 本地文件包含漏洞
  11. mysqld mysql-debug_mysqld --debug-sync
  12. 【C004】VB - 数据文件(一)顺序文件
  13. 消息队列(MSMQ)学习
  14. Python-查看python版本-常用代码-VS编译器版本号
  15. oracle awr 定期,Oracle 每天自动生成AWR报告
  16. 立创 EDA #学习笔记10# | 常用连接器元器件识别 和 蜂鸣器驱动电路
  17. qq邮箱里面html的图片无法显示,QQ邮箱如何不显示图片? QQ邮箱如何不显示图片?...
  18. SUMO无法创建xml文件 Could not build output file
  19. 浙大PAT考试1013~1016(最伤的一次。。)
  20. Google API大全

热门文章

  1. visio任意区域填充斜线阴影_DX12渲染管线(6) - 级联阴影与距离场阴影
  2. Java 9 尝鲜之JShell交互式编程环境
  3. jar包冲突常用的解决方法
  4. 【19行代码AC,简洁】1029 Median (25 分)
  5. 【测试点分析】1060 爱丁顿数 (25分)_21行代码
  6. 以下关于程序设计语言的叙述中,不正确的是()【最全!最详细解释!!】
  7. 回调java 简书_web3j函数回调使用详解
  8. 理论+实验·MHA高可用配置及故障切换
  9. 操作篇 bgp协议了解与学习
  10. Python爬虫基本库的使用