css - 这个 flexbox 布局中的 CSS 计算从何而来?
问题描述
我在最近看到的一个网站上看到了这样的 flexbox 布局,我想知道它13.333px
的规则来自哪里flex: 0 0 calc(33.333% - 13.333px)
。
每个弹性项目都有一个margin-left
集合,然后显然要使左侧与容器的侧面齐平,您使用.flex .flex-item:nth-child(3n+1)
规则从每行的开头删除边距。
在我看来,这意味着每行都有 40px 的填充,因为两个项目仍然有边距。所以,我希望它是33.333% - 40px
。但是,这样做会在容器中留下额外的空间。
从哪里来13.333px
?我假设这只是我没有得到的数学知识。
.container {
max-width: 1140px;
margin: 0 auto;
}
.flex {
display: flex;
flex-wrap: wrap;
}
.flex .flex-item {
flex: 0 0 calc(33.333% - 13.333px);
margin: 0 0 16px 20px;
}
.flex .flex-item:nth-child(3n+1) {
margin-left: 0;
}
img {
max-width: 100%;
height: auto;
}
<div class="container">
<div class="flex">
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
</div>
</div>
解决方案
这是扩展的公式,因此您可以更好地查看。20px * 2
基本上,我们从由 2 个13.33px
图像2/3 * 20px
(
.container {
max-width: 1140px;
margin: 0 auto;
}
.flex {
display: flex;
flex-wrap: wrap;
}
.flex .flex-item {
flex: 0 0 calc((100% - 20px * 2)/3);
margin: 0 0 16px 20px;
}
.flex .flex-item:nth-child(3n+1) {
margin-left: 0;
}
img {
max-width: 100%;
height: auto;
}
<div class="container">
<div class="flex">
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
<div class="flex-item"><img src="https://via.placeholder.com/800x400" /></div>
</div>
</div>
推荐阅读
- git - Azure DevOps - 如何通过 git commit 更改工作项的状态
- google-cloud-platform - 在大查询中将多行转换为单个键值对行/列
- c++ - Win32 API 调用引发访问冲突
- sumo - 如何在 SUMO 或 FLOW 中实现红绿灯的最长队列优先规则?
- python - 导入的 python xarray 模块的属性不起作用
- api - 在发布请求中将密码视为纯文本是很常见的吗?
- python - 没有从 describe_images 获取信息?
- mysql - 使用 NodeJs 检查 MySQL 数据库中是否存在电子邮件
- flask - 使用表单中的布尔值更新 sqlalchemy
- julia - 比较运算符在带有条件运算符的控制流中使用时在 Julia 脚本文件中不起作用