你的位置:首页 > 网页设计

[网页设计]CSS 去掉inline


      最近做移动端页面时,经常会用到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元素间间距的N种方法;

如何解决inline-block元素的空白间距

应不应该使用inline-block代替float




丹麦特价旅游多少钱到丹麦游费用报价大全丹麦自助游攻略2015怎样去丹麦旅游去丹麦哪个旅行社好2015深圳世界之窗1月份有什么优惠?世界之窗1月优惠活动? 西雅图不只有美景 引人入胜的集市和咖啡店(全文) 探访吉林高句丽王城的辉煌文明(全文) 2015春节广东跨年演唱会去哪看?广东跨年狂欢夜哪里最热闹? 澳门妈祖庙在哪,怎么去? 澳门黑沙滩怎么去 ? 金色密云——白龙潭与水库鱼 探秘朝鲜时装秀 "神奇国度"里的"平壤style"(全文) 佛冈森波拉水上乐园门票多少钱?森波拉水上乐园是冰川水谷吗? 森波拉冰川水谷官方网站?清远佛冈森波拉冰川水谷门票预订? 广州到森波拉冰川水谷有车吗?广州到佛冈森波拉冰川水谷怎么坐车? 长隆水上乐园暑期特价?广州长隆水上乐园特价门票在哪买? 2015年端午节放几天假?2015年端午节放假怎么安排的? 厦门火车站到鼓浪屿怎么坐车,要多长时间? 海南兴隆热带花园的门票是多少? 厦门有哪些便宜又好玩的地方?最好是不要门票的 LD033C220KAB2A Datasheet LD033C220KAB2A Datasheet 12061A4R0CAT2A Datasheet 12061A4R0CAT2A Datasheet 12105C474JAT2A Datasheet 12105C474JAT2A Datasheet 深圳到惠州二天游价格 深圳到惠州二天游价格 深圳到惠州二天游价格 惠州一日游 惠州一日游 惠州一日游 深圳惠州1日游价格 深圳惠州1日游价格 深圳惠州1日游价格