我希望所有标签的大小都相同,而不是一堆大小不一的链接。但是,我的目标是尽量减少制作云所需的空间量,也就是尽量减少使用的线数。
举个例子:
(来源:stevethomas.com.au)
看起来像任何普通的标签云。但是,请注意“roughdiamond”标签周围的所有额外空间,这些空间可以被底部附近的“stone”等其他标签填充,这可以有效地从云中消除一整条额外的线。
在开始新的一行之前,我将如何让单词填满它们上方的任何空间?我不是在谈论重组它们以找到所需的绝对最小行数。如果我浏览图像中的列表,“pendant”、“howlite”和“igrice”会转到第 1 行,将其填满,“roughdiamond”会转到第 2 行,因为第 1 行已满,“tourmaline”会转到第 3 行,因为它不能放在第 1 行或第 2 行,与“emberald”相同,但“pearl”会转到第 2 行,因为它可以放在第 2 行,因为有额外的空间。我想在 CSS 中可能会有某种方法可以做到这一点,它只会导致链接折叠到它可以容纳的任何可填充空间中。
最佳答案
我怀疑这在 CSS 中是否可行,因为这需要特定的计算才能以最佳方式重新排列单词。
您实际要解决的问题是二维 bin packing相同大小的垃圾箱和可变大小的元素的问题。
如 this answer 中所述对于关于装箱的问题,将您的元素从最大到最小排序,然后在大单词之间放置较小的单词通常会产生相当好的近似值。您将不得不尝试使用您将使用的单词类型来确定这是否适合您(他的方法可能会导致许多小单词在您的云底部分组)。
关于php - 设计一种不同类型的标签云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2761838/