头闻号

天津聚鑫伟业商贸有限公司

卤代烃|综合性公司|室内涂料|空调|其他未分类|其他未分类

首页 > 新闻中心 > 科技常识:详解CSS 去掉inline
科技常识:详解CSS 去掉inline
发布时间:2024-12-23 20:00:23        浏览次数:4        返回列表

今天小编跟大家讲解下有关详解CSS 去掉inline-block元素间隙的几种方法 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关详解CSS 去掉inline-block元素间隙的几种方法 的相关资料,希望小伙伴们看了有所帮助。

最近做移动端页面时 经常会用到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; *zoom:1; }

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; }

以上是在工作上遇到一些问题的知识总结 希望对大家的学习有所帮助 也希望大家多多支持爱蒂网。

来源:爱蒂网