【问题标题】:Removing outer margin between <html> and browser edge using Angular and CSS使用 Angular 和 CSS 移除 <html> 和浏览器边缘之间的外边距
【发布时间】:2021-12-01 21:58:33
【问题描述】:

这应该是微不足道的,但我已经花了 2 天时间并没有想法。无论我做什么,我都无法删除页面 html/body 和浏览器窗口边缘之间的外部空白。我希望页面内容与边缘齐平。

我正在使用 Angular CLI 9.1.8。 Win 10 上 Chrome 和 Edge 上的相同问题。我在这里创建了一个 stackblitz 项目来重现该问题:

app.component.html:

<!DOCTYPE html>
<html>
  <body>
    How to remove white space between red border and browser edge...
  </body>
</html>

app.component.css:

body, html {
  height: 100%;
  width: 100%;
  margin: 0 !important;
  padding: 0 !important;
  border: 1px solid red;
}

红色的 1px 边框只是为了让我可以看到它们的位置并将被移除。这是它的样子:

我也试过了:

  • display: inline-block;
  • min-height: 100%;
  • height: 100vh;
  • overflow: hidden;
  • css 重置:*{ margin: 0; padding: 0; }
  • &lt;div&gt; 中包裹主体或组件
  • !important 在每一行的末尾

我已经尝试了这些 stackoverflow 线程中的所有内容等等:

【问题讨论】:

  • 创建一个 stackblitz 示例
  • @David Stackblitz 创建示例以重现该问题。问题中提供的代码足以使用默认设置重现问题。谢谢你的建议。请解锁问题..
  • 这是因为您将body/html 标签添加到您的应用程序组件中,您应该这样做。因此,您在app.component.css 中定义的样式将添加到组件内的htmlbody 标签,而不是全局标签。将您的样式添加到 styles.css 并从您的应用组件中删除 html/body 标签
  • @David 添加正文{位置:绝对;顶部:0; left: 0} 正如下面评论中所建议的那样有效,但你是对的,这是一个 hack,我不应该在 app.component.html 中添加 body/html 标签。我这样做是因为我的正文的页眉、主要和页脚是组件,不能从 index.html 调用。我刚刚将正文与页眉/主/页脚分开,现在一切都很好。谢谢你。 (顺便说一句,为什么这个问题被锁定?这是一个合法的问题,并提供了所有必要的信息)。
  • 在您添加 stackblitz 之前,我在 11 小时前投票关闭它。确实,我没有足够关注代码。我已经投票决定重新开放它。

标签: html css angular


【解决方案1】:

根本问题是app.component.html 中的&lt;html&gt;&lt;body&gt; 标签。即使body{margin:0} 应用于组件的&lt;body&gt;,在 index.html 中还有一个更高级别的&lt;body&gt; 添加了不需要的边距。要解决此问题,请从 app.component.html 中删除 &lt;html&gt;&lt;body&gt; 并将样式移动到 styles.css。

这是我的最终解决方案:

styles.css

body, html {
  height: 100%;
  width: 100%;
  margin: 0 !important;
}

index.html

<!DOCTYPE html>
<html>
  <body>
    <app-root></app-root>
  </body>
</html>

app.component.html

<header>
  <app-main-menu></app-main-menu>
</header>
<main>
  <app-landing-page></app-landing-page>
</main>
<footer>
  <app-footer></app-footer>
</footer>

注意:另一种解决方案是在 app.component.css 中设置body{position: absolute; top: 0; left: 0}。这确实有效,但掩盖了问题的真正根源,即错误放置的 &lt;body&gt;&lt;html&gt; 标签。

【讨论】:

    【解决方案2】:

    this is before CSS

    This is inspecting element

    This is before CSS with code

    This is after CSS with code

    尝试将 universla 选择器的边距和填充值更改为零。如果这不起作用,请尝试将不同元素的边距和填充的单独值更改为零。您还可以使用 ctrl+shift+i 检查每个元素,然后找到干扰布局的元素。

    CSS 行将是 --

    *{
    margin: 0;
    padding: 0;
    }
    

    您还必须将填充更改为 0,并查看您的 CSS 文件是否已连接到您的代码。

    这是我能尝试的最好的..

    【讨论】:

    • 由于应用了红色边框,因此 CSS 显然已“连接”到代码。如问题中所述,我已经尝试将通配符设置边距设置为 0 的 CSS 重置。填充不会改变任何内容,因为这会影响边框内部的空间,而不是由边距控制的外部空间。
    • 兄弟,我是对的,您必须将主体或通用选择器的填充更改为零。尝试然后评论..因为没有其他可能的错误..
    • @UtkarshTyagi 这是我尝试的第一件事。我在我的问题中添加了链接以查看或编辑重现错误的 stackblitz 项目。我在那里添加了你的建议,你可以看到外面的空白仍然存在。
    • 我试图从这里编辑你使用的代码 - stackblitz.com/edit/… 但我发现你正在使用的编辑器中有错误。它既不是边距也不是填充。我建议您使用 Visual Studio 代码以获得更好的结果。我还使用了经过验证的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2016-03-17
    • 2021-09-08
    相关资源
    最近更新 更多