【问题标题】:Why does background-image show fully when html's height is set to 100%? [duplicate]为什么当 html 的高度设置为 100% 时背景图像会完全显示? [复制]
【发布时间】:2020-06-17 04:16:06
【问题描述】:

我正在观看Traversy Mediathis 视频,其中他展示了如何制作视差网站。在this 点,他选择了html 以及body 标记。我认为可能有什么区别,并且添加带有 body 标签的 html 将是多余的,因为 html 中只有 body 和 head,并且由于我们正在设置 body 样式,因此我们想要设置样式的所有内容都可以通过选择 body 来设置样式。所以我最初没有在我的代码中写“html”,结果:背景图像只是覆盖了元素的背景,而额外的部分被隐藏了(根据我的代码,这应该是预期的,但我想知道为什么我们的结果不同。然后我意识到我的代码正在按应有的方式工作,而他的工作方式不同)。然后我意识到选择body和选择html之间是有区别的(我仍然不知道区别)。所以我在body之后编写了选择html的代码,并将html的高度设置为100%。现在我得到了视频中显示的内容。但我不明白怎么做。据我所知,这不应该有所作为,因为“body”在代码中将其高度设置为“100%”。当我删除 body 的高度时,它就像以前一样工作,即背景图像仅覆盖元素,即使 html 的高度设置为 100%。我也不明白设置html和body高度的目的。默认情况下它们不覆盖整个视口吗?

(这是我的第一个问题,如果我需要对问题进行任何更改以使其可以回答,请告诉我)

编辑: 已添加链接,在第一个代码 sn-p 上添加“.pimg1, .pimg2, .pimg3{background-attachment: fixed;}”,添加第二个代码 sn-p(预期结果但不希望出现)

我的代码使它按照我的意图工作(期望但不可理解)(Preview):

   body{
    height: 100%;
    margin: 0;
    font-size: 16px;
    font-family: "Lato", sans-serif;
    font-weight: 400;
    line-height: 1.8em;
    color:#666;

}

html{
    height: 100%;
}

.pimg1, .pimg2, .pimg3{
    background-attachment: fixed;
}

.pimg1{
    background-image:url('../img/image1.jpg');
    min-height: 100%;
}

.pimg2{
    background-image:url('../img/image2.jpg');
    min-height: 400px;
}

.pimg3{
    background-image:url('../img/image3.jpg');
    min-height: 400px;
}

我最初编写的代码(预期但不受欢迎)(Preview)

body{
    margin: 0;
    font-size: 16px;
    font-family: "Lato", sans-serif;
    font-weight: 400;
    line-height: 1.8em;
    color:#666;
    height: 100%;
}



.pimg1, .pimg2, .pimg3{
    background-attachment: fixed;
}

.pimg1{
    background-image:url('../img/image1.jpg');
    height: 100%;
}

.pimg2{
    background-image:url('../img/image2.jpg');
    min-height: 400px;
}

.pimg3{
    background-image:url('../img/image3.jpg');
    min-height: 400px;
}

p{
    font-size:30px;
}

已解决:我正在编辑容器 div 的高度,并认为我只是在编辑背景图像的高度。我太不合逻辑了。我现在知道了。谢谢https://stackoverflow.com/users/897416/charleshttps://stackoverflow.com/users/8620333/temani-afif

【问题讨论】:

  • 我也不明白设置html和body高度的目的。默认情况下它们不覆盖整个视口吗? --> 不,它们都没有,都需要明确设置为 100% 以覆盖视口高度但我想你没有添加 doctype你的代码和你没有进入怪异模式,它是不同的:stackoverflow.com/q/32214152/8620333
  • @TemaniAfif 好的。而且我的代码中已经有 doctype。但我原来的问题仍然存在。为什么当 html 的高度设置为 100% 时背景图像会完全显示?不幸的是,我的问题已被标记为重复。我没有在重复链接上找到我的答案。这里ygshbht.github.io/parallaxWebsite。定义了 html 和 body 高度,这里是ygshbht.github.io/parallaxWebsite2。至少有一个没有。
  • 副本解释了百分比是如何工作的,并且您的两个示例都确认副本是您需要的。缺少一个高度:100% 会破坏一切,因为您错过了参考。从副本:要设置百分比高度,其父元素必须具有明确的高度。
  • @TemaniAfif 我的错。我正在编辑容器 div 的高度,并认为我只是在编辑背景图像的高度。我太不合逻辑了。我现在知道了。谢谢

标签: html css height background-image


【解决方案1】:

如果您没有定义html 的高度,而是在body 上定义一个百分比高度,那么该值将计算为auto

来自height (MDN):

百分比是根据生成框的包含块的高度计算的。如果包含块的高度没有明确指定(即,它取决于内容高度),并且该元素不是绝对定位的,则该值计算为 auto。根元素上的百分比高度是相对于初始包含块的。

或者,您可以使用视口单位(例如,vh)。例如:

.pimg1 {
  background-image: url("../img/image1.jpg");
  min-height: 100vh;
}

...那么您无需在htmlbody 上定义高度。

【讨论】:

  • 谢谢,现在我了解了默认值,并且代码 sn-p 很有帮助。但我仍然不明白如何将 html 和 body 的高度设置为 100% 会导致 background-image 调整其容器的大小。我在我的问题中添加了显示代码输出的链接
  • 我的错。我正在编辑容器 div 的高度,并认为我只是在编辑背景图像的高度。我太不合逻辑了。我现在知道了。谢谢。
猜你喜欢
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2020-01-31
相关资源
最近更新 更多