鉴于这种HTML和CSS:

span {
    display:inline-block;
    width:100px;
    background-color:palevioletred;
}
<p>
    <span> Foo </span>
    <span> Bar </span>
</p>

As a result, there will be a 4 pixel wide space between the SPAN elements.

Demo: http://jsfiddle.net/dGHFV/

我理解为什么会发生这种情况,我也知道我可以通过删除HTML源代码中SPAN元素之间的空白来消除这种空间,比如:

<p>
    <span> Foo </span><span> Bar </span>
</p>

然而,我希望CSS解决方案不需要篡改HTML源代码.

我知道如何用JavaScript解决这个问题——从容器元素(段落)中删除文本 node ,如下所示:

// jQuery
$('p').contents().filter(function() { return this.nodeType === 3; }).remove();

Demo: http://jsfiddle.net/dGHFV/1/

但是,这个问题单靠CSS就能解决吗?

推荐答案

或者,你should now use flexbox来实现很多你以前可能用过的内联挡路的布局


由于这个答案已经变得相当流行,我将对其进行重大重写.

我们不要忘记被问到的实际问题:

如何删除inline-block elements之间的空格?我希望

单独使用CSS可以解决这个问题,但是没有completely个健壮的CSS修复程序.

我在最初的回答中得到的解决方案是在父元素上加上font-size: 0,然后在子元素上声明一个合理的font-size.

http://jsfiddle.net/thirtydot/dGHFV/1361/

这适用于所有现代浏览器的最新版本.它在IE8中工作.它在Safari 5中不起作用,但在Safari 6中起作用.Safari 5几乎是一款死气沉沉的浏览器(0.33%, August 2015).

相对字体大小可能出现的大多数问题修复起来并不复杂.

然而,虽然这是一个合理的解决方案,如果你只修改CSS,这不是我推荐的,如果你可以自由地修改你的HTML(就像我们大多数人一样).


这就是我,作为一名相当有经验的Web开发人员,为了解决这个问题而实际做的事情:

<p>
    <span>Foo</span><span>Bar</span>
</p>

是的,这就对了.我删除了HTML语言中内联挡路元素之间的空格.

很简单.这很简单.它在任何地方都有效.这是务实的解决方案.

有时候,你必须仔细考虑空白的来源.Will appending another element with JavaScript add whitespace?不,如果你做得好就不会.

让我们开始一段神奇的旅程,通过一些新的HTML,以不同的方式删除空白:

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
  • 您可以这样做,就像我通常做的那样:

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

http://jsfiddle.net/thirtydot/dGHFV/1362/

  • 或者,这个:

     <ul>
         <li>Item 1</li
         ><li>Item 2</li
         ><li>Item 3</li>
     </ul>
    
  • 或者,使用注释:

     <ul>
         <li>Item 1</li><!--
         --><li>Item 2</li><!--
         --><li>Item 3</li>
     </ul>
    
  • 或者,如果您使用的是PHP或类似软件:

     <ul>
         <li>Item 1</li><?
         ?><li>Item 2</li><?
         ?><li>Item 3</li>
     </ul>
    
  • 或者,you can甚至完全跳过certain个结束标记(所有浏览器都可以做到这一点):

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

现在,我已经用"一千种不同的方法消除空格,到三十点"让你无聊得要死,希望你已经把font-size: 0种方法都忘得一干二净了.

Html相关问答推荐

如何访问django + tailwind中的媒体文件夹

如何使用bslb设置可导航页面侧边栏的样式

如何找到FontAwese图标的Unicode值?

R-markdown中的非顺序列表

当光标悬停在(相同)父元素上方时,为多个子元素创建不同的过渡动画

当溢出到滚动条中时, bootstrap 按钮样式会更改

如何影响flex项目中的flex-gap收缩顺序和文本换行顺序?

在Hero部分中同时zoom 背景图像和形状的问题

当文本添加到元素中时,将元素拉到页面上

有没有什么方法可以很容易地给一个SVG一个插框阴影?

如何防止滑动滚动元素时touch 屏出现空白区域?

如何在 Bootstrap 5 中将两个导航栏元素放在末尾?

Swift 以编程方式在 YouTube 嵌入视频中进入全屏

添加带有悬停动画的喜欢图标

为什么可滚动弹性项目需要 flex-basis: 0 ?

margin-top 未应用于无序列表的第一项

如何将内容放置在侧边栏旁边?

本地和在jsfiddle上页面工作正常,但在GitHub上无法运行.

如何在div中设计伪元素?

html元素可以被css跳过吗?