gpt4 book ai didi

html - 如何在 CSS 网格中的行之间设置不同的列宽?

转载 作者:行者123 更新时间:2023-12-03 08:46:44 25 4
gpt4 key购买 nike

我需要创建如所附图像所示的网格项。第一项需要为 45%,第二项和第三项需要为 52.5%,其余项需要各为 50%。我无法更改 HTML,因为所有网格子项都来自循环。所以我无法通过编写的CSS来实现它,检查代码片段,通过我的CSS,它只能使左侧所有元素的宽度为50%或45%,但是如何将元素的宽度从4更改为其余的元素。

是否可以在不更改 HTML 的情况下实现?

enter image description here

.atul {
display: grid;
grid-template-columns: 45% 52.5%;
grid-template-rows: auto;
grid-gap: 2.5%;
grid-template-areas: "card1 card2"
"card1 card3";
}

.card:nth-child(1) {
grid-area: card1;
}

.card:nth-child(2) {
grid-area: card2;
}

.card:nth-child(3) {
grid-area: card3;
}
<div class="atul">
<div class="card" style="background-color: red;">Card 1</div>
<div class="card" style="background-color: green;">Card 2</div>
<div class="card" style="background-color: yellow;">Card 3</div>
<div class="card" style="background-color: skyblue;">Card 4</div>
<div class="card" style="background-color: skyblue;">Card 5</div>
<div class="card" style="background-color: skyblue;">Card 6</div>
<div class="card" style="background-color: skyblue;">Card 7</div>
<div class="card" style="background-color: skyblue;">Card 8</div>
<div class="card" style="background-color: skyblue;">Card 9</div>
<div class="card" style="background-color: skyblue;">Card 10</div>
<div class="card" style="background-color: skyblue;">Card 11</div>
<div class="card" style="background-color: skyblue;">Card 12</div>
<div class="card" style="background-color: skyblue;">Card 13</div>
</div>

最佳答案

要实现此目的,您需要为所有三种长度(42.5%、48.75% 和 52.5%)找到一个公共(public)分隔线。使用通用分隔线,您可以创建正确数量的列来容纳每个网格区域。

在下面的示例中,我创建了 400 列,每列宽度为 0.25% (400 * .25 = 100%)。

然后它跨越正确数量的列跨越网格区域:

45.00 / .25 = 180

48.75 / .25 = 195

52.50 / .25 = 210

这可能不完全是您正在寻找的东西,但希望这个概念可以帮助您前进。

没有对 HTML 进行任何更改。

.atul {
display: grid;
grid-template-columns: repeat(400, .25%);
grid-auto-rows: 50px; /* for demo only */
grid-row-gap: 30px; /* note that you need to create column gaps through
the proper distribution of columns, because if you
use `grid-column-gap`, it will add a gap between
all 400 columns */
}

.card:nth-child(1) {
grid-column: 1 / 180;
grid-row: 1 / 3;
}

.card:nth-child(2) {
grid-column: -1 / -210; /* starting at the end line of the grid
(works only in explicit grids) */
grid-row: 1 / 2;
}

.card:nth-child(3) {
grid-column: -1 / -210;
grid-row: 2 / 3;
}

/* starting at the 4th item, target even items only */
.card:nth-child(n + 4):nth-child(even) {
grid-column: 1 / 195;
}

.card:nth-child(n + 4):nth-child(odd) {
grid-column: -1 / -195;
}

.card:nth-child(4),
.card:nth-child(5) {
grid-row: 3;
}

.card:nth-child(6),
.card:nth-child(7) {
grid-row: 4;
}

.card:nth-child(8),
.card:nth-child(9) {
grid-row: 5;
}

.card:nth-child(10),
.card:nth-child(11) {
grid-row: 6;
}

.card:nth-child(12),
.card:nth-child(13) {
grid-row: 7;
}
<div class="atul">
<div class="card" style="background-color: red;">Card 1</div>
<div class="card" style="background-color: green;">Card 2</div>
<div class="card" style="background-color: yellow;">Card 3</div>
<div class="card" style="background-color: skyblue;">Card 4</div>
<div class="card" style="background-color: skyblue;">Card 5</div>
<div class="card" style="background-color: skyblue;">Card 6</div>
<div class="card" style="background-color: skyblue;">Card 7</div>
<div class="card" style="background-color: skyblue;">Card 8</div>
<div class="card" style="background-color: skyblue;">Card 9</div>
<div class="card" style="background-color: skyblue;">Card 10</div>
<div class="card" style="background-color: skyblue;">Card 11</div>
<div class="card" style="background-color: skyblue;">Card 12</div>
<div class="card" style="background-color: skyblue;">Card 13</div>
</div>

jsFiddle demo

关于html - 如何在 CSS 网格中的行之间设置不同的列宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61183572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com