【发布时间】:2017-12-13 20:47:40
【问题描述】:
我想使用 CSS-Grid-Layout(最好使用明确的列网格)。 而且我想要一个灵活的项目,它可以吸收沿 x 轴的任何额外空间/跨越与其他项目未使用的列一样多的列。
完美的解决方案是让一个项目跨越所有未占用的列的属性(类似于 flex-property)——但我想这在 CSS-Grid 中是不可能的。
我试着举个例子:
以下布局使用位于网格上的多个元素。 我想要一个灵活的标题,如果“aside1”区域中的项目被剪切,它会吸收右侧的任何额外空间。
.grid{
display: grid;
grid-template-columns: none 1fr 1fr none;
grid-template-areas: "header header header aside1"
"nav main main aside2"
"nav main main aside3"
;
}
header {
grid-area: header;
}
main {
grid-area: main;
}
nav {
grid-area: nav;
}
.aside1 {
grid-area: aside1;
}
.aside2 {
grid-area: aside2;
}
.aside3 {
grid-area: aside3;
}
但是,当然,只要右侧有任何项目,标题就会留在它的列中,布局将如下所示:
在 Flexbox-Layout 中,我可以使用 flex: 1 属性来完成此操作。
在网格中...我想我需要一种方法来拥有一个盒子项目来吸收所有未使用的列。也许那是不可能的。
.grid{
display: grid;
grid-template-columns: none 1fr none;
}
header {
grid-column: 1 / ????;
grid-row: 1 / 2;
}
main {
grid-column: 2 / 3;
grid-row: 1 / 2;
}
nav {
grid-column: 2 / 3;
grid-row: 1 / 2;
}
.aside1 {
grid-column: 2 / 3;
grid-row: 1 / 2;
}
.aside2 {
grid-column: 2 / 3;
grid-row: 2 / 3;
}
.aside3 {
grid-column: 2 / 3;
grid-row: 3 / 4;
}
我想做的是用灵活的 xy 网格构建一个小型“框架”,类似于基础,但嗯.. 不是很酷(这是一个学校项目)。
我想知道是否可以同时构建一个网格系统:
Grid 项目,吸收沿 x 轴的任何可用空间/列 - 可以使用 flex-Grid 和基础。
跨越多行的网格项目 - 使用 flex-Grid 无法实现,请参阅:Is it possible for flex items to align tightly to the items above them?(第一个答案很好地解释了它)
我希望我让自己更清楚一点。
【问题讨论】:
-
我希望有类似的行为,就像您有一排带有弹性项目并且其中一个具有 flex:1 值而其他项目具有固定宽度时。 flex:1 项占用了固定项之间的所有空闲空间。所以它应该只跨越整个行,当它上面没有其他项目时。主要想法是有一个灵活的网格,其中可以切掉侧面的一个项目,而主要部分则填满所有可用空间。并使用 CSS-Grid-Layout 构建它。如果可能的话,只是感兴趣。
标签: css grid-layout css-grid