干掉Inline-Block中间的空格

我在前端开发过程中经常遇到两个Inline-Block元素中间出现空格的问题,特别是横向导航栏,于是打算写一篇文章记录一下。

问题大概是这样的:

我写了HTML,CSS代码如下

<ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
</ul>
li {
  display: inline-block;
  省略掉其他代码...
}

结果悲剧是这样的…

当然这不是我想看到的…于是google了下,大概是这样的:

Inline-block中间的间隔就像英文单词之间的空格,为了区分开每个block,所以这不算是‘bug’。

但是这不是我们想要的效果对吧~解决方法如下:

去掉空格

既然原因知道了,那就对症下药删掉空白不就行了,修改html代码变成这样。

<ul>
      <li>1</li><li>2</li><li>3</li>
</ul>

元素与元素之间的空白不见了,问题也就解决了。

不过代码看上去有点丑,再优化一下。

<ul>
      <li>1</li><!--
   --><li>2</li><!--
   --><li>3</li>
</ul>

看上去整洁一下了吧!

移动子元素

还可以通过移动子元素覆盖掉空格。根据间隔的大小,移动相应的距离就能轻松覆盖掉。简单地使用margin-right.

li {
    margin-right: -5px;
}

margin-right设置为负值,会导致右边的元素全部左移动。所以每个元素都设置属性margin-right就很巧妙地覆盖掉了。当然5px是跟你的font属性有关的。

不写结束标签

这算是一种比较奇葩的做法。在HTML5下不会有问题,但是不推荐使用。

<ul>
      <li>1
       <li>2
        <li>3
</ul>

实验过,发现使用span等标签会出现嵌套问题。

设置font-size为0

em…一开始在群上问的时候,很多人都推荐这个方法。可是用起来很别扭ei。

ul {
  font-size: 0px;
}
ul li {
  font-size: 16px;
}

使用Flexbox

我相信flexbox将来肯定会发光发亮,可是现在兼容性不强~


ul.flexbox {
  display: -webkit-box;      /* OLD - iOS 6-, Safari 3.1-6 */
  display: -moz-box;         /* OLD - Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;      /* TWEENER - IE 10 */
  display: -webkit-flex;     /* NEW - Chrome */
  display: flex;            /* NEW, Spec - Opera 12.1, Firefox 20+ */

  -webkit-align-items: center;
          align-items: center;
  -webkit-justify-content: center;
          justify-content: center;
}

其他

还有其他方法,比如使用float代替…不过有时候并不能解决我们的问题。所以就不说了。

上面的几种方法,比较中意的是使用<!-- -->注释掉。这样做不会增加多余的css代码,而且兼容性很强。flexbox用起来很爽,但是现在还用不上。

最后

最后的最后附上codepen。

See the Pen GJQywQ by Helkyle (@HelKyle) on CodePen.

嗯,写完以后不用再去google了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 01:35:20

干掉Inline-Block中间的空格的相关文章

CSS display:inline|block|inline-block差异

display:inline|block|inline-block三属性的区别和联系,block就是将元素显示为块级元素,inline就是将元素 显示为行内元素,CSS display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行内,允许空格. 详解CSS display:inline|block|inline-block的区别 ◆CSS display:block CSS display:block就是将元素显示为块级元素. blo

关于 inline block 元素之间的空格

本篇文章由:http://xinpure.com/about-the-inline-block-element-between-spaces/ 说点什么 display: inline-block 属性很好的避免了元素的浮动问题,但是会有点小问题,就是 inline-block 元素间的回车会被显示为一个空格.然而,我们写代码时,都是用回车来格式化的... 最简单的方法就是把 inline-block 元素之间的回车删除,就是代码显示有点不美观,影响阅读. 方法总结 以下方法不保证浏览器兼容性问

inline,block,inline-block解析

display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. display:inline就是将元素显示为行内元素. inline元素的特点是:  和其他元素都在一行上: 高,行高及顶和底边距不可改变: 宽度就是它的文字或图

inline block inline-block总结

一.block表示块级元素,其元素通常会单独成一块,独占一行: 二.inline表示内联元素,不会产生换行,其排版会在一行显示,直到一行被占满. 三.常见的块级元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等:常见的内联元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR        等. 四.一般使用display:block与display:inline来改变元素的

display:inline/block/inline-block

display:inline; 内联元素,简单来说就是在同一行显示.display:block; 块级元素,简单来说就是就是有换行,会换到第二行.display:inline-block; 就是在同一行内的块级元素. 说概念太模糊,来个真实案例吧. <a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a><a href=&qu

[CSS3] CSS Display Property: Block, Inline-Block, and Inline

Understanding the most common CSS display types of block, inline-block, and inline will allow you to get the most out of your HTML and use CSS Frameworks like Bootstrap to their fullest. Takeway: Inline: Can NOT add height and width. But can add marg

Block实现代理/通知效果

例子1:A控制器->跳转—>B控制器 , 假设想从B控制器回传数组给A控制器 实现:B控制器.h文件定义一个block参数,.m文件执行block,A控制器设置block内容 B.h文件//创建block块 @property(nonatomic,copy) void (^Block)(NSArray *array); B.m文件 //执行block块!self.Block? (此处为空格):Blcok(array); //判断是否存在Block,存在则执行Block,并且将数组array传递

css中display常用属性详解之Block(一)

用了几年的css了,css中inline | block |inline-block|table|flex从来没有做过系统的整理和分析,网上的分析文章也很多,零散. 今天有空,就在这做一下整理分析 block 解释:指定对象为块元素(占据一定矩形空间,可以通过设置高度.宽度.内外边距等属性,来调整的这个矩形的样) 特点:1.处于常规流中时,如果width没有设置,会自动填充满父容器  2.可以应用margin/padding  3.在没有设置高度的情况下会扩展高度以包含常规流中的子元素  4.处

第二节 css

在HTML中引入css方式总共有三种: 1.行内样式 1 <div> 2 <p style="color: green">我是一个段落</p> 3 </div> 行内样式 内接样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</

day14---html基础

本节内容: 一.HTML 二.CSS 三.JS HTML 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ****** - 数据库获取数据,然后替换到html文件的指定位置(Web框架) 3.本地测试 - 找到文件路径,直接浏览器打开 - pycharm打开测试 4.编写Html文件 - doctype对应关系 - html标签,标签内部可以写属性 ====> 只能有一个 - 注释: <!-- 注释的内容 --> 5