css - 在 css 中选择每行*的第一个子 * 并带有包装的弹性框(第一列?)
问题描述
我有一个基本上是“子 div 列表”的 flexbox。盒子的主要特点是自动包装。但是我注意到,由于孩子的包装价值,盒子的左边也有一个偏移量。
我想删除这个。我已经尝试通过给容器一个负填充来做到这一点:但这似乎是不允许的。
然后我试图为“每行的第一个孩子”找到一个选择器,但这也失败了。有没有办法在css中做到这一点?
或者,使网格display: grid
具有可变宽度的列,并根据内容自动计算列数(因此:换行)。
下面的例子:
.cont {
display: flex;
flex-wrap: wrap;
width: 100%;
position: relative;
border: solid 1px red;
padding-left: -16px;
justify-content: 'center';
}
.cell {
min-width: 20%;
border: solid 1px black;
margin: 8px 16px 8px 0;
}
.wide2 {
min-width: calc(50% - 2px);
}
.wide {
width: calc(50% - 16px);
}
<div class="cont">
<div class="cell wide">
wide
</div>
<div class="cell">
test
</div>
<div class="cell">
test
</div>
<div class="cell">
test second line, should also have zero margin to left
</div>
</div>
<div class="cont">
<div class="cell wide">
wide
</div>
<div class="cell wide2">
this should line up,<br> iff margin right is no longer there
</div>
</div>
解决方案
我相信这目前是不可能的,而且可能永远不会。
你看,如果你有那个选择器,你就可以实现这个:
.flexbox {
display: flex;
flex-wrap: wrap;
}
.flexbox .flex-item {
margin-left: 200px;
}
.flexbox .flex-item:first-of-flex-line {
margin-left: 0;
}
请注意,当margin-left: 0
of:first-of-flex-line
取消margin-left: 20px
规则时,它可能会使下一行的某些项目向上移动,就像无限循环一样。这将需要迭代布局,这似乎不太可能在浏览器中实现,因为它是昂贵的渲染。
推荐阅读
- xcode - 尝试使用 Xcode 与佳能的 EDSDK 合作
- c++ - C++20 模块 TS:还需要函数声明吗?
- qt - 制作一个 qmldir 文件
- ios - 为 iOS 开发创建证书
- coldfusion - 在新服务器上安装 ColdFusion Web 应用程序时收到通知
- java - Maven 运行配置不会选择活动配置文件,而 Spring 运行配置会选择
- r - 如何将时间序列的趋势评估为 R 中的数字度量?
- google-sheets - 如何在谷歌文档查询中将 2 个文本连接与“AND”和“OR”语句结合起来?
- python - 使用 .cfg 配置文件运行一个简单的 python 烧瓶应用程序。我似乎无法返回配置值,出现键控错误
- angular - 如何禁用部分 Angular 材质滑块