New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
flex-basis 实现与浏览器有差异 #159
Comments
这点不对,应该是:hypothetical = clamp(min_main_size, flex_base_size, max_main_size) 当basis>max content时,取max。 |
flex item main size 的计算规则有多条,你上面列举的规则对应的是 flexBasis 大于 max content 的 case 要如何处理,但是我 issue 中的 case 是 flex basis 小于 minimum main size 时要如何处理,比如 flex-basis 为 0 时 flex item 的宽度要如何计算,规范中定义的是 flex-basis 不能小于 minimum main size,也就是说当 minimum main size 不为 0 时,flex-basis 设为 0 其实是不生效的。参考 issue 中的示例,flex: 1 的 flex-item 对应的 flex-basis 实际为 0,但是浏览器计算出来的 height 并不是 0 而是该 flex item 的内容高度。 |
我知道,我是补充下第2点,因为看说明以为写的只是考虑最小而不考虑最大。如果都考虑了就没问题。 hypothetical = clamp(min_main_size, flex_base_size, max_main_size) 这个伪代码意思就是假设主尺寸取值是clamp函数,在min和max之间。 |
<div style="display:flex;width:100px;height:30px;border:1px solid #0F0">
<span style="width:50px;height:50px;background:#F00"></span>
<span style="flex:1 1 0;background:#00F"></span>
</div> var div = document.createElement('div');
div.style.display = 'flex';
div.style.width = '100px';
div.style.height = '30px';
div.style.border = '1px solid #0F0';
var span = document.createElement('span');
span.style.backgroundColor = '#F00';
span.style.width = '50px';
span.style.height = '50px';
div.appendChild(span);
span = document.createElement('span');
span.style.backgroundColor = '#00F';
span.style.flexGrow = 1;
span.style.flexShrink = 1;
span.style.flexBasis = '0';
div.appendChild(span);
document.body.appendChild(div); |
<div style="display:flex;width:100px;border:1px solid #0F0">
<span style="flex:1 1 0;">哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</span>
<img style="height:50px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAQMAAABKLAcXAAAABlBMVEX1CAD////Q9ly2AAAAhUlEQVQ4y93TMQ6AIAwF0BIHRo/AUTyaHM2jeARGBoNSkvqNkBASh8YO/rzR9kOqZjllth8pmqc8OSgRWSgSGSjkEL3D53C3KM8sSiwrOlhTW5FlRIFFbe1Fa0v85RyWL3IqNPwPnb109onNd2+Ea+LSzRYg0J66WWhd1Ui0Vc/L+Vaa5gJ+8ifpfqdy4gAAAABJRU5ErkJggg=="/>
</div> var div = document.createElement('div');
div.style.display = 'flex';
div.style.width = '100px';
div.style.border = '1px solid #0F0';
var span = document.createElement('span');
span.style.flexGrow = 1;
span.style.flexShrink = 1;
span.style.flexBasis = 0;
var text = document.createTextNode('哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈');
span.appendChild(text);
div.appendChild(span);
var img = document.createElement('img');
img.style.height = '50px';
img.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAQMAAABKLAcXAAAABlBMVEX1CAD////Q9ly2AAAAhUlEQVQ4y93TMQ6AIAwF0BIHRo/AUTyaHM2jeARGBoNSkvqNkBASh8YO/rzR9kOqZjllth8pmqc8OSgRWSgSGSjkEL3D53C3KM8sSiwrOlhTW5FlRIFFbe1Fa0v85RyWL3IqNPwPnb109onNd2+Ea+LSzRYg0J66WWhd1Ui0Vc/L+Vaa5gJ+8ifpfqdy4gAAAABJRU5ErkJggg==';
div.appendChild(img);
document.body.appendChild(div); |
上面几个用例确实有 bug,我这边着手解决下,感谢提出问题。 |
前面两个 flex item 百分比与高度问题已经 fix,最后一个文本 width 问题已登记到 #401 |
使用的 Kraken 版本 | What version of kraken are you using
0.7
重现步骤 | Steps To Reproduce
flex item 主轴的 size 由 width(或者 height 视 flex-direction 而定) 和 flex-basis 共同决定,以 flex-direction 为 row 为例:
目前 Kraken 是在 flex container 的 performLayout 中根据 flex-basis 来设置 flex item 的 constraints,但是根据 Flutter 的 layout 机制,在设置 constraints 时拿不到 children 的 size(children 尚未 layout),因此 flex-basis 需要延迟到 flex-item 自身的 layout 阶段做才行。
重现代码 | Code example:
预期结果 | Expected results:
实际结果 | Actual results:
The text was updated successfully, but these errors were encountered: