我有以下布局:
.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中完全实现它们:
Auto
中的WPF
列大小。*
中的WPF
列大小):如果没有“居中的1500像素”规则(1fr
或auto
或max-content
列大小对我有用,那么这将不是问题,但是正如您在上段代码中看到的那样)不会占用所有可用的1500像素。
StackOverflow的剪切宽度为800像素,这意味着此处根本不应该有黄色空间。
这种行为的问题是,右列的内容(在我的应用中)可以通过js代码重新加载,这导致其零秒宽度为零。在当前布局下,这意味着左列“跳”向中心并返回几分之一秒,这看起来很糟糕。
我试图以两种方式实现解决方案:
如果2可以正常工作,则视口> 1500px的布局应如下所示:
我也有Bootstrap 4,但希望我可以将CSS网格专门用于布局。
我们可以简单地使用margin:auto
居中
[container] {
/* display: flex; */
/* align-items: center; */
/* flex-direction: column; */
background-color: #ddff33
}
[widthconstraint] {
max-width: 1500px;
margin:auto;
background-color: #ccaa44;
/* display: flex; */
/* align-items: first baseline; */
/* flex-direction: column; */
}
.table {
display: grid;
/* grid-template-columns: fit-content(100%) auto; */
grid-template-columns: auto 1fr;
}
.grid-item {
height: 50px;
padding: 8px;
border: 1px solid grey;
}
.a {
background-color: #feb5f5;
}
.b {
background-color: #76daff;
}
<div container>
<div widthconstraint>
<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>
您的代码的问题是,弹性项默认情况下为flex-shrink:1;flex-grow:0;
,因此它们不会增长以填充父项,它们会收缩以适合其内容。如果您想使用flexbox居中,则修复很明显。
[container] {
display: flex;
/* align-items: center; */
/* flex-direction: column; */
justify-content: center;
/* Align horizontally */
background-color: #ddff33
}
[widthconstraint] {
flex: 1 0 0;
max-width: 1500px;
background-color: #ccaa44;
display: flex;
/* align-items: first baseline; */
/* flex-direction: column; */
}
.table {
flex: 1 0 0;
display: grid;
/* grid-template-columns: fit-content(100%) auto; */
grid-template-columns: auto 1fr;
}
.grid-item {
height: 50px;
padding: 8px;
border: 1px solid grey;
}
.a {
background-color: #feb5f5;
}
.b {
background-color: #76daff;
}
<div container>
<div widthconstraint>
<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>
注意:该代码是自解释性的,但是,如果您有任何疑问,请务必提出。我冒昧地整理了一下代码