css 网格布局每行列数不同
css grid layout different number of columns in each row
我有一个这样的网格容器:
<div class="container">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
<div class="d">D</div>
<div class="e">E</div>
</div>
我正在使用 grid-template-areas
来定位它们:
.container {
display: grid;
grid-template-areas:
'a b .'
'c d e';
}
.a {grid-area: 'a';}
.b {grid-area: 'b';}
.c {grid-area: 'c';}
.d {grid-area: 'd';}
.e {grid-area: 'e';}
看起来像这样:
_____________
| A | B | |
| C | D | E |
但是,我希望每行中的列数独立于其他行,所以我希望这样:
grid-template-areas:
'a b'
'c d e';
我想要以下结果:
_____________
| A | B |
| C | D | E |
上面的代码不起作用。我想出的唯一解决方案是获取每行列数的最小公分母:2 x 3 = 6。然后我将每个区域重复必要的次数:
grid-template-areas:
'a a a b b b'
'c c d d e e';
问题是我可能有一个200左右的lcd,这在计算和渲染时可能会很慢。
有没有什么办法可以不做上述的事情就可以做到这一点?我仍然需要使用一个网格布局,以便当屏幕尺寸不同时我可以完全移动所有元素,这意味着我不能只为每一行使用单独的网格。
我不确定您是否可以使用网格轻松地做到这一点,但是使用 flexbox 则很容易做到,并且您可以随时调整 order
属性 以更改小屏幕上的布局。
.container {
display:flex;
flex-wrap:wrap;
height:300px;
}
.a,.b {
flex-basis:calc(100% / 2);
}
.c,.d,.e {
flex-basis:calc(100% / 3);
}
.container > div {
border:1px solid;
box-sizing:border-box;
}
<div class="container">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
<div class="d">D</div>
<div class="e">E</div>
</div>
我有一个这样的网格容器:
<div class="container">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
<div class="d">D</div>
<div class="e">E</div>
</div>
我正在使用 grid-template-areas
来定位它们:
.container {
display: grid;
grid-template-areas:
'a b .'
'c d e';
}
.a {grid-area: 'a';}
.b {grid-area: 'b';}
.c {grid-area: 'c';}
.d {grid-area: 'd';}
.e {grid-area: 'e';}
看起来像这样:
_____________
| A | B | |
| C | D | E |
但是,我希望每行中的列数独立于其他行,所以我希望这样:
grid-template-areas:
'a b'
'c d e';
我想要以下结果:
_____________
| A | B |
| C | D | E |
上面的代码不起作用。我想出的唯一解决方案是获取每行列数的最小公分母:2 x 3 = 6。然后我将每个区域重复必要的次数:
grid-template-areas:
'a a a b b b'
'c c d d e e';
问题是我可能有一个200左右的lcd,这在计算和渲染时可能会很慢。
有没有什么办法可以不做上述的事情就可以做到这一点?我仍然需要使用一个网格布局,以便当屏幕尺寸不同时我可以完全移动所有元素,这意味着我不能只为每一行使用单独的网格。
我不确定您是否可以使用网格轻松地做到这一点,但是使用 flexbox 则很容易做到,并且您可以随时调整 order
属性 以更改小屏幕上的布局。
.container {
display:flex;
flex-wrap:wrap;
height:300px;
}
.a,.b {
flex-basis:calc(100% / 2);
}
.c,.d,.e {
flex-basis:calc(100% / 3);
}
.container > div {
border:1px solid;
box-sizing:border-box;
}
<div class="container">
<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
<div class="d">D</div>
<div class="e">E</div>
</div>