我有两个内联块div
元素,它们是相同的,位于彼此旁边。然而,尽管边距设置为0,但两个div之间似乎有一个4像素的神秘空间。没有父div影响它们 - 发生了什么?
CSS
#container
{
display:inline-block;
position:relative;
background:rgb(255,100,0);
margin:0px;
width:40%;
height:100px;
}
这就是我想要的样子:
答案 0 :(得分:530)
在这种情况下,您的div
元素已从block
级元素更改为inline
元素。 inline
元素的典型特征是它们尊重标记中的空白。这解释了为什么在元素之间产生空间的间隙。 (example)
有一些解决方案可用于解决此问题。
示例1 - 评论空白:(example)
<div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div><!--
--><div>text</div>
示例2 - 删除换行符:(example)
<div>text</div><div>text</div><div>text</div><div>text</div><div>text</div>
示例3 - 在下一行(example)上关闭部分代码
<div>text</div
><div>text</div
><div>text</div
><div>text</div
><div>text</div>
示例4 - 关闭下一行的整个代码:(example)
<div>text
</div><div>text
</div><div>text
</div><div>text
</div><div>text
</div>
font-size
由于inline
元素之间的空白由font-size
确定,您只需将font-size
重置为0
,即可删除元素之间的空格。
只需在父元素上设置font-size: 0
,然后为children元素声明一个新的font-size
。这有效,如(example)
#parent {
font-size: 0;
}
#child {
font-size: 16px;
}
这种方法非常有效,因为它不需要更改标记;但是,如果使用font-size
单位声明子元素的em
,则它不起作用。因此,我建议从标记中删除空格,或者floating the elements,从而避免inline
元素生成的空格。
display: flex
在某些情况下,您还可以将父元素的display
设置为flex
。 (example)
这有效地删除了supported browsers中元素之间的空格。不要忘记添加适当的供应商前缀以获得额外支持。
.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
元素之间的空间是非常不可靠的。如果有其他更优化的解决方案,请不要使用负边距。
答案 1 :(得分:34)
使用inline-block
可以在HTML中使用空格,这通常相当于.25em(或4px)。
您可以注释掉空白区域,或者更常见的解决方法是将父级font-size
设置为0并将其重置为内联块元素上所需的大小。
答案 2 :(得分:15)
inline-block
会像所有人一样自动设置默认white-space
。 (这是由于元素“内联”属性,与HTML
标记中文本字符串中单词之间的间距相同。这就是为什么在标记中删除white-space
也有效。)最简单修复只是float
容器。 (例如。float: left;
)另一方面,每个id
都应该是唯一的,这意味着您不能在同一id
文档中使用相同的HTML
两次。您应该使用类,在这里您可以对多个元素使用相同的class
。
.container {
display: inline-block;
position: relative;
background: rgb(255, 100, 0);
margin: 0;
width: 40%;
height: 100px;
float: left;
}
答案 3 :(得分:1)
找到一个不涉及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;
}
答案 4 :(得分:0)
只需添加边框:2px solid #e60000
;到你的第二个div标签CSS。
绝对有效
#Div2Id {
border: 2px solid #e60000; --> color is your preference
}
答案 5 :(得分:-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
。所以,你需要删除它。