专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Web前端

去掉inline-block元素间间距的N种方法

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
去除inline-block元素间间距的N种方法

【前言】

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

 

【列表】

(1)inline-block是什么?

(2)inline-block兼容性

(3)inline-block元素间隙由来

(4)移除inline-block元素间隙方法

 

 

【概论】

     CSS的元素分类中可以分成三种:行内元素或者内联元素、块级元素、以及内联块元素

 

【主体】

(1)inline-block是什么?

   inline-block 即内联块,内联块元素具有了内联元素以及块级元素的特性:

   ①元素之间可以水平排列 

   ②可以当做一个块级元素来设置各种的属性,例如:width、height、padding等

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

   效果图:

  

(2)block level的元素

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

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

 

<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及以下浏览器下这俩元素间出现间隙;其它浏览器任何情况下均出现间隙;

 

(3)inline-block元素间隙由来

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

 

<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;}
   效果图:

 

  

 

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

 

(4)移除inline-block元素间隙方法

   【①】. 移除标签间的空格

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

*写法一:

<div class="demo">   <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>

【②】取消标签闭合

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

<div class="demo">        <span>我是一个span        <span>我是一个span        <span>我是一个span        <span>我是一个span</div>.demo span{  background:#ddd;  display: inline-block;}
   在美团webapp页面中貌似也是用到了这种方法。可以看下:  源代码:

 

【③】使用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; /*要设置相应的字号*/    }

【④】使用letter-spacing

类似下面的代码:

.space {    letter-spacing: -3px;}.space a {    letter-spacing: 0;}

    根据我的测试,该方法可以搞定基本上所有浏览器,包括IE6/IE7浏览器,不过Opera浏览器下有问题:最小间距1像素,然后,letter-spacing再小就还原了。

 

 

 

总结:

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

 

 

 

 

 

 

.

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: