我正在实现由CSS3柔性盒布局模块定义的W3C,它类似于用于xul的Mozilla盒模型。虽然这些标准指定了模型的行为方式,但它们没有给出应该如何实现它们的任何细节。
我感兴趣的模型的部分是:
特性1-5可以非常有效地实现。功能6是有问题的,因为我能想到的最有效的算法是相当天真的。该算法的工作原理如下:
步骤3是效率下降的地方。例如,如果列表中有十项,而最后一项具有约束,则算法计算前九项的大小,然后当到达第十项时,需要重做所有计算。我已经考虑过保持列表的排序,并首先调整所有受约束的框的大小,但是这需要增加复杂性和排序列表的开销。
考虑到这是浏览器和框架(XUL、.Net、Flex等)中相当常见的特性,我希望有一个公认的最佳解决方案。
发布于 2011-08-02 00:06:18
大多数箱/容器布局算法使用2通算法。在.NET (WPF)中,它们被称为“度量衡”和“排列”。每个控件都可以测量其内容,并在递归度量值传递中报告“所需的大小”。
在第二次传递(安排)期间,如果子女所需的大小不适合父级,则父级使用其布局算法向每个子级提供实际大小,例如,通过指定按期望大小加权的实际大小。最小/最大的尺寸,盒子的灵活性等可以在这里发挥作用。
有关WPF布局系统http://msdn.microsoft.com/en-us/library/ms745058.aspx的更多信息
Xul布局http://www-archive.mozilla.org/projects/xul/layout.html
https://stackoverflow.com/questions/6908846
复制