html - css 在固定高度旁边有一个全高 div?
问题描述
我想实现一个非常简单的事情:在绝对定位的外部 div 中有 2 个 div。
内部 div 是header
和content
。
Header
有一个固定的高度(但它取决于字体大小,即它没有任何高度属性预设)。
目标是将 设置content
为低于header
并强制它向下占用所有空间,而不会使页面高于视口。
请不要推荐 flex 属性,因为我发现它不是完全独立于浏览器的。在 Firefox 中运行良好,但在 Chrome 中它破坏了页面。
这是 JSFiddle 示例:https ://jsfiddle.net/danergo/qpjc3mr0/7/
更新
JSFiddle 已更新。破坏 flexbox 的是内容中有另一个项目希望 tp 使用内容的 100% 高度。
世界卫生大会
解决方案
实现您需要的现代方法是使用 CSS 网格。要让它在 IE 11 中也能正常工作,您需要添加一些专有的 CSS 规则。如果你对这些感兴趣,我也可以添加它们。
body { margin: 0; }
#main {
display: grid;
grid-template-rows: auto 1fr;
grid-template-areas:
"header"
"content";
height: 100vh;
background:red;
}
#header {
grid-area: header;
background:yellow;
}
#content {
background:gray;
grid-area: "content";
}
<div id="main">
<div id="header">
Header
</div>
<div id="content">
content
</div>
</div>
代码的关键部分是
grid-template-rows: auto 1fr;
这意味着网格由两行组成,第一行是 sized auto
,这意味着它将适应内部的任何内容。声明了第二个1fr
,告诉它覆盖其余部分。
如果您遇到#content
元素变得过高的问题,请替换1fr
为minmax(0, 1fr)
.
推荐阅读
- docker - 无法在 clickhouse docker 映像上运行 docker-compose push:资源被拒绝
- linux - 如何按主题编号(文件名的前缀)对文件进行排序并从中创建一个新文件夹?
- c++ - 优雅地声明 2(甚至多)维 std::arrays
- javascript - 将 FirebaseFirestore.DocumentSnapshot 转换为 Node.js 中的列表/地图
- node.js - 如何将文件(在 node.js 中)从内存保存到磁盘上的特定位置?
- ios - Google Cast iOS SDK 4.4.4 - 没有设备发现
- php - Laravel 到未定义的路由
- perl - 从 Perl 的文件中读取单个数字
- javascript - 如何在jQuery中的每次单击时一个一个地循环一组div?
- c# - 如何使用 xamarin 表单滑块或自定义视图在 Gif 颜色选择器下方创建