使背景颜色延伸到溢出区域

Joh*_*ohn 10 html css overflow flexbox

如果父元素的总内容高度为 10,000 像素,但overflow: auto元素呈现的高度为 700aside像素,如何强制子元素动态呈现为 10,000 像素而不是默认的 700像素?当您开始滚动Fiddle 时,您可以看到白色背景。

  • 可以不添加任何更多的元素(::after::before是可以接受的,虽然)。
  • aside元素必须有它的与内容滚动main通过元素的内容#body元素(无position: fixed;)。
  • aside元件必须具有它的background-color在0像素到最底部(例如5,000px或10,000px)远离最顶部拉伸下面的初始可见的折叠。
  • aside元素不能有它自己的overflow: auto;.
  • Dynamic(对于知识较少的人)意味着我们不能设置 static height,例如height: 10000px因为我们知道渲染的高度是多少。

在我的示例中,当您开始滚动绿色background-color末端时,我想让aside元素一直延伸到内容底部。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Overflow Flex Box Issue</title>
<style type="text/css">
* {border: 0; margin: 0; padding: 0;}

aside
{
 background-color: #afa;
 order: 2;
 width: 20%;
}

body
{
 display: flex;
 flex-direction: column;
 height: 100%;
}

body > header
{
 align-self: stretch;
 background-color: #faa;
 flex: 0 1 auto;
 min-height: 56px;
 order: 1;
}

body > footer
{
 align-self: auto;
 background-color: #aaf;
 flex: 0 1 auto;
 min-height: 36px;
 order: 2;
}

html {height: 100%;}

main
{
 background-color: #cfc;
 order: 1;
 width: 80%;
}

#body
{
 display: flex;
 order: 2;
 overflow: auto;
}

</style>
</head>

<body>

<div id="body">
<main>
<article>
<p>article</p>
<p>article</p>
<p>article</p>
<div style="height: 10000px;">10,000px</div>
</article>
</main>
<aside><p>&#60;aside&#62;, 100% height only of visible area, it <em>should</em> be <em>100% of total parent height</em>.</p></aside>
</div>

<header>The body &#62; header element; element 2, order: 1;.</header>
<footer>The body &#62; footer element; element 3, order: 3;.</footer>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Bel*_*der 7

不确定这是否符合您的所有标准,但是这个解决方案怎么样?只需将父级 div 包装在容器中并将 Overflow-y 设置为 auto 即可,如下所示:

.container {
  overflow-y: auto;
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*l_B 5

除了绝对定位,这在 CSS 中是不可能的。您需要使用 JavaScript。

这是问题所在:

第一部分: background-color

您没有为内容元素 ( #body)定义高度。

这意味着高度是内容驱动的。

背景色只会覆盖元素的宽度和高度。您可以在演示中看到这一点。一旦滚动开始,背景颜色就结束。那是因为溢出区域在元素的宽度/高度区域之外。

从规范:

14.2 背景

作者可以将元素的背景(即其渲染表面)指定为颜色或图像。就盒子模型而言,“背景”指的是contentpaddingborder 区域的背景。

所以 CSS 背景属性被设计为覆盖元素边界的区域。它们不覆盖边距区域。它们不会溢出。


第二部分: overflow

这是截断背景颜色的另一个原因。

overflow属性仅适用于内容。它与背景无关。

从规范:

11.1.1 溢出:overflow 属性

此属性指定块容器元素的内容在元素的框溢出时是否被剪裁。


由于存在这两个障碍,CSS 无法解决这个问题(除了可能的 hack)。使背景颜色填充动态大小容器的整个长度的唯一方法是使用脚本。