所以我最近遇到了这样的场景,我想要为背景创建一个渐变,开始时是一种 colored颜色 ,然后将另一种 colored颜色 扩展到页面底部.我最初编写了一些如下所示的CSS:

html {
    height: 100%;
}

body {
    background-image: linear-gradient(to bottom,
        red 50%,
        blue 50%
    );
}

这在一开始是有效的,直到我有内容溢出页面,然后梯度重复本身.我最终找到了一个解决方案,将根元素上的height更改为min-height,我解释了为什么高度不起作用,百分比是基于包含块的,对于根元素,它是"初始包含块",在这种情况下是视口.

然而,我还没有找到关于根元素上的why min-height: 100%导致溢出的答案,这就是我希望得到的答案.

using height

html {
  height: 100%;
}

body {
  background-image: linear-gradient(to bottom, 
            red 50%, 
            blue 50%
        );
}

#exact-viewport-height {
  height: 101vh;
  opacity: 0.5;
  background-color: black;
}
<div id="exact-viewport-height">
</div>

using min-height

html {
  min-height: 100%;
}

body {
  background-image: linear-gradient(to bottom, 
            red 50%, 
            blue 50%
        );
}

#exact-viewport-height {
  height: 101vh;
  opacity: 0.5;
  background-color: black;
}
<div id="exact-viewport-height">
</div>

推荐答案

@TemaniAfif在 comments 中指出overflow-propagation来回答你的问题.回答你的帖子,你在html上看到有height:100%和没有height:100%的不同的原因是因为background propagation.(min-height不是造成这里差异的主要原因.)

对于根元素是HTML HTML元素或XHTML html元素[HTML]的文档:如果根元素上的background-image的计算值为none且其background-color是透明的,则用户代理必须从该元素的第一个HTML BODY或XHTML body子元素传播背景属性的计算值.BODY元素的背景属性的使用值是它们的初始值,传播的值被视为在根元素上指定的值.建议HTML文档的作者为BODY元素而不是HTML元素指定画布背景.

在这两种情况下,在body上指定的背景属性实际上被传播到html.在第一个例子中,html的高度是size of the linear-gradientvh,所以size of the linear-gradientsize of the linear-gradientvh,当主体内容物超过size of the linear-gradientvh时,导致背景重复.

在第二个示例中,未指定高度html(仅指定min-height仍未指定高度),因此高度htmlheight:auto,这取决于其内容的高度(102vh+默认边距),这就是背景图像不重复的原因.

Html相关问答推荐

角|将动态html属性添加到子组件

当光标悬停在(相同)父元素上方时,为多个子元素创建不同的过渡动画

现代网络浏览器可以并行下载哪些类型的网络资源?还有,什么东西不能并行下载?

CSS Grid:使网格行填充屏幕,将下一行推离屏幕

OnChange函数未在下拉列表中使用一个选项触发

HTMLTag属性内的svelte+TS类型声明

Html视频标签:圆角像素化

HTML中的ARIA标签:在元素内部还是外部?(&Q;

如何显示自定义按钮以将产品添加到WooCommerce购物车?

目标第一个祖先标签的 XPath

如果使用复选框属性更改,如何防止事件更改?

如何在 VS Code 中 Select 和删除 HTML 元素(其标签和内容)?

使用HTML和CSS构建简历网站.无法使body元素内的div元素跨越整个网站高度

将 HTML 元素粘贴到容器底部,而不剪裁其顶部

使用 sprite 的问题,字符 sprite 中的额外边距

是否可以使 huxtable 输出悬停?

在随机图像下对齐文本

Mediawiki css/html 信息框创建空白行

在 html 邮箱的左侧和右侧制作多个元素很热门吗?

如何使用 :before 在 CSS 中为列表增加计数器