可能已经有解决方案或示例了,但我找不到。
我想创建一个菜单,其中菜单项的数量不同,每个菜单项的宽度也不同(取决于其内容)。如果菜单项太多,我希望它们可以占用多行。
我的第一个解决方案是简单的浮动。这很好,但在行的末尾有一个不均匀的未占用空间:
忽略项目上的“文本”具有相同的宽度。我只是不擅长绘画。想象一下,这些文本长度不同,但周围的填充相同。通过巧妙的边框(仅在项目的左侧边框)我能够稍微隐藏这个问题,但可点击区域仍然与上图中的白色部分相同。悬停效果也会揭示这个技巧。
我做了一些关于text-align justify的研究,并找到了像这样的解决方案:"如何使行内块元素正确对齐:text-align: justify;"
乍一看,这正是我想要的。元素对齐得很好,在视觉上填满了可用空间。但是有一个根本性的缺陷:它们之间有间隙:
这是预期的,因为这将我的元素视为文本中的单词。我没有找到解决方法。后来我开始在flexbox land四处寻找。这看起来很有前途,flexbox似乎是css的终极目标,但我还没有完全理解它。
基本上,我想要的是这个: 按钮填满可用空间,菜单是多行的(当元素太多时为一行),整个菜单可点击(带有可见的悬停效果)。
有没有办法做到这一点?
我不确定是否要使用JavaScript解决方案(如计算和调整元素的宽度)。但如果有一个非常干净的解决方案,我可能会使用它。
编辑:
菜单这里看起来很不错,但只有当菜单是单行时才行。这通过将最后一个元素添加到另一个列表中,并使用不可见的:after { content ". . ." }
元素添加大量空间来进行破解。