在使用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. NDK SO 库开发与使用中的 ABI 构架选择

    Bugtags V1.2.7 引入了 NDK SO 库,在集成的时候,遇到不同的 SO 库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载 ...

  2. Spring Boot 静态资源处理

    spring Boot 默认的处理方式就已经足够了,默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性. 建议使用Spring Boot 默认处理方式 ...

  3. div背景图片叠加

    .box1{   width: 500px;   height: 500px;   background: url("")no-repeat,url("")no ...

  4. JAVA 多线程和并发学习笔记(一)

    一.进程与线程 1. 进程 当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性 独立存在的实体,每个进程都有 ...

  5. DOCTYPE 中xhtml 1.0和 html 4.01区别分析

    前者相对于后者有以下特性: 1.所有的标记都都要闭合 所有的标记都要闭合,如果是单独不成对的标签,在标签最后加一个"/"来关闭它.例如: <h6>close tag & ...

  6. QTP全选页面的复选框

    Set glht= Browser("管理后台").Page("管理后台") Set Mydescription = description.Create()M ...

  7. 【EF学习笔记06】----------加载关联表的数据 延迟加载

    讲解之前,先来看一下我们的数据库结构:班级表 学生表 延迟加载 //延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from ...

  8. ubuntu mysql emma中文乱码问题解决

    ubuntu mysql emma中文乱码问题解决 emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python). apt-get安装emma ...

  9. Mysql 存储过程基本语法

    delimiter //一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行. 一.创建存储过程 1.基本语法: crea ...

  10. 内置对象(Session、Application、ViewState)

    内置对象:为了跨页面传值和状态保持.→HTTP的无状态性 [4.]Session:每一台电脑访问服务器,都会是独立的一套session,key值都一样,但是内容都是不一样的 以上所有内容,都跟cook ...