如何删除内联/内联块元素之间的空间?


1066

鉴于此HTML和CSS:

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

结果,SPAN元素之间将有4像素宽的空间。

演示: http //jsfiddle.net/dGHFV/

我了解为什么会发生这种情况,并且我也知道可以通过删除HTML源代码中SPAN元素之间的空白来摆脱该空间,如下所示:

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

但是,我希望找到一种不需要篡改HTML源代码的CSS解决方案。

我知道如何使用JavaScript解决此问题-通过从容器元素(该段落)中删除文本节点,如下所示:

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

演示: http //jsfiddle.net/dGHFV/1/

但是,仅使用CSS即可解决此问题吗?


见我的答案在这个问题上全套的相关如今选项:stackoverflow.com/questions/14630061/...
ktamlyn


Answers:


1006

由于此答案已变得非常流行,因此我将对其进行大量重写。

我们不要忘记提出的实际问题:

如何删除内联块元素之间的空间?我希望找到一种不需要篡改HTML源代码的CSS解决方案。可以仅使用CSS来解决此问题吗?

有可能解决这个问题单独CSS,但目前还没有完全强大的CSS修复。

我最初回答中的解决方案是添加font-size: 0到父元素,然后在子元素上声明一个明智font-size的选择。

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

在所有现代浏览器的最新版本中均可使用。它可以在IE8中使用。它在Safari 5 不起作用,但在Safari 6中起作用。Safari 5几乎是无效的浏览器(2015年8月为0.33%)。

相对字体大小的大多数可能问题并不复杂解决。

但是,虽然如果您特别需要仅CSS修复,这是一个合理的解决方案,但是如果您可以自由更改HTML(与我们大多数人一样),那么我不建议您这样做。


作为一名经验丰富的Web开发人员,我实际上是为解决此问题而做的:

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

恩,那就对了。我删除了inline-block元素之间HTML中的空格。

这简单。这很简单。它无处不在。这是务实的解决方案。

有时您确实必须仔细考虑空格的来源。将用JavaScript附加另一个元素会添加空格吗?不,如果操作正确,则不会。

让我们通过一些新的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>
    
  • 或者,甚至可以完全跳过某些结束标记(所有浏览器都可以):

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

现在,我已经用“用三十种方法删除空白的一千种不同方法”使您无聊了,希望您已经忘记了font-size: 0


或者,您现在可以使用flexbox来实现以前可能用于inline-block的许多布局:https : //css-tricks.com/snippets/css/a-guide-to-flexbox/


7
它适用于FF3.6,IE9RC,O11,Ch9。然而,在Safari 5仍然存在1px的巨大差距:(
森那维达斯

7
@thirtydot你能检查一下这个答案的评论吗?这可能是因为这font-size:0招毕竟不是个好主意......
森那维达斯

25
我知道发布者正在寻找CSS解决方案,但是该解决方案-迄今为止获得最多投票(我撰写本文时为30票对5票)-具有强大的副作用,甚至无法在跨浏览器中使用。在这一点上,简单地删除HTML中有问题的空格更为实用。
Steph Thirion

10
仅当您不使用适用于您的集装箱尺寸的EM时,此解决方案才有效
meo 2012年

6
这会破坏具有相对字体大小的子元素。
丹尼尔(Daniel)

156

对于符合CSS3的浏览器,有 white-space-collapsing:discard

参见:http : //www.w3.org/TR/2010/WD-css3-text-20101005/#white-space-collapsing


您是否要使用trim-inner而不是discard
spb

49
这已从“文本级别3”中删除,但“文本级别4”具有。已经是2016年了,仍然没有支持。text-space-collapse:discard
Oriol

1
@MrLister:其他解决方案并非在所有情况下都有效。例如,我不知道任何解决方案,该解决方案将删除中的尾随空格<p>A long text...</p>,其中开始和结束标签位于文本内容之外的单独行上。我一直在这样做,以使HTML文件保持整洁和可读性。
罗伯特·库兹尼尔

@Robertfloat
Lister先生,

@MrLister Floating确实删除了尾随空间,但具有严重的副作用-完全更改了元素在容器布局中的位置。当浮动元素破坏我的布局时(通常是这种情况),我该怎么做?
罗伯特·库兹尼尔

94

编辑:

今天,我们应该只使用Flexbox


旧答案:

好的,尽管我同时对font-size: 0;not implemented CSS3 feature答案都进行了投票,但在尝试后我发现它们都不是真正的解决方案

实际上,甚至没有一种没有严重副作用的解决方法。

然后,我决定inline-blockHTML源(JSP)中删除 div 之间的空格(此答案是关于该参数的),将其变为

<div class="inlineBlock">
    I'm an inline-block div
</div>
<div class="inlineBlock">
    I'm an inline-block div
</div>

对此

<div class="inlineBlock">
    I'm an inline-block div
</div><div class="inlineBlock">
    I'm an inline-block div
</div>

很难看,但是可以用。

但是,等一下...如果我发生什么在我的div的Taglibs loopsStruts2JSTL,等...)?

例如:

<s:iterator begin="0" end="6" status="ctrDay">
    <br/>
    <s:iterator begin="0" end="23" status="ctrHour">
        <s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}">
            <div class="inlineBlock>
                I'm an inline-block div in a matrix 
                (Do something here with the pushed object...)
           </div>
       </s:push>
    </s:iterator>
</s:iterator>

内联所有这些东西绝对是不可思议的,这意味着

<s:iterator begin="0" end="6" status="ctrDay">
    <br/>
    <s:iterator begin="0" end="23" status="ctrHour"><s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}"><div class="inlineBlock>
                I'm an inline-block div in a matrix             
                (Do something here with the pushed object...)
           </div></s:push></s:iterator>
</s:iterator>

难以阅读,难以维护和理解等...

我发现的解决方案:

使用HTML注释将一个div的结尾连接到下一个div的开头!

<s:iterator begin="0" end="6" status="ctrDay">
   <br/>
   <s:iterator begin="0" end="23" status="ctrHour"><!--
    --><s:push value="%{days[#ctrDay.index].hours[#ctrHour.index]}"><!--
        --><div class="inlineBlock>
                I'm an inline-block div in a matrix             
                (Do something here with the pushed object...)
           </div><!--
    --></s:push><!--
--></s:iterator>
</s:iterator>

这样,您将获得可读且正确缩进的代码。

而且,作为积极的副作用HTML source,尽管出现了空注释,但会正确缩进;

让我们来看第一个例子。以我的拙见,这是:

    <div class="inlineBlock">
        I'm an inline-block div
    </div><!--
 --><div class="inlineBlock">
        I'm an inline-block div
    </div>

比这更好:

    <div class="inlineBlock">
         I'm an inline-block div
    </div><div class="inlineBlock">
         I'm an inline-block div
    </div>

1
请注意,这也可能会破坏编辑器中的代码折叠功能。
jknotek '18年


42

所有的空间消除技术display:inline-block都是令人讨厌的骇客...

使用Flexbox

太棒了,解决了所有这些内联块布局bs,并且到2017年为止,它具有98%的浏览器支持(如果您不关心旧IE的话,更多)。


1
可能是讨厌的骇客,但font-size:0可以在100%的浏览器上使用,并应用display:inline-flex仍然不能消除多余的空格,即使在支持它的浏览器上也是如此!
帕特里克

@patrick Flexbox绝对可以解决问题,您只是做错了。inline-flex并不意味着内联显示flex项目-它仅适用于容器。参见stackoverflow.com/a/27459133/165673
Yarin

7
“ font-size:0” 不适用于100%浏览器。(最小字体大小浏览器设置)。这个答案真的很好。
ViliusL

35

添加display: flex;到父元素。这是带有前缀的解决方案:

简化版👇

p {
  display: flex;
}

span {
  width: 100px;
  background: tomato;
  font-size: 30px;
  color: white;
  text-align: center;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>


用前缀修复

p {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
span {
  float: left;
  display: inline-block;
  width: 100px;
  background: blue;
  font-size: 30px;
  color: white;
  text-align: center;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>


1
这是一个很好的答案!不过,我认为将简化版本放在首位会很整洁,因此这是读者首先看到的内容。甚至删除非简化版本。
Stefnotch,

1
@Stefnotch完成✅感谢您的宝贵建议:-)
密苏里州

31

这是我在相关内容上给出的相同答案:显示:内联块-那是什么空间?

实际上,有一种非常简单的方法可以从内联块中删除空白,这既简单又语义。它被称为具有零宽度空格的自定义字体,它允许您使用非常小的字体在字体级别折叠空白(当行内元素位于单独的行时由浏览器添加的空白)。声明字体后,只需更改font-family容器上的,然后再次更改子级,瞧。像这样:

@font-face{ 
    font-family: 'NoSpace';
    src: url('../Fonts/zerowidthspaces.eot');
    src: url('../Fonts/zerowidthspaces.eot?#iefix') format('embedded-opentype'),
         url('../Fonts/zerowidthspaces.woff') format('woff'),
         url('../Fonts/zerowidthspaces.ttf') format('truetype'),
         url('../Fonts/zerowidthspaces.svg#NoSpace') format('svg');
}

body {
    font-face: 'OpenSans', sans-serif;
}

.inline-container {
    font-face: 'NoSpace';
}

.inline-container > * {
    display: inline-block;
    font-face: 'OpenSans', sans-serif;
}

适合品尝。这是我刚刚在font-forge中制作并使用FontSquirrel Webfont生成器转换的字体的下载。花了我5分钟。@font-face包含css 声明:压缩零宽度空格字体。它位于Google云端硬盘中,因此您需要点击文件>下载以将其保存到计算机中。如果将声明复制到主CSS文件中,则可能还需要更改字体路径。


1
我看到您在我认为的CSS技巧中发布了此信息,对我来说,这是一个很好的答案。它轻巧,易于实现且可以跨浏览器浏览(据我的测试显示)。我完全使用flexbox,直到我意识到Firefox flex-wrap至少要到v28(srsly?)才支持,但是直到那时这都是一个完美的后备。
indextwo 2014年

16
这是我很长时间以来看到的最严重的过度杀伤情况。下载整个字体只是为了删除空格?真是的
李斯特先生,2015年

3
@MrLister您确实知道这样的字体文件很小吗?它里面没有任何字形。我认为无论如何还是要包含base64编码,因此我们也摆脱了该请求。
罗伯特·科里特尼克'18

这具有与图标字体相同的致命缺陷,即,当Web字体被阻止(例如,出于带宽或安全性原因)或被自定义字体覆盖(例如,由于健康原因,例如诵读困难等)时,它将不起作用。
tomasz86

22

基于CSS Text Module Level 3的另外两个选项(而不是white-space-collapsing:discard从规范草案中删除):

  • word-spacing: -100%;

从理论上讲,它应该完全满足需要-将“单词”之间的空格缩短100%的空格字符宽度,即为零。但不幸的是,它似乎无法在任何地方使用,并且此功能被标记为“有风险”(也可以从规范中删除)。

  • word-spacing: -1ch;

它通过数字“ 0”的宽度缩短字间间隔。在等宽字体中,它应完全等于空格字符(以及其他任何字符)的宽度。它可以在Firefox 10 +,Chrome 27+和IE 9+中运行。

小提琴


+1表示单词间距,尽管-0.5ch是正确的值,但-1ch文本不带空格将不可读,-0.5ch的行为与font-size:0;相同。在文本元素上具有明确的设置大小。:)
Dennis98

6
@ Dennis98,-1ch仅适用于等宽字体(例如Courier New),因为它们的所有字符都具有相同的宽度,包括' ''0'。在非等宽字体中,在' ''0'字符的宽度之间没有完全合适的魔术比例 ,因此ch根本没有多大帮助。
Ilya Streltsyn

代替word-spacing,我们可以使用我的答案中letter-spacing所示的任意大负值
S.Serpooshan

20

不幸的是,这是2019年,white-space-collapse但仍未实施。

同时,指定父元素font-size: 0;并在子元素上设置font-size。这应该可以解决问题


16

使用flexbox并针对旧版浏览器进行后备(来自以上建议):

ul {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}

13

简单:

item {
  display: inline-block;
  margin-right: -0.25em;
}

无需触摸父元素。

唯一的条件是:不得定义项目的字体大小(必须等于父项的字体大小)。

0.25em 是默认值 word-spacing

W3Schools-字距属性


0.25em不是“默认单词间距”,而是Times New Roman字体中空格字符的宽度,而恰好是某些流行的OS中的默认字体。诸如Helvetica之类的其他流行字体通常具有较宽的空格字符,因此仅从它们中删除0.25em不足以消除这些空白。
Ilya Streltsyn

12

font-size:0; 管理起来可能有点棘手...

我认为以下几行代码比其他任何方法都更好,更可重复使用,并且节省时间。我个人使用此:

.inline-block-wrapper>.inline-block-wrapper,
.inline-block-wrapper{letter-spacing: -4px;}
.inline-block-wrapper>*{letter-spacing: 0;display: inline-block;}

/* OR better shorter name...*/
.items>.items,
.items{letter-spacing: -4px;}
.items>*{letter-spacing: 0;display: inline-block;}

然后您可以按以下方式使用它...

<ul class="items">
   <li>Item 1</li>
   <li>Item 2</li>
   <li>Item 3</li>
</ul>

据我所知(可能是错误的),但是所有浏览器都支持此方法。

说明

可以像您预期的那样正常工作(也许-3px可能更好)。

  • 您复制并粘贴代码(一次)
  • 然后在您的html上,仅class="items"在每个内联块的父级上使用。

您无需为新的内联块返回css,并添加另一个css规则。

一次解决两个问题。

另请注意>(大于符号),这意味着* /所有子代均应为内联块。

http://jsfiddle.net/fD5u3/

注意:我进行了修改,以适应当包装器有子包装器时继承字母间距。


而不是-4pxletter-spacing这可能是不够的,大字体大小如:看到这个小提琴,我们可以使用一个较大的值在我的岗位
S.Serpooshan

12

但是,从技术上讲,并不是对以下问题的答案:“如何删除内联块元素之间的空间?”

您可以尝试flexbox解决方案并应用下面的代码,空格将被删除。

p {
   display: flex;
   flex-direction: row;
}

您可以通过以下链接了解更多信息:https : //css-tricks.com/snippets/css/a-guide-to-flexbox/


虽然从技术上讲不是“我可以用内联块来做这件事”的答案吗?在我看来,这似乎是一个优雅的解决方案……
Lucas

10

我不太确定是要形成两个没有间距的蓝色范围还是要处理其他空白,但是如果您要消除该间距:

span {
    display: inline-block;
    width: 100px;
    background: blue;
    font-size: 30px;
    color: white;
    text-align: center;

    float: left;
}

并做了。


9

通常,我们在不同的行中使用类似的元素,但是如果display:inline-block在同一行中使用标签,则会删除空格,而在不同的行中则不会。

标签在不同行中的示例:

p span {
  display: inline-block;
  background: red;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>

同一行中的标签示例

p span {
  display: inline-block;
  background: red;
}
<p>
  <span> Foo </span><span> Bar </span>
</p>


另一种有效的方法是CSS作业,该作业用于font-size:0父元素,并font-size根据需要分配给子元素。

p {
  font-size: 0;
}
p span {
  display: inline-block;
  background: red;
  font-size: 14px;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>

根据整个应用程序的不同,上述方法可能无法在某处工作,但是最后一种方法是针对这种情况的万无一失的解决方案,可以在任何地方使用。


这种方法的缺点是我们需要知道并重复默认的字体大小(例如14px),以将其在子元素中设置回正常!
S.Serpooshan

8

我现在遇到了这个问题,从中font-size:0;我发现在Internet Explorer 7中问题仍然存在,因为Internet Explorer认为“字体大小0?!?!WTF是您疯子吗?”。-因此,就我而言,我重置了Eric Meyer的CSS,font-size:0.01em;从Internet Explorer 7到Firefox 9,我的像素相差1个像素,因此,我认为这可以解决。


7

p {
  display: flex;
}
span {
  float: left;
  display: inline-block;
  width: 100px;
  background: red;
  font-size: 30px;
  color: white;
}
<p>
  <span> hello </span>
  <span> world </span>
</p>


1
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中加入解释性注释,这会降低代码和解释的可读性!
Ashish Ahuja,

我猜想,如果不支持floatand display:inline-blockfor spans的话,它是后备的flex,但是float会有效地丢弃的影响inline-block,因此后者似乎是多余的。
Ilya Streltsyn

6

我最近一直在解决这个问题,而不是font-size:0先设置父容器,letter-spacing:-.25em然后再将孩子设置回合理的值,而不是先设置父容器,然后再将孩子设置回合理的值letter-spacing:normal

在另一个话题中,我看到一个评论者提到的font-size:0内容并不总是理想的,因为人们可以在其浏览器中控制最小字体大小,从而完全消除了将字体大小设置为零的可能性。

无论指定的字体大小是100%,15pt还是36px,使用ems似乎都可以工作。

http://cdpn.io/dKIjo


在Android版Firefox中,我看到两个框之间有1px的间距。
森那维达斯

5

我认为有一个非常简单/旧的方法,所有浏览器甚至IE 6/7都支持。我们可以简单地letter-spacing在父normal元素中设置一个较大的负值,然后再将其设置回子元素:

body { font-size: 24px }
span { border: 1px solid #b0b0c0; } /* show borders to see spacing */

.no-spacing { letter-spacing: -1em; } /* could be a large negative value */
.no-spacing > * { letter-spacing: normal; } /* => back to normal spacing */
<p style="color:red">Wrong (default spacing):</p>

<div class="">
  <span>Item-1</span>
  <span>Item-2</span>
  <span>Item-3</span>
</div>

<hr/>

<p style="color:green">Correct (no-spacing):</p>

<div class="no-spacing">
  <span>Item-1</span>
  <span>Item-2</span>
  <span>Item-3</span>
</div>


同样的事情在这里发生,您需要设置letter-spacing:normal所有子元素。
Gaurav Aggarwal

@GauravAggarwal但是letter-spacing是的99.99%normal。字体大小没有固定值,在很大程度上取决于设计。根据字体家族和其他因素,它可能是一个小值或一个大值...我一生中从未记得为看到/使用一个特殊值(0 / normal除外)letter-spacing,所以我认为它更安全,更好的选择
S.Serpooshan

我不同意...对所有元素使用正常的字母间距并也使用字体大小(如果需要)根本没有用,因为您在需要更改字体大小的地方编写了双重代码。使用字体大小不会产生双重代码,可以用于标准大小和任何其他自定义大小。我建议你做谷歌,并检查使用字体大小是目前最可接受的事情。解决方案随时间而改变:)
Gaurav Aggarwal

我不明白您的意思是“ ...而且也使用字体大小(如果需要)根本没有用,因为您在需要更改字体大小的地方写了双重代码。” 在我的帖子中,没有字体大小设置!我所做的只是字母间距,通常没人在他的CSS中设置它(这总是正常的)。回答,因为我们不更改字体大小,所以我们无需知道原始字体大小即可将其重新设置
S.Serpooshan

我想这种方法以前没有流行,因为它在Opera / Presto中不起作用。当前,我们还有不需要这种工作方式的其他选项,例如,使用Flexbox代替内联块。
Ilya Streltsyn


3

使用PHP括号:

ul li {
  display: inline-block;
}
    <ul>
        <li>
            <div>first</div>
        </li><?
        ?><li>
            <div>first</div>
        </li><?
        ?><li>
            <div>first</div>
        </li>
    </ul>


2

我将对user5609829的答案进行一些扩展,因为我相信这里的其他解决方案太复杂/工作量太大。将a margin-right: -4px应用于内联块元素将消除间距,并且所有浏览器都支持。在这里查看更新的小提琴。对于那些关注使用切缘阴性,尝试给这个一读。


4
如果用户更改了浏览器的默认字体大小,则此功能将无效。最好使用-0.25em。
马丁·施耐德


1

我找到了一个纯CSS解决方案,该解决方案在所有浏览器中都非常适合我:

span {
    display: table-cell;
}

这个问题是关于内联块的。
马丹·班达里

@MadanBhandari正确,但似乎消除了所有肮脏的hacks的需要。
戴维

1

添加white-space: nowrap到容器元素:

CSS:

* {
    box-sizing: border-box;
}
.row {
    vertical-align: top;
    white-space: nowrap;
}
.column{
    float: left;
    display: inline-block;
    width: 50% // Or whatever in your case
}

HTML:

<div class="row">
    <div class="column"> Some stuff</div>
    <div class="column">Some other stuff</div>
</div>

这是柱塞


没有浮子就无法工作-浮子遗失了。因此,“空白:nowrap”似乎从来不是一个可行的答案。
David

1

有很多类似的解决方案font-size:0word-spacingmargin-leftletter-spacing等等。

通常我更喜欢使用,letter-spacing因为

  1. 当我们分配的值大于多余空间的宽度(例如-1em)时,似乎没问题。
  2. 但是,它不会是好的与word-spacingmargin-left我们一样设定值越大-1em
  3. 使用font-size时,我们尝试使用不方便emfont-size单位。

因此,letter-spacing似乎是最佳选择。

但是我要警告你

当您使用时letter-spacing,最好-0.3em还是-0.31em不要使用其他人。

* {
  margin: 0;
  padding: 0;
}
a {
  text-decoration: none;
  color: inherit;
  cursor: auto;
}
.nav {
  width: 260px;
  height: 100px;
  background-color: pink;
  color: white;
  font-size: 20px;
  letter-spacing: -1em;
}
.nav__text {
  width: 90px;
  height: 40px;
  box-sizing: border-box;
  border: 1px solid black;
  line-height: 40px;
  background-color: yellowgreen;
  text-align: center;
  display: inline-block;
  letter-spacing: normal;
}
<nav class="nav">
    <span class="nav__text">nav1</span>
    <span class="nav__text">nav2</span>
    <span class="nav__text">nav3</span>
</nav>

如果您使用的是Chrome(测试版本66.0.3359.139)或Opera(测试版本53.0.2907.99),则可能看到的是:

在此处输入图片说明

如果您使用的是Firefox(60.0.2),IE10或Edge,则可能看到的是:

在此处输入图片说明

那很有意思。因此,我检查了mdn-letter-spacing并发现了这一点:

长度

除了字符之间的默认间隔外,还指定额外的字符间间隔。值可能为负,但可能存在特定于实现的限制。用户代理不得进一步增加或减少字符间空间以证明文本合理。

看来这就是原因。


1

添加letter-spacing:-4px;对父母p的CSS,并添加letter-spacing:0px;到您span的CSS。

span {
  display:inline-block;
  width:100px;
  background-color:palevioletred;
  vertical-align:bottom;
  letter-spacing:0px;
}

p {
  letter-spacing:-4px;
}
<p>
    <span> Foo </span>
    <span> Bar </span>
</p>


1

我以为我会在这个问题上添加一些新内容,尽管当前提供的许多答案绰绰有余,而且有一些新的CSS属性可以实现非常干净的输出,并在所有浏览器中都提供全面支持,而几乎没有没有“骇客”。这的确可以避免,inline-block但可以为您提供与所要求的问题相同的结果。

这些CSS属性是 grid

除了IE以外,CSS Grid受到高度支持(CanIUse),而IE仅需要一个-ms-前缀即可使其工作。

CSS电网也非常灵活,并采取所有好的部分tableflex以及inline-block元素和带领他们到一个地方。

创建时,grid您可以指定行和列之间的间隔。默认间隙已经设置为,0px但是您可以将该值更改为任意值。

为了简短起见,下面是一个相关的工作示例:

body {
  background: lightblue;
  font-family: sans-serif;
}

.container {
  display: grid;
  grid-template-columns: 100px 100px;
  grid-column-gap: 0; /* Not needed but useful for example */
  grid-row-gap: 0; /* Not needed but useful for example */
}

.box {
  background: red;
}
.box:nth-child(even) {
  background: green;
}
<div class="container">
  <div class="box">
    Hello
  </div>
  <div class="box">
    Test
  </div>  
</div>


只需评论指出display:grid元素的内容已被阻塞,因此显示的内容就不那么多了:grid可以帮助您处理内联块布局,但是它可以让您替换为inline-block可以控制“装订线”的对象这个问题想。另外,我真的很惊讶,在此之前还没有人响应CSS Grid Layout解决方案。
TylerH

将更清楚地说明这是从的更改inline-block。是的,我也很惊讶,猜想grid以前没有真正有经验的人。一直在玩弄它,并遇到了这个问题,所以想为什么不去:P
Stewartside

0

我发现的另一种方法是,将行的第一个元素以外的margin-left用作负值。

span { 
 display:inline-block;
 width:100px;
 background:blue;
 font-size:30px;
 color:white; 
 text-align:center;
 margin-left:-5px;
}
span:first-child{
 margin:0px;
}

0

尝试删除inline-blocks 之间的空格的每个问题似乎都像一个<table>在我 ...

尝试这样的事情:

p {
  display: table;
}
span {
  width: 100px;
  border: 1px solid silver; /* added for visualization only*/
  display: table-cell;
}
<p>
  <span> Foo </span>
  <span> Bar </span>
</p>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.