我想要布局与此类似的unicode字形:
所展示的集合 (字母表、辅音字母、元音附标文字、音节文字等) 可能有 13 到 100 个项目,因此可能有一组包含 99 个项目,或者一组包含 16 个项目,等等。
如何才能最美观地(自动地)布局元素(以便在响应时也能很好地布局)?这是我默认使用 flexbox 的情况:
每个项目都有固定的高度,并且宽度是响应的(但每个元素都相同)。
目标是让每行包含偶数或奇数个项目。这样所有垂直列都会对齐(并且不会像我的动画 gif 那样,偶数行/奇数行混杂在一起)。
- 是否可以用数学公式来计算“每行需要 5 个项目,但最后一行有 3 个(或 1 个)”之类的东西?给出总数,例如 99?
您可能会怎样做呢?
我有一个 React 组件,它执行 Flexbox 布局,例如<Grid minWidth={96} gap={8} maxColumns={5} breakpoints={[5, 3, 1]} />
,其中breakpoints
是每行允许的项目数,maxColumns
是最大列数(断点/maxColumn 有点多余,您可以定义其中一个,也许我稍后会清理它)。所有这些信息可能都不相关,但以防万一,这只是我的响应式网格组件。
我怎样才能以某种方式将总数除以 x来确定它应该是偶数行还是奇数行,然后将maxColumns
或设置breakpoints
为“最紧凑”的值?例如:
- 如果有26 个元素,则最好是 6 行,每行 4 个,然后是 1 行,每行 2 个。- 如果有27 个元素,
它的“美”可能是主观的,并没有明确的规则来定义什么是最美的。只是寻找那些不容易在末尾留下孤立节点,然后在所有其他行上都有 7 个项目的元素。理想情况下,我们有:
- 3 至 7 列之间。
- 最后一行的项目数必须与所有前一行相同,或者不少于
maxRowCount - 2
(因此,如果所有行都有 7 个,则最后一行只能有 5 个或 7 个,或者如果所有行都有 5 个,则最后一行只能有 3 个或 5 个,等等)。 - 行项目有一个
minWidth: 96px
,并会增长以填充空间。一旦我们掌握了此工作原理的基本知识,我就可以弄清楚如何使事物具有响应性,但假设存在containerWidth
。
所以在我的脑海里,假设我们有containerWidth === 700px
。然后,,700/96 == 7+
所以每行可能有 7 个。如果我们有 99 个项目(例如),那么99 % 7 == 1
,所以7
不会起作用,因为最后一行会有 1 个。6
不会起作用,因为99
是偶数,所以尝试5
? 99 % 5 == 4
,那不会起作用,因为4
是偶数。所以尝试3
,,99 % 3 == 0
这样就可以按原样工作,使用它!
您将怎样实现这样的目标?
这样的事情似乎是正确的,但我是否正确解决了它?
这是一个反复测试列数是否符合您的条件的示例