gpt4 book ai didi

具有固定宽度元素的 Css 网格,元素的间距/中心问题

转载 作者:行者123 更新时间:2023-12-04 03:30:42 26 4
gpt4 key购买 nike

我目前正在使用具有固定高度和宽度的卡片组件进行 CSS 网格布局。在大屏幕上,我没有问题,装订线的大小合适。在小宽度上,我希望装订线始终与大屏幕上的一样,以避免卡片组件之间出现大间隙。

下面是示例代码,我们可以在其中切换不同的网格大小:

document.querySelectorAll("[data-width]").forEach((item) => {
item.addEventListener("click", (event) => {
document.querySelector(".cards-grid-layout").style.width =
item.dataset.width;
});
});
.cards-grid-layout {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(256px, 1fr));
grid-gap: 56px 40px;
margin: auto;
max-width: 1144px;
justify-items: center;
}

.card {
width: 256px;
height: 360px;
display: inline-block;
vertical-align: top;
overflow: hidden;
position: relative;
margin-bottom: 0;
border: 1px solid #ddd;
}

.card-image {
height: 160px;
}

.card-image IMG {
width: 100%;
height: 100%;
object-fit: cover;
}

.toolbar {
max-width: 1144px;
margin: 16px auto 36px auto;
}
.toolbar A {
color: blue;
border: 1px solid #DDD;
padding: 8px;
cursor: pointer;
}
.toolbar A:hover {
background-color: #EEE;
}
<div class="toolbar">
<a class="" data-width="1144px">Full width</a>
<a class="" data-width="1080px">3 cards per line</a>
<a class="" data-width="800px">2 cards per line</a>
<a class="" data-width="480px">1 card per line</a>
</div>

<div class="cards-grid-layout">
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>

</div>

我的 css 网格具有以下代码:

.cards-grid-layout {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(256px, 1fr));
grid-gap: 56px 40px;
margin: auto;
max-width: 1144px;
justify-items: center;
}

还有我固定宽度/高度的卡片:

.card {
width: 256px;
height: 360px;
display: inline-block;
vertical-align: top;
overflow: hidden;
position: relative;
margin-bottom: 0;
border: 1px solid #ddd;
}

水平gutter为56px宽的大屏案例:

The large screen case where horizontal gutter is 56px wide

水平间距仍为 56px,但每张卡片的左侧/右侧都有空白区域的较小屏幕情况:

enter image description here

有没有办法解决这个问题?

最佳答案

只需使用 grid-template-columns: repeat(auto-fit, 256px) 始终具有相同的列宽并使用 justify-content:center 将它们居中/p>

document.querySelectorAll("[data-width]").forEach((item) => {
item.addEventListener("click", (event) => {
document.querySelector(".cards-grid-layout").style.width =
item.dataset.width;
});
});
.cards-grid-layout {
display: grid;
grid-template-columns: repeat(auto-fit, 256px);
grid-gap: 56px 40px;
margin: auto;
max-width: 1144px;
justify-items: center;
justify-content: center;
}

.card {
width: 256px;
height: 360px;
display: inline-block;
vertical-align: top;
overflow: hidden;
position: relative;
margin-bottom: 0;
border: 1px solid #ddd;
}

.card-image {
height: 160px;
}

.card-image IMG {
width: 100%;
height: 100%;
object-fit: cover;
}

.toolbar {
max-width: 1144px;
margin: 16px auto 36px auto;
}
.toolbar A {
color: blue;
border: 1px solid #DDD;
padding: 8px;
cursor: pointer;
}
.toolbar A:hover {
background-color: #EEE;
}
<div class="toolbar">
<a class="" data-width="1144px">Full width</a>
<a class="" data-width="1080px">3 cards per line</a>
<a class="" data-width="800px">2 cards per line</a>
<a class="" data-width="480px">1 card per line</a>
</div>

<div class="cards-grid-layout">
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://picsum.photos/265/160" />
</div>
</div>

</div>

关于具有固定宽度元素的 Css 网格,元素的间距/中心问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66888829/

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