- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果我们从这种 HTML 元素设置开始:
...然后我们使用 CSS flexbox 并将 flex-grow
属性应用于“body”元素,我们得到:
非常棒的是,它的行为可以完全在 CSS 中完成,而无需任何 JavaScript。
但是,假设我们希望父容器元素具有固定高度,并且子元素(即页眉、正文和页脚)不应溢出父元素。
假设页眉和页脚元素内容是固定的,但正文内容是动态的(服务器端或客户端,这无关紧要)并且当内容太长时我们希望正文元素具有垂直滚动条大,像这样:
但是,我无法找到一种方法来完全在 CSS 中实现该行为(即不使用 JavaScript)并且不为所有子元素指定固定高度(不可取)。
简单地在父级上使用固定高度的 flex-grow
属性,结果是这样的(当正文内容变得太大时):
有没有办法用纯 CSS 实现?
如果不是,我们认为扩展 flexbox 标准来封装这种行为是否值得?
编辑 1
所以我的用例与我发布的相似,但差异足以隐藏问题,因此引起了一些人的注意,为什么我一开始就遇到了问题。
扩展 LGSon 的回答,这是我的用例:
html, body {
margin: 0;
}
body {
display: flex; /* IE 11/10 min-height bug fix - or an extra wrapper in the markup */
}
.wrapper {
display: flex;
flex-direction: column;
height: 100vh;
width: 100%;
}
.body {
flex: 1;
}
.content {
overflow: auto;
}
/* below CSS is just for the extra styling */
.wrapper {
height: calc(100vh - 44px); /* 2*2px border + 2*10px margin */
width: calc(100% - 44px); /* + 2*10px padding = 44px */
border: 2px dashed black;
margin: 10px;
padding: 10px;
}
.wrapper > div {
padding: 10px;
}
.header {
border: 2px solid blue;
margin-bottom: 10px;
}
.body {
border: 2px solid green;
}
.footer {
border: 2px solid red;
margin-top: 10px;
}
<div class="wrapper">
<div class="header">
Header<br>
</div>
<div class="body">
<h1>
Hello world!
</h1>
<div class="content">
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
</div>
</div>
<div class="footer">
Footer<br>
</div>
</div>
所以我实际上在层次结构中有另一个级别,并且我的 overflow
属性太深了一个级别。
对我来说,让 overflow
在我拥有它的地方似乎是合乎逻辑的,但是根据您的答案/示例,甚至是我的用例,将其提升一个级别,使其工作(计数器- 直觉上,在我看来)。
我能理解它为什么起作用,但我原以为滚动条会跨越整个 body 元素,而不仅仅是内容部分。
对于无意的误导,我们深表歉意。
谢谢大家
编辑2
我将奖励第一个修改答案(或创建新答案)并包含我的澄清(在第一次编辑中)并提供正确答案的人。
最佳答案
这个使用 flexbox
的示例可以满足您的要求,子项没有固定高度。
完全动态的 .header
和 .footer
,以及一个会在需要时滚动的 .body
,所以它都在其父级中, .wrapper
.
请注意,关于滚动,您为希望滚动的元素提供溢出,而不是可能导致溢出的元素。
html, body {
margin: 0;
}
body {
display: flex; /* IE 11/10 min-height bug fix - or an extra wrapper in the markup */
}
.wrapper {
display: flex;
flex-direction: column;
height: 100vh;
width: 100%;
}
.body {
flex: 1;
overflow: auto;
}
/* below CSS is just for the extra styling */
.wrapper {
height: calc(100vh - 44px); /* 2*2px border + 2*10px margin */
width: calc(100% - 44px); /* + 2*10px padding = 44px */
border: 2px dashed black;
margin: 10px;
padding: 10px;
}
.wrapper > div {
padding: 10px;
}
.header {
border: 2px solid blue;
margin-bottom: 10px;
}
.body {
border: 2px solid green;
}
.footer {
border: 2px solid red;
margin-top: 10px;
}
<div class="wrapper">
<div class="header">
Header<br>
</div>
<div class="body">
<h1>
Hello world!
</h1>
<div class="content">
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
</div>
</div>
<div class="footer">
Footer<br>
</div>
</div>
当你说整个 body 元素时,如果你指的是实际的 html body
,而不是带有 .body
类的元素,然后在 .wrapper
上使用 min-height
并从 .body
中移除溢出。
您可以将溢出设置到 html body
元素,但不需要它,因为它默认滚动
html, body {
margin: 0;
}
body {
display: flex; /* IE 11/10 min-height bug fix - or an extra wrapper in the markup */
}
.wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
}
.body {
flex: 1;
}
/* below CSS is just for the extra styling */
.wrapper {
min-height: calc(100vh - 44px); /* 2*2px border + 2*10px margin */
width: calc(100% - 44px); /* + 2*10px padding = 44px */
border: 2px dashed black;
margin: 10px;
padding: 10px;
}
.wrapper > div {
padding: 10px;
}
.header {
border: 2px solid blue;
margin-bottom: 10px;
}
.body {
border: 2px solid green;
}
.footer {
border: 2px solid red;
margin-top: 10px;
}
<div class="wrapper">
<div class="header">
Header<br>
</div>
<div class="body">
<h1>
Hello world!
</h1>
<div class="content">
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
Content<br> Content<br>
</div>
</div>
<div class="footer">
Footer<br>
</div>
</div>
关于javascript - 如何在父容器中自动拉伸(stretch)并约束 HTML 子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443909/
好吧,这是最好用图像来解释的事情...... 我正在寻找一个类似于 StretchBlt 的函数,但我可以将图像复制到定义目标四个角的 Canvas 上,即将图像的梯形/四边形拉伸(stretch)绘
我为 UITextField 制作了一个自定义键盘,其中包含 18 个 UIButton。它是一个 UIView,被设置为文本字段的 inputView。 按钮是在 UIView 的 initWith
我想创建一个 UIButton,它使用可拉伸(stretch)图像作为背景图像,例如我可以轻松调整按钮大小以适应不同的标签等。 所以我创建了以下运行良好的代码: UIImage *bgImage =
我正在尝试拉伸(stretch) UIImageView 中的图像 - 但我惨败了:) 以下设置: 带有 View 和附加到该 View 的 UIImageView 的 NIB 文件。 使用IBOut
我一直在尝试使用 html Canvas ,但由于某种原因,很难让它不拉伸(stretch)东西。我试过只使用 screen.width 和 screen.height,但我通过使用 screen.a
我想拉伸(stretch)上图的左右两侧,并保持中间的箭头不拉伸(stretch)。我怎样才能做到这一点? 最佳答案 如果你不喜欢打扰 Photoshop 并且图像不需要动态调整大小,你可以使用我在
我的页脚在一个容器中有四列。它需要在容器内以与上面的内容对齐。 我的问题是我想让左栏有红色背景,但目前它不会拉伸(stretch),因为它显然在容器中。 我怎样才能将它向左拉伸(stretch)整个宽
有没有办法拉伸(stretch)按钮,使中央部分保持完整? 9-patch 不允许这样做。 编辑:我按照 Benito 的建议使用了 9-patch。它工作正常。奇怪的是,我第一次无法得到它。 最佳答
我想拉伸(stretch)上图的左右两边,中间的箭头不拉伸(stretch)。我该怎么做? 最佳答案 如果你不想打扰 Photoshop 并且如果图像不需要动态调整大小,你可以在 UIImage 上使
我创建了一个 9patch 图像,不知何故它只能垂直拉伸(stretch)。我尝试了其他 9-patch 图像,但它们具有相同的效果,为什么它们在其他情况下工作。所以我认为 9patch 应该没问题。
我需要在边框控件(或类似控件)中绘制一些简单的线条,这些线条始终延伸到边框的边界。有没有办法只拉伸(stretch)线条而不是它的笔?不涉及大量 C#? 在这个版本中,线条延伸:
这是我的 XAML 及其外观:
编辑:答案将允许背景图像根据 body 的大小改变它的高度。如果正文是 500px 高,它应该是 100% 宽度,500px 高度。或 100% 宽度 2500 像素高度。 也许我错过了这件事,但我正
我有一个 UILabel。我设置了尾随和前导空间约束,还添加了对齐 Y 中心约束。我已将行数设置为零。 我的目标是将 UILabel 拉伸(stretch)到某个最大宽度,然后添加新行。在给定的约束条
我正在制作一个网站,对于该网站,我正在使用顶部的导航栏。我想要的是将栏放在页面的顶部,并且它是主页的单独颜色。这是我当前的代码: body { font-family: "Baloo Bhaina
我编写了代码来 reshape 已纹理化的四边形。当我拉伸(stretch)四边形时,图像确实按照我的预期拉伸(stretch)了。我似乎在拉伸(stretch)图像时有两个不同的三角形,图像被拉伸(
我在 div 中嵌入了 YouTube。此 div .entry-content 的 max-width 为 30em。 YouTube 嵌入我想要全窗口宽度,延伸到 #container 之外。为此
看: //UIImageView* stretchTest = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]
我有一个 super 简单的网页,由纯 HTML/CSS 组成。正如预期的那样,当我在本地运行它时,一切正常。 但是,当我部署它时(使用 Droppages,一个通过 Dropbox 的静态页面托管平
我正在尝试将一个 9 色 block 图像设置为我的一项 Activity 的背景,但它不必要地拉伸(stretch),使一切变得奇怪。我使用 draw9patch 创建它,并在左下角添加了一个像素,
我是一名优秀的程序员,十分优秀!