chrome 中元素和边框之间的奇怪间距

Weird spacing between element and border in chrome

我将几个 div 包裹在一个 div 容器中,我可以在边框和元素之间看到一些 奇怪的 space .问题出现在 chrome 和 edge 上。我试过 Mozilla,效果很好。

我正在使用 bootstrap,带有一些自定义 CSS。

我也在分享相关代码:

.fullScreen {
  height: 100vh;
  width: 100vw;
}

.mainContainer {
  align-items: center;
  justify-content: flex-start;
}

.row {
  margin: 0!important;
}

#box {
  margin: 0 0 0 5vh;
  height: 90vh;
  width: 90vh;
}

.rowEndings {
  height: 36vh;
}

.rowMid {
  height: 18vh;
}

@media (orientation: portrait) {
  .mainContainer {
    align-items: flex-start;
    justify-content: center;
  }
}
<!-- adding bootstrap css -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">


<html lang="en" class="fullScreen">

<body class="fullScreen">
  <div class="mainContainer row fullScreen">
    <div id="box" class="border border-dark">

      <div class="row rowEndings border border-dark"></div>

      <div class="row rowMid border border-dark"></div>

      <div class="row rowEndings border border-dark"></div>

    </div>
  </div>
</body>

</html>

片段中的对齐看起来很完美,但它向我展示了一些 space。我为此附加了一些片段:

我相信填充和边距没有问题。感谢您的帮助:)

更新:边缘也发生了同样的事情。如果我删除添加到 #box 元素的 5vh 的边距,问题就解决了。

尝试 CSS reset:

在你的 CSS:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box
}

将 !important 规则添加到您的 css。

* {
  margin: 0!important;
  padding: 0!important;
}

您应该将 重置 添加到您的页面,因为像 Chrome 这样的浏览器有一些 默认 CSS 样式 (user agent styles) 就像这个给你带来的麻烦:

body {
    display: block;
    margin: 8px;
}

尝试在 CSS 文件的开头或单独的文件中添加一些代码,如下所示:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box
}

但最好的做法是添加一个众所周知且经过测试的 CSS 重置文件,例如 Normalize.CSS https://necolas.github.io/normalize.css/,以便确保您为网站编写的样式将基于相同的基础,无论浏览器用户代理默认样式如何。

有时 Chrome 当缩放选项不同于 100% 时,在边框和内容之间添加奇怪的间距。 因此,请确保您的 Chrome 缩放选项设置为 100%。

Window Ctrl 和 + 或 Ctrl 和 -

Mac ⌘ 和 + 或 ⌘ 和 -

我也有这个问题。内容和边框之间的差距的几个像素。也不规则,每个空间不同。我在 Edge 和 Chrome 上看到过这个。它们都是基于 WebKit 的。我还没有在 Firefox 中看到它。看来问题出在 WebKit 本身。

我解决这个问题的方法是不使用边框。相反,我使用了

filter: dropshadow(0px 0px 0px 2px black);
box-shadow: 0px 0px 0px 2px black;  

这些没有间隙问题,但如果您设置

box-sizing: border-box;

您遇到了 widthheight 中不包含边框大小的问题。对于那个问题,你可以把你的盒子阴影放在里面:

filter: dropshadow( inset 0px 0px 0px 2px black);

但这一次,我们又面临两个问题。

  1. 您不能让 box-sizing 包含阴影。所以阴影与内容重叠。
  2. 阴影在您设置的元素下。所以你看不到它们。

要解决这个问题,您可以给您的元素一个 ::before 并将阴影赋予该伪元素

您可以将元素放入容器中 div 并将阴影赋予容器。这样,您还可以为容器提供边框(阴影)大小的填充,以使其大小包括其假边框而不与它们重叠。此外,您需要将元素置于该容器的中心。