css - 将包裹的弹性项目保持在左侧,而其他项目居中
问题描述
我正在尝试使用margin: auto
. 当 wrap 发生时,被包裹的项目也会在它自己的容器中居中:
有没有办法将包裹的物品保持在左侧,而其他所有物品都居中?
.parent {
display: flex;
flex-wrap: wrap;
height: 100px;
}
.children {
flex: 1;
border: 1px solid black;
max-width: 300px;
min-width: 300px;
margin: auto;
height: 100px;
margin-top: 1rem;
}
<div class="parent">
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
</div>
解决方案
您是说您希望项目居中,但是当只有一个项目可以包装时,您希望它左对齐。
问题是 flex 容器中实际上没有左对齐。一切都居中,基于行中的可用空间。所以最后一行中的单个项目对上面发生的事情没有任何概念,也没有什么可对齐的。
如果您左对齐最后一项(在更宽的屏幕上),会发生以下情况:
.parent {
display: flex;
flex-wrap: wrap;
}
.children {
border: 1px solid black;
max-width: 300px;
min-width: 300px;
margin: auto;
height: 100px;
margin-top: 1rem;
}
.children:last-child {
margin-left: 0;
}
<div class="parent">
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
</div>
你需要的是一个嵌套的网格结构。
用于建立居中的顶级网格。
用于包装的嵌套网格。
在下面的演示中,您会发现一个三列网格。左右列是空的(间隔)项,使用 CSS 伪元素创建,并设置为相等的宽度。这使中间项目居中。
中间项也是一个网格容器。使用repeat()
和auto-fill
函数,项目可以换行,单个项目左对齐。
body {
display: grid;
grid-template-columns: auto 1fr auto;
}
body::before,
body::after {
content: ''; /* in grid (and flex) layouts, pseudo-elements on the container
are treated as items */
}
.parent {
display: grid;
grid-template-columns: repeat(auto-fill, 300px);
grid-auto-rows: 100px;
grid-gap: 10px;
justify-content: center; /* centers the columns (not the items, like in flex) */
}
.children {
border: 1px solid black;
}
<div class="parent">
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
<div class="children"></div>
</div>
jsFiddle 演示
推荐阅读
- c# - 如何在 C# 中为函数提供不同的返回值
- php - Bootstrap 3 日历?
- java - Intent-Filter 允许通过 URL 启动或应用出现在 Android 启动器中
- c# - 避免 WPF 状态栏在窗口垂直调整大小时增加其高度
- java - 有没有办法利用表(天蓝色存储)客户端 API 使用 CosmosDb 设置项目级别 TTL(生存时间)?
- python - 使用 psutil 获取带有进程名称的进程 ID
- php - 如何在php中将三元运算符与数组一起使用?
- java - IBatis 在一种方法中执行多个 sql 语句与 Oracle DB 一起使用,这可能吗?
- maven - 列出 maven-central 注册表中的所有公共包
- php - Laravel 验证 Auth::user()->id;