【问题标题】:spacing (margin?/padding?) appearing between divs [duplicate]出现在 div 之间的间距(边距?/填充?)[重复]
【发布时间】:2014-11-12 23:04:13
【问题描述】:

我正在尝试创建一个由点、线和框(所有 div 元素)组成的网格。出于某种原因,他们似乎从margin: 2px; 之类的东西开始,而设置margin: 0px 并没有摆脱这一点。设置-2px 让我到达某个地方。但是这里的交易是什么?他们为什么不碰?

标记在这两个divs 之间交替:

<div class="row_short">
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
    <div class="hbar"></div>
    <div class="dot"></div>
</div>
<div class="row_tall">
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
    <div class="square"></div>
    <div class="vbar"></div>
</div>

CSS:

body {
    margin: 0px;
    padding: 0px;
}
table {
    margin: 0px;
    padding: 0px;
}
.dot {
    height:5px;
    width:5px;
    background-color:black;
    display: inline-block;
}
.vbar {
    height:30px;
    width:5px;
    background-color: #CCCCCC;
    display: inline-block;
}
.vbar:hover {
    background-color:purple;
}
.hbar {
    height:5px;
    width:30px;
    background-color: #CCCCCC;
    display: inline-block;
}
.hbar:hover {
    background-color:purple;
}
.square {
    height:30px;
    width:30px;
    background-color: #ff88cc;
    display: inline-block;
}
.row_short {
    display: inline-block;
    position:relative;
}
.row_tall {
    display: block;
    position:relative;
}

JSFiddle

【问题讨论】:

标签: html css margin padding spacing


【解决方案1】:

您的代码中有空格被渲染为空格,从而产生 2px 间隙的错觉。

您可以将代码简化为单行代码:

<div class="dot"></div><div class="hbar"></div>...

或者使用 cmets 来分隔换行符和空格:

<div class="dot"></div><!--
--><div class="hbar"></div>

您还可以在父元素上设置font-size: 0;(在演示中它必须是body,但由于显而易见的原因这是一个坏主意),这也将折叠所有间距而无需编辑HTML .不过,如果您想在其中添加文本,则需要将 font-size: 1rem 重置为子元素。

【讨论】:

  • 这里缺少一个重要的一点是,这一切都是由display: inline-block; 引起的(并且遵循规范)。
  • 是否有一个 display: 选项,我应该使用它来获得所需的结果?块会让它们垂直堆叠,不是吗?
  • 我相信您可以在父块级行上使用overflow: hidden; float: left;,但我个人只是调整标记,这是维护成本最低的事情。如果您可以避免在 CSS 中轻松解决某些问题,那么避免解决它可能是值得的 :-)
  • 1em 设置为字体大小为0 的元素的子元素也将为零,因为em 的工作方式类似于乘法,并且与0 相乘将始终有一个0 的结果。
  • 真;我的意思是1rembody 字体大小中提取
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2018-11-05
  • 2014-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2011-03-04
相关资源
最近更新 更多