在使用display: inline-block;时,这些inline-block之间会有间隙,根据无双 - 《去除inline-block元素间的空隙》的说法,这个间隙是4px或者8px的距离(与浏览器有关),如果间隙是确定的,那根据这个我们就可以用CSS来避免这个间隙。根据之前的经验,也发现了可以通过改变HTML代码的结构来规避这个信息。

假设<ul>之间的<li>都是inline-block,最早我的做法是直接不换行,把所有标签连着写:

<ul>
<li>这里是文字内容</li><li>这里是文字内容</li><li>这里是文字内容</li>
<ul>

这个方法虽然有效,但的确不算最“优雅”的办法,尤其在<li>有很多例如class之类的属性的时候会很大程度地影响阅读。

从HTML结构上入手

从上面可以看出规避inline-block间隙的办法就是使HTML元素之间本身没有间隙,于是问题的思路就清楚了,因为元素的标签分为开始标签和结束标签,只要使上一组<li>的结束标签紧挨着下一组<li>的开始标签,像这样...</li><li>...就可以了,于是HTML结构还可以改成这样:

<ul>
<li>这里是文字内容</li
><li>这里是文字内容</li
><li>这里是文字内容</li>
<ul>
<!--这样上一个元素的结束标签就是与下一个元素的开始标签紧挨着的了,浏览器会认为它们没有间隙-->

还可以写成这样:

<ul>
<li>这里是文字内容</li><!--
--><li>这里是文字内容</li><!--
--><li>这里是文字内容</li>
<ul>
<!--利用注释来完成元素之间的连接,其实原理是一样的-->

也可以这样:

<ul>
<li>
这里是文字内容</li><li>
这里是文字内容</li><li>
这里是文字内容</li>
<ul>
<!--和这样:-->
<ul>
<li>这里是文字内容
</li><li>这里是文字内容
</li><li>这里是文字内容</li>
<ul>

这些方法都是通过改变HTML结构来实现元素之间无间隙,本质都是一样的。我个人比较喜欢用的是第二种方法,只需要改变一个符号的位置就可以。

从CSS上入手

除了从HTML结构上入手外,根据上面说的间隙距离是固定的,此外,这个根本上还是属于样式问题,所以还可以从CSS上来解决这个间隙。CSS解决间隙的办法有这些:

采用负边距:利用负边距来抵消间隙

ul li{
display: inline-block;
margin-right: -4px;
}

font-size:inline-block的父元素font-size设为0也可以,因为<li>被当作inlie-block处理,所以也有内联元素的性质,因此可以用处理内联元素的属性来处理这些inlie-block

ul{
font-size: 0;
-webkit-text-size-adjust: none;
}
li{
display: inline-block;
font-size: 14px;
}
/*根据张鑫旭大神的文章,chrome浏览器会有默认最小字体大小,所以在这里要对chrome做单独的处理*/

letter-spacing和word-spacing:原理同设置font-size相同。

ul{
letter-spacing: -4px;
}
ul li{
letter-spacing: 0;
}
/*以及word-spacing,这俩的原理是一样的*/
ul{
word-spacing: -4px;
}
ul li{
word-spacing: 0;
}

结语:以上是一些我暂时认为比较通用,不会造成更大影响的处理办法。当然还有各种各样的好的处理办法,还有时候会遇到一些特殊情况,那时候就需要具体情况,具体分析,具体解决了。


参考文章:

张鑫旭 - 《去除inline-block元素间间距的N种方法》

无双 - 《去除inline-block元素间的空隙》

去除inline-block之间的间隙的更多相关文章

  1. GIS地理工具案例教程——批量去除多边形的之间的间隙

    GIS地理工具案例教程--批量去除多边形的之间的间隙 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 问题:几乎所有的手工生产的数据,都存在多边 ...

  2. CSS3如何去除 inline block 元素之间多出的空格

    display: inline-block 属性很好的避免了元素的浮动问题,但是会有点小问题,就是 inline-block 元素间的回车会被显示为一个空格.然而,我们写代码时,都是用回车来格式化的. ...

  3. inline和inline-block的间隙问题

    我们在前端布局的时候,会偶尔发现,在具有inline/inline-block属性的元素间存在一小段间隙,网上有些文章说这个间隙是6px,但我觉得应该是一个空格的宽度. 这里以inline-block ...

  4. img之间的间隙问题

    前言:关于基线(base line),中线(middle line),行高(line height)的了解还是比较浅的,所以引用前辈的成果,稍带解释下 1)行高:两行文字之间"基线" ...

  5. 多个Img标签之间的间隙处理方法

    1.多个标签写在一行 <img src="/i/eg_tulip.jpg" alt="郁金香" height="100px"/> ...

  6. 当li设置为line-block时,元素之间出现间隙的原因和解决方法

    原因 因为浏览器默认把inline元素之间的空白符(Tab.空格.换行)渲染成一个空格.而如下述代码,两个li元素之间的换行符被渲染成一个空格,则元素之间产生了间隙. 用Chrome浏览器将场景模拟出 ...

  7. [原创]ie6,7中td和img之间有间隙

    情形描述 开发工具:VS2010: 浏览器版本:IE6以上,火狐,谷歌: 页面布局设计:Table+Img布局: 项目预览问题:火狐,谷歌,IE8以上未出现问题,IE6,IE7图片之间有间隙. 分析原 ...

  8. 【Web】[原创]ie6,7中td和img之间有间隙

    情形描述 开发工具:VS2010: 浏览器版本:IE6以上,火狐,谷歌: 页面布局设计:Table+Img布局: 项目预览问题:火狐,谷歌,IE8以上未出现问题,IE6,IE7图片之间有间隙. 分析原 ...

  9. 如何消除inline-block元素之间的间隙?

    一.问题现象 在CSS布局中,如果我们想要将多个行内块元素并排,会发现同行显示的inline-block元素之间会出现一定的空隙,这就是换行符/空格导致的,叫做换行符/空格间隙. 1 <!DOC ...

随机推荐

  1. TODO Auto-generated method stub

    在 菜单栏中 Window --> Preferences -->Java -->Code Style -->Code Templates--> Code --> ...

  2. Open-Drain与Push-Pull

    GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出.(General Purpose Input Output,简称为GPIO或总线扩展器,利用工业标准I2C.SMBus?或SPI?接口简 ...

  3. asm createdisk时提示没有权限

    [root@linux Packages]# /etc/init.d/oracleasm createdisk asm1 /dev/sdg1Marking disk "asm1" ...

  4. JNI环境搭建,CDT, cygwin,NDK

    1.为eclipse增加c和c++的开发插件 下载地址:http://www.eclipse.org/cdt/downloads.php 2,安装cygwin Ndk需要运行在linux环境下,cyg ...

  5. ubuntu14.04网络设置

    修改ip: /etc/network/interfaces

  6. JAVA设计模式之工厂方法模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述工厂方法模式的: 工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymor ...

  7. throw和throws的区别

    1.      作用不同: throw用于在程序中抛出异常;throws用于声明在该方法内抛出异常, 2.      使用位置不同:throw位于方法体内部,可以作为单独语句使用,throws必须跟着 ...

  8. makefile学习小结

    =============2016/08/15================ 上午完成makefile的试验,缩短了代码量,现在make强大,有缺省的变量,能自己推导关系,不需要gcc –MM -M ...

  9. iOS 调用拍照、选择本地相册、上传功能---未完善。

    1.新建viewController 拖入一个Button,添加点击事件,使用代理方法 <UIActionSheetDelegate,UIImagePickerControllerDelegat ...

  10. asp.net前台绑定时间格式时,定义时间格式

    <%#Eval("news_time","{0:yyyy-MM-dd}") %><%#((DateTime)Eval("news_t ...