代码之家  ›  专栏  ›  技术社区  ›  animuson Hemanshu

设计不同类型的标签云

  •  10
  • animuson Hemanshu  · 技术社区  · 14 年前

    我希望我所有的标签都是相同的尺寸,而不是有一堆大小不同的链接。但是,我的目标是最小化制作云所需的空间量,也就是最小化使用的行数。

    举个例子:

    看起来像普通的标签云。不过,看看“RoughDiamond”标签周围的所有额外空间,这些空间可以由底部附近的其他标签(如“Stone”)填充,这可以有效地消除云中的整个额外行。

    在开始新的一行之前,我该怎么做才能让这些词填满它们上面可能的空间呢?我不是说要重新组织它们以找到所需的绝对最小行数。如果我浏览图片中的列表,“垂饰”、“豪利特”和“伊格丽丝”将进入第1行,将其填满,“粗糙钻石”将进入第2行,因为第1行已满,“电气石”将进入第3行,因为它无法在第1行或第2行上安装,与“灰烬”相同,但“珍珠”将进入第2行,因为它可以在那里安装,因为有额外的空间。我认为在CSS中可能有某种方法可以这样做,只会导致链接折叠到它可以容纳的任何可填充空间。

    举个例子:

    example

    看起来像普通的标签云。然而,看看“RoughDiamond”标签周围的所有额外空间,它可以由底部附近的“Stone”等其他标签填充,这可以有效地从云中消除整个额外的线条。

    在开始新的一行之前,我该怎么做才能让这些词填满它们上面可能的空间呢?我不是说要重新组织它们以找到所需的绝对最小行数。如果我浏览图片中的列表,“垂饰”、“豪利特”和“伊格丽丝”将进入第1行,将其填满,“粗糙钻石”将进入第2行,因为第1行已满,“电气石”将进入第3行,因为它无法在第1行或第2行上安装,与“灰烬”相同,但“珍珠”将进入第2行,因为它可以在那里安装,因为有额外的空间。我想在CSS中可能有某种方法可以做到这一点,它只会导致链接塌陷到它可以容纳的任何可填充空间中。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Community rcollyer    7 年前

    我怀疑这在CSS中是可能的,因为这需要特定的计算来优化地重新排列单词。

    你实际上想要解决的问题是二维的 bin packing 大小相等的箱子和大小可变的物品有问题。

    如上所述 this answer 对于一个关于箱子包装的问题,从最大到最小分类您的物品,然后在大的物品之间匹配较小的单词通常会得到一个相当好的近似值。你必须使用你将要使用的单词类型来尝试它,以确定这是否对你有用(他的方法可能会导致许多小单词组合在你的云端)。

        2
  •  2
  •   Alix Axel    14 年前

    这不是最佳解决方案,但可能(大多数情况下)比随机解决方案要好得多,比最佳解决方案快得多: 按字符串显示每个标记 长度 按降序排列的宽度 .

    这将给你一个最大值比最优解差14%的安排。

    编辑: 如果标签排序依据 斯特伦 宽度按升序排列。

        3
  •  0
  •   Mitch Dempsey    14 年前

    您可以尝试将它们放在一个与文本高度相同的分区中,然后将它们浮动到整个位置?