319

我有两个相同的内联块div元素,它们彼此相邻。然而,尽管边距设置为 0,但两个 div 之间似乎有一个 4 像素的神秘空间。没有影响它们的父 div - 发生了什么?

CSS

#container
{
    display:inline-block;
    position:relative;
    background:rgb(255,100,0);
    margin:0px;
    width:40%;
    height:100px;
}

分区问题

这就是我希望它看起来的样子:

它应该是什么样子

4

6 回答 6

638

在这种情况下,您的div元素已从block关卡元素更改为inline元素。元素的一个典型特征inline是它们尊重标记中的空白。这就解释了为什么元素之间会产生空间间隙。(例子)

有一些解决方案可以用来解决这个问题。

方法 1 - 从标记中删除空格

示例 1 - 将空格注释掉:(示例)

<div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div>

示例 2 - 删除换行符:(示例)

<div>text</div><div>text</div><div>text</div><div>text</div><div>text</div>

示例 3 - 在下一行关闭部分标记(示例)

<div>text</div
><div>text</div
><div>text</div
><div>text</div
><div>text</div>

示例 4 - 关闭下一行的整个标签:(示例)

<div>text
</div><div>text
</div><div>text
</div><div>text
</div><div>text
</div>

方法 2 - 重置font-size

由于inline元素之间的空格由 决定font-size,您可以简单地将 重置font-size0,从而删除元素之间的空格。

只需font-size: 0在父元素上设置,然后font-size为子元素声明一个新的。这有效,如此处所示(示例)

#parent {
    font-size: 0;
}

#child {
    font-size: 16px;
}

这种方法效果很好,因为它不需要更改标记;font-size但是,如果子元素是使用em单位声明的,则它不起作用。因此,我建议从标记中删除空格,或者浮动元素,从而避免inline元素产生的空间。

方法 3 - 将父元素设置为display: flex

在某些情况下,您还可以display将父元素的 设置为flex(例子)

这有效地消除了支持的浏览器中元素之间的空格。不要忘记添加适当的供应商前缀以获得额外支持。

.parent {
    display: flex;
}
.parent > div {
    display: inline-block;
    padding: 1em;
    border: 2px solid #f00;
}

.parent {
    display: flex;
}
.parent > div {
    display: inline-block;
    padding: 1em;
    border: 2px solid #f00;
}
<div class="parent">
    <div>text</div>
    <div>text</div>
    <div>text</div>
    <div>text</div>
    <div>text</div>
</div>


边注:

使用负边距来删除inline元素之间的空间是非常不可靠的。如果有其他更优化的解决方案,请不要使用负边距。

于 2013-09-26T21:17:10.140 回答
38

使用inline-block允许在您的 HTML 中使用空格,这通常等于 .25em(或 4px)。

您可以注释掉空格,或者更常见的解决方案是将父级设置font-size为 0 并将其重置为内联块元素上所需的大小。

于 2013-09-26T21:18:18.970 回答
17

最简单的解决方法是只float使用容器。(例如。float: left;)另一方面,每个都id应该是唯一的,这意味着您不能在同一个文档中使用相同的id两次。HTML您应该改用类,您可以在其中class对多个元素使用相同的类。

.container {
    position: relative;
    background: rgb(255, 100, 0);
    margin: 0;
    width: 40%;
    height: 100px;
    float: left;
}
于 2013-09-26T21:31:02.797 回答
3

找到了一个不涉及 Flex 的解决方案,因为 Flex 在旧版浏览器中不起作用。例子:

.container {
    display:block;
    position:relative;
    height:150px;
    width:1024px;
    margin:0 auto;
    padding:0px;
    border:0px;
    background:#ececec;
    margin-bottom:10px;
    text-align:justify;
    box-sizing:border-box;
    white-space:nowrap;
    font-size:0pt;
    letter-spacing:-1em;
}

.cols {
    display:inline-block;
    position:relative;
    width:32%;
    height:100%;
    margin:0 auto;
    margin-right:2%;
    border:0px;
    background:lightgreen;  
    box-sizing:border-box;
    padding:10px;
    font-size:10pt;
    letter-spacing:normal;
}

.cols:last-child {
    margin-right:0;
}
于 2017-08-21T14:10:56.427 回答
1

只需添加一个边框:2px solid #e60000; 到您的第二个 div 标签 CSS。

绝对有效

#Div2Id {
    border: 2px solid #e60000; --> color is your preference
}
于 2017-07-19T07:18:00.057 回答
-2

您需要添加

#container
{
    display:inline-block;
    position:relative;
    background:rgb(255,100,0);
    margin:0px;
    width:40%;
    height:100px;
    margin-right:-4px;
}

因为每当你写display:inline-block它需要额外的margin-right:4px. 因此,您需要将其删除。

于 2018-04-26T06:31:29.577 回答