【发布时间】:2013-11-06 13:02:31
【问题描述】:
可能已经有解决方案或示例,但我一直找不到。
我想创建一个菜单,其中包含不同数量的菜单项,每个菜单项的宽度都不同(取决于它们的内容)。如果菜单项太多,我希望它们占据多行。
我的第一个解决方案是一个简单的浮动。很好,但是在行的末尾有一个不均匀的未占用空间:
忽略项目上的“文本”宽度相同。我只是画画很烂。想象一下,文本有不同的长度,但它们周围的填充相同。
有一个棘手的边框(仅在项目左侧的边框)我可以将它隐藏一点,但可点击区域仍然与上图的白色部分相同。悬停效果也揭示了这个技巧。
然后我对 text-align justify 做了一些研究,并找到了这样的解决方案:"text-align: justify;" inline-block elements properly?
乍一看,这正是我想要的。元素对齐正确,它们一见钟情就填满了可用空间。但是有一个根本的缺陷:它们之间有差距:
这是意料之中的,因为这会将我的元素视为文本中的单词。我找不到解决此问题的方法。
后来我开始在flexbox land 中四处寻找。这看起来很有前途的 flexbox 似乎是 css 的圣杯,但我还没有完全理解它。
基本上我想要的是这样的:
按钮填满可用空间,菜单是多行的(当一行元素过多时),整个菜单都是可点击的(具有可见的悬停效果)。
有没有办法做到这一点?
我对使用 javascript 支持的解决方案(例如计算和调整元素的宽度)犹豫不决。但是如果有一个非常干净的解决方案,我可能最终会使用它。
编辑:
菜单here 看起来不错,但前提是菜单是单行的。这会通过将最后一个元素添加到不同的列表并使用不可见的 :after { content ". . ." } 元素添加大量空间来破解最后一个元素。
【问题讨论】:
-
注释掉内联块元素之间的空格
-
@Pete 你的意思是内联块证明解决方案吗?这样就没有道理了。
-
一直在玩 flex 的东西,这在 chrome 和 IE10 中有效,但没有别的:jsfiddle.net/74AJD/6。我可能会使用 js 解决方案 - 这是您最好的选择,而 flex 框不受完全支持
-
如果它可以在所有主流浏览器上运行,那就太棒了!
-
@Pete 唯一的问题是 Firefox 是 missing multi line flexbox support。否则这正是我想要的。