【发布时间】:2018-01-29 20:13:20
【问题描述】:
我正在处理的页面在 2 列中生成了许多元素,它们的水平年表如下:
1 2
3 4
5 6
7
由于列具有垂直年表,我实际上并没有使用列,而是使用各种浮动元素或内联块。
但是,由于生成的元素具有用户指定的内容,因此具有不可预测的高度,这会导致许多问题:
场景 1
如果左边的元素是一个浮点数,如果右边的元素较短,它将浮动到其他左边元素的右边,因为剩下的空间更多。 See illustration
场景 2
如果左元素是一个内联块,它会像一个具有clear属性的浮点数一样,左右元素之间的大小差异将保持“清除”,而不是被右浮动元素。 这将导致右列中出现尴尬的空间,因为那里的元素似乎想要跟随内联块上新行的开头。 See illustration
所需的最终结果类似于场景 2,但没有差距。有什么办法可以让2列不互相干扰吗?
解决方案
请参阅所选答案以了解如何将数组拆分为 2。 然后只需将 2 个数组中的每一个都包装在一个带有 float:left/right 属性的列元素中,就可以开始了。
【问题讨论】:
-
那真是太糟糕了。不过感谢您的提示。
-
其实等等,我可能有点误解你了。您是否必须按特定顺序渲染这些项目? (如果您不介意,您可以将这些项目呈现在两个单独的列中,其中一列包含项目 1、3、5、7,另一列包含项目 2、4、6):)
-
不,它们不必按该顺序呈现。我什至自己考虑过这个确切的解决方案,但我不完全确定如何将查询结果对象分成 2 个这样的批次。目前我只是用 PHP 中的 fetch_assoc() 函数循环遍历它。我已经通过简单地在循环内的 2 个状态之间切换变量来跟踪左侧和右侧。你能想出一种方法来有效地存储最终处于两种状态之一的所有结果,同时呈现另一种状态吗?
-
您希望其中有多大的数据集?比如一次渲染多少个元素以及它们可能包含多少数据?
-
相当小。可能不超过 20 个框,每个框使用 2 个数据点(一个整数和一个“文本”类型),实际上这些数组目前确实包含更多数据,但我可以在查询中切断其余部分而不会产生任何后果。虽然无法准确说出最终会有多少“套”,但很可能永远不会超过 50 套。
标签: css two-columns