我正在使用以下代码来创建相册(在 WordPress 中,但对于本示例来说,这无关紧要):
结果是这样的:
我希望最后一行的图片始终占据该行。所以,当只有一张图片时,将其宽度设置为 100%,高度设置为更大;当有两张图片时,将其宽度设置为 50%,高度设置为更大。
每个页面的图片数量都不一样。有什么建议吗?
.gallery {
display: grid;
grid-template-columns: auto auto auto;
gap: 8px;
}
.gallery>.img {
width: 100% !important;
position: relative;
padding-bottom: 75%;
}
.gallery img {
object-fit: cover;
object-position: 50%;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 100%;
width: 100%;
}
<div class="gallery">
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
<div class="img">
<img src="https://fastly.picsum.photos/id/266/200/300.jpg?hmac=nAZYC6vsnq4fuOzfge00Ylvi9ALRMbMA8wxBxIPTjs0">
</div>
</div>
从您的代码和 Temani Afif 的解释来看,您必须从六列网格布局开始,因此元素可以跨越三分之一行、一半行或整整一行。
下面的代码片段使用了您之前使用代码提出的相同方法。CSS 适用于
.gallery
带有 X 的容器的未知数量的子元素div.img
。我也切换了一些 CSS 规则:
grid
而不是absolute
,aspect-ratio
而是padding-bottom
。您可以保留自己的尺寸和位置,这仅供参考。下面是一个从 6 个元素减至 1 个元素的示例代码片段。网格中最后一个元素的位置通过https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes#tree-structural_pseudo-classes和 https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors/Selectors_and_combinators#subsequent-sibling_combinator进行过滤。
您可以依靠
:nth-child
特定图像来定位工作原理
网格有 3 列。
PHP 逻辑计算出最后一行有多少个图像($remaining)。
基于此,我们为最后一行图像分配一个自定义类。
在 CSS 中,我们使用 grid-column: span X 使最后一行图像跨越整行(对于 1 个图像)或一半(对于 2 个图像)。
我们还调整了 padding-bottom,使它们更高,以达到视觉平衡。