【发布时间】:2020-05-16 17:37:24
【问题描述】:
我有以下布局:
.table {
display: grid;
grid-template-columns: fit-content(100%) auto;
}
.grid-item {
height: 50px;
padding: 8px;
border: 1px solid grey;
}
.a {
background-color: #feb5f5;
}
.b {
background-color: #76daff;
}
<div style="display: flex; align-items: center; flex-direction: column; background-color: #ddff33">
<div style="max-width: 1500px; background-color: #ccaa44; display:flex; align-items: first baseline; flex-direction: column;">
<div class="table">
<div class="grid-item a">Constant</div>
<div class="grid-item b">Variable size content that should take as much space as possible</div>
</div>
</div>
</div>
它应该按照以下规则运行。我有 WPF 背景,但很难在 HTML/CSS 中完全实现它们:
- 页面内容的最大宽度为 1500 像素并且水平居中。如果视口小于 1500 像素,则内容应缩小(即响应上限)。
- 居中的内容本身是一个由两列组成的网格:
- 左列应占用最小水平空间(
WPF中的Auto列大小)。 - 右栏应占用所有可用空间(
WPF中的*列大小):- 如果视口足够大,可以达到 1500 像素的限制。
- 如果小于 1500 像素,则最多占用所有剩余的视口空间。
- 左列应占用最小水平空间(
如果没有“居中 1500px”规则(1fr 或 auto 或 max-content 列大小对我有用),这不会是一个问题,但是正如您在上面的代码中看到的那样,当在父容器中时网格不会占用所有可用的 1500 像素。
StackOverflow 截取的宽度为 800px,这意味着这里根本不应该有黄色空间。
这种行为的问题是(在我的应用程序中)右列的内容可以由 js 代码重新加载,这导致它在几分之一秒内宽度为零。在当前布局下,这意味着左列“跳”向中心并返回一小部分时间,这看起来很糟糕。
我试图通过两种方式实现解决方案:
- 尝试不同的网格列大小,使其尽可能占据所有空间(似乎不起作用)。
- 在 1500 像素的容器内引入额外的容器,这将占用所有可用空间并将子网格置于左侧。我觉得这应该是可能的,但我不知道具体如何。
- 也许我应该在我的 sn-p 中使用 flex 容器以外的东西居中并限制子网格为 1500 像素?
如果 2 可以正常工作,视口 >1500px 的布局将如下所示:
我也有可用的 Bootstrap 4,但希望我可以专门使用 CSS 网格进行布局。
【问题讨论】: