【发布时间】:2020-10-21 08:29:14
【问题描述】:
我有一个两行的网格布局:
- 标题和
- 内容部分有时有两列,有时只有一列。
基本上是带有内容布局的典型标题,除了我有时想动态关闭右栏。
- 标题的高度必须由其内容决定。好的:
grid-template-rows: min-content auto; - 标题必须跨越一列或两列。但这失败了。我尝试了以下方法:
这仅在只有一列时才有效。如果有两列,则此行不会跨越它们。
.header {
grid-row-start: 1;
grid-column-start: 1;
grid-column-end: auto;
}
同
.header {
grid-row-start: 1;
grid-column: 1 / span auto;
}
这仅在有两列时有效。 它会在屏幕上为第二列创建一个位置,即使没有。
.header {
grid-row-start: 1;
grid-column: 1 / span 2;
}
- 最后,我对这两列的宽度不同这一事实感到有些困惑。可能与
auto-fill有关,但我无法真正理解这一点,是否有解决方案?
这是代码:
.header {
grid-row-start: 1;
grid-column-start: 1;
grid-column-end: auto;
}
.left {
grid-row-start: 2;
grid-column-start: 1;
grid-column-end: 1;
}
.right {
grid-row-start: 2;
grid-column-start: 2;
grid-column-end: 2;
}
.wrapper {
height: 100%;
width: 100%;
display: grid;
grid-gap: 10px;
grid-column: 1 / -1;
grid-template-rows: min-content auto;
}
<div style="height: 300px;">
<div class="wrapper">
<div class="header" style="background-color:#006;">
HEADER
</div>
<div class="left" style="background-color:#600;">
LEFT
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim.
</div>
<div
class="right"
v-if="true"
style="background-color:#060;">
RIGHT
</div>
</div>
</div>
结果如下:
【问题讨论】:
-
两件事:
grid-template-columns: repeat(auto-fill, 1fr);无效。您不能自动填充小数尺寸。如果已解决,只需在标题上添加grid-column: 1 / -1即可使其填满行。 -
谢谢你,但是,结果是一样的,因为列宽似乎与内容有关。尤其是网格,应该是布局优先的,对吧?
-
列的大小不同,因为您的
grid-template-columns指令由于无效而被完全忽略。将其设为(例如)grid-template-columns: 1fr 1fr,您将拥有两个相等的列。我知道这不是您想要有条件地添加列的内容,但为此您需要另一种解决方案。绝对不是repeat(auto-fill, 1fr)。