【发布时间】:2022-01-21 07:08:15
【问题描述】:
我有一系列从数据库中获取的图像,当添加三个或更多图像时,它会直观地显示三列。
当图像少于三个时,因为我使用的是display: grid;,所以它当前位于父容器的左侧(在代码示例中,我只是使用红色框来表示图像)。
是否有这样的方法,以便当存在一到两个图像时,这些图像被对齐到父元素的中心。我很感激我可以使用 javascript 来检测存在多少图像,如果它少于三个,添加一个类并将包装器更改为 display: flex,但我想知道这种布局是否可以仅使用 CSS?
由于布局的性质,当存在超过三个图像时,我确实需要使用 CSS Grid。
注意:我已经注释掉了 HTML 中的两个红色框,以显示只有一个红色框存在时的初始问题。
Codepen:https://codepen.io/anna_paul/pen/xxXrVJQ
body {
display: flex;
justify-content: center;
margin: 0
width: 100%;
height: 100vh;
}
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 1rem;
max-width: 1250px;
}
.box {
width: 200px;
height: 200px;
background: red;
}
<div class="wrapper">
<div class="box"></div>
<!-- <div class="box"></div>
<div class="box"></div> -->
</div>
【问题讨论】:
-
你能解释一下为什么由于你的布局的性质,它必须是网格而不是弹性盒子吗? stackoverflow.com/questions/46276793/… 上的最新回答有帮助吗?
-
@AHaworth 因为图像网格的性质,以及使用网格而不是 flex 进行响应式操作要容易得多。
-
@paulo_cam 所以当有 1 或 2 张图像时,您需要将它们居中。当有 3 个或更多时,您希望它们左对齐?你能在 OP 中为每个用例显示所需的输出吗?并为容器添加边框,以便我们了解每种情况下的可用空间。
-
试试这个
.wrapper { display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto 1fr auto; grid-gap: 1rem; max-width: 1250px; justify-content: center; }