css - 如何准确计算弹性项目的假设主要尺寸 - CSS Spec问题
问题描述
我有固定宽度为 600 像素的 flex 容器。它的弹性项目有flex-basis: 0
1 像素的边框和 16 像素的填充。根据规范,此类项目的 flex 基本大小应为 0(基于规范https://www.w3.org/TR/css-flexbox-1/#algo-main-item中的信息,E 部分后的第一段)。此类物品的假设主要尺寸是多少?34 像素(边框 + 填充),0 像素还是 -34 像素?通过阅读规范,我并不完全确定这一点。
现在在根据Spec 第 9.7 节 Resolving flexible lengths计算弹性项目大小时。弹性系数将是flex-grow
。在这里,根据我的实验,我猜测假设的主要尺寸实际上是 34 像素(不是 0 或 -34 像素),因此该项目没有被冻结。但是初始可用空间不会是 600px(因为 flex-base size 为 0),而只有 566px(我们从容器大小中提取了假设的主要大小,600px - 34px = 566px)。
这是正确的假设吗?
解决方案
是,对的。在规范中,您可以阅读:
假设的主尺寸是根据其使用的最小和最大主尺寸(并将内容框尺寸设置为零)固定的项目的弹性基本尺寸。
所以你的最小尺寸是34px
(填充和边框),并且项目不会像你注意到的那样被冻结。如果您正在使用flex-shrink:1
(这是默认值)和flex-grow:0
.box {
border:1px solid;
display:flex;
width:600px;
}
.box div {
padding:16px;
border:1px solid red;
background:blue;
flex-shrink:1;
flex-basis:0;
}
.box span {
width:100%;
flex-grow:1;
flex-basis:100%;
background:green;
}
<div class="box">
<div></div> <span></span>
</div>
正如你所看到的,元素不会因为它被冻结而收缩。
如果使用弹性收缩因子:任何弹性基本尺寸小于其假设主尺寸的项目
推荐阅读
- c++ - 将指向成员函数的指针传递给单独的线程
- flutter - Flutter 命令卡在等待启动锁
- reactjs - 刷新访问令牌并调用转发(操作)后不重新执行查询
- node.js - 使用 Node.js 和命令提示符更新了 Discord Bot 问题
- c# - 有什么方法可以知道方法中是否正在等待正在运行的方法?
- r - 包“st_read”不可用(对于 R 版本 4.0.2)
- python - SQL 语句到 sqlalchemy ORM 查询 API
- python - sympy 中的 evalf 和 subs 对单个变量表达式返回表达式而不是预期的浮点值
- .net-core - 如何在 blazor GetFromJsonAsync 中传递多个参数?
- opencl - OpenCl 无法使用“printf”编译内核