内联块列表项之间的空格

Tyl*_*ton 167 html css xhtml

可能重复:
内联块列表项中的不需要的边距
如何从HTML中删除"不可见空间"

为什么内联块列表项中有空格?无论我如何将我的列表项目放入菜单,我总是得到空格.

li {
  border: 1px solid black;
  display: inline-block;
  height: 25px;
  list-style-type: none;
  text-align: center;
  width: 50px;
}
ul {
  padding: 0;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

Kyl*_*yle 245

我见过这个并在之前回答过:

经过进一步的研究,我发现这inline-block是一个依赖于空格的方法,并且依赖于字体设置.在这种情况下,渲染4px.

为了避免这种情况,您可以li在一行中将所有s一起运行 ,或者阻止结束标记并像这样一起开始标记:

<ul>
        <li>
            <div>first</div>
        </li><li>
            <div>first</div>
        </li><li>
            <div>first</div>
        </li><li>
            <div>first</div>
        </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这里的例子.


正如其他答案和评论所述,解决此问题的最佳做法是添加font-size: 0;到父元素:

ul {
    font-size: 0;
}

ul li {
    font-size: 14px;
    display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)

这对HTML可读性更好(避免一起运行标记等).间距效果是由于字体的间距设置,因此您必须为内联元素重置它并为其中的内容重新设置它.

  • 实际上这是由于字间距,因此4px取决于字体设置.见http://jsfiddle.net/Cerebrl/Wt4hP/ (12认同)
  • 凯尔,你能不能更新你的答案,这样你就不会给人不正确的信息?内联块元素未添加4px边距.正如Anzeo所提到的,这是由于元素之间的空间."边缘"这个词在CSS中具有特定的含义,它可以误导其他人不理解问题的本质. (9认同)

Dav*_*rák 167

解:

ul {
    font-size: 0;
}

ul li {
    font-size: 14px;
    display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)

您必须将父字体大小设置为0

  • 缩小此方法的大小是你不能使用em或% (6认同)
  • 这是一个更优雅的解决方案,而不是在一行中删除所有`<li> /删除空格,因为每次都可能无法访问标记. (5认同)
  • 呵呵.我从来没想过那个.说得通.我没有提出这个答案的唯一原因是我不能在列表中使用百分比或ems作为我的UOM用于字体大小.我可以用JavaScript解决这个问题,但这并不理想. (4认同)
  • 很棒的解决方案,使用我复杂的2级水平弹出菜单. (4认同)
  • 这个技巧不适用于Safari (2认同)

小智 18

我将添加float左侧的CSS属性,如下所示.这摆脱了额外的空间.

ul li {
    float:left;
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道我迟到了派对,但这个解决方案,虽然它确实消除了`<li>之间的间距,但它引入了另一个潜在的问题:你无法集中和右对齐列表项.如果你试图在`<li>`上执行`float:right;`那么它们的顺序将被交换,这意味着:列表中的第一项是最后一项,第二项是最后一项,所以上. (8认同)

Ger*_*bus 17

实际上,这不是特定的display:inline-block,但也适用于display:inline.因此,除了DavidHorák的解决方案之外,这也有效:

ul {
    font-size: 0;
}
ul li {
    font-size: 14px;
    display: inline;
}
Run Code Online (Sandbox Code Playgroud)

  • 但是您不能在此解决方案中使用相对字体大小.但是,是的,我自己也想过这个.:) (2认同)

小智 5

另一个解决方案,类似于Gerbus的解决方案,但这也适用于相对字体大小调整.

ul {
    letter-spacing: -1em; /* Effectively collapses white-space */
}
ul li {
    display: inline;
    letter-spacing: normal; /* Reset letter-spacing to normal value */
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的解决方案.将font-size设置为零,即使只是为了UL,也会导致我的布局出现问题,因为我在某些地方使用了em-sizing. (2认同)