html - 负边距添加不需要的 1px 额外间距

标签 html css

考虑以下 HTML 和 CSS

.outer {
  border: 1px solid red;
  margin-left: -10px;
}

.inner {
  border: 1px solid black;
  width: 50px;
  margin-left: 10px;
}
body {
  border: 1px solid blue;
}
<div class="outer">
  <div class="inner">
    inner
  </div>
</div>

内部和外部 div 之间左侧 1px 的额外间距来自哪里?

将负边距更改为 -11 像素,它可以正常工作(没有间隙)。

也可以去掉所有边距,与上面的“负+正”场景对比,看看两者有何不同。

谢谢。


编辑

弄清楚后,我只想分享以下内容,以防对以后的访问者有所帮助。

  1. 在应用 -/+10px 后,内部 div 回到了它开始时的确切位置。只是以前位于 body 元素的 content 边缘 和内部 div 的 margin 边缘 之间的边界(即外部 div 的边界)发生了变化向左 10px 和外部 div。因此,它可以正常工作,没有任何异常。
  2. 子框的边距自然适用于其父框的内容边缘。这就是盒子模型 的工作原理。无法使用 box-sizing: border-box
  3. 更改该行为
  4. 消除差距的可能解决方案包括(但不限于):
    • 将 CSS 转换为 SCSS,将边框宽度存储在一个变量中,并从父项的边距中减去该变量。 (没有必要转换为 SCSS 并使用变量,但它使样式表更易于维护和更新。)
    • 使用 JavaScript 完全消除对负边距的需求
    • 在父 div 上使用轮廓而不是边框​​

最佳答案

我认为这与 .outer 边框有关。您可以在下面看到,当红色边框向左移动 10px 时,如果它没有向左移动(当边距为 0 时),就会有一个间隙)。

因为 .inner div 是相对于 .outer div 的,所以它不会“填满” 1px 间隙通过将 .outer 向左移动 10 个像素来创建。

在这里你可以看到差距。 (看起来像2个像素,因为页面放大了200%)


使用额外信息进行编辑:

额外的“证据”表明额外的空间来自.outer div, 如果您删除 .outer 边框的 1px 宽度,您也删除了间隙:

关于html - 负边距添加不需要的 1px 额外间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50258779/

相关文章:

android - 使用 HTML5 和 eclipse android 插件

javascript - Bootstrap 菜单图标更改为 x 关闭

javascript - 在 Iframe 中加载外部 html 并访问内容

css - 拖动元素时如何保持样式?

javascript - 使用 JS 从提示中做出选择后出现图片

html - 在 html5 和 css3 中标题全屏宽度但正文固定宽度

html - 调整窗口大小时保持元素与背景的相对位置?

JavaScript 和搜索引擎优化。我应该如何调和它们?

html - 如何删除导航菜单项之间的间距?

jquery - 使用 jQuery 从选择中删除 CSS