假设我有一个用户列表,每个用户都有一个与之相关的数字。每个用户的列表如下:
<span><a href="/user/Niet">Niet</a> ⇒ 2</span>
它们都使用以下样式:
.userlist>span {
display: inline-block;
padding: 2px 6px;
border: 1px solid currentColor;
}
这是它实际运作的示例:
好的,这看起来还不错,用户列表可能会变得很长,所以紧凑性在这里非常重要。我的问题是右边缘非常不一致,所以我想知道是否有任何改进的方法。
我的第一个想法当然是只在跨度上设置固定宽度。但是用户名宽度并不完全可预测。你可以有一个叫做iiiii
的人和一个叫做WWWWW
的人,但由于这不是等宽字体,所以你会得到"iiiii"和"WWWWW",在这里非常清楚地表现出不同的宽度。因此,“最大宽度”基本上将是允许的最宽字符W
乘以最大用户名长度。让我们试试吧...
噫。如果那是我要得到的结果,我还不如使用 <ul>
。接下来的想法是可能涉及 display:table
来使列的宽度保持一致,同时仍然保持动态性(假设大多数人都有合理的用户名(*咳咳*... 哦,原来是这样逃避Markdown... 呵呵...) - 但它确实会导致很多空白。
所以我的当前想法是某种对齐方式。对于文本来说,这个方法非常有效,对吗?但不幸的是,在这种情况下,text-align: justify
没有任何作用,可能是因为要进行对齐的元素之间没有空格。
我的最后尝试是使用flexbox,在站点的新设计中已经成功使用了。让我们看看将容器的 display: flex; flex-wrap: wrap;
和元素的 flex: 1 0 auto;
结合起来的效果如何......
嗯,很接近了。我真正希望的是最后一行元素不要被 flex 拉伸到整个宽度。当最后一行有三个或四个元素时还好,但只有两个看起来有点傻,只有一个就填满整个宽度,看起来很荒谬。
所以我想这整个小探险归结为一个简单的问题:
如何实现类似 justify-align 的行为,在这种行为下,元素会在容器中使用全部宽度进行间距排列,除了最后一行,它们应使用自然宽度?
为了完成这个小故事,感谢@Michael_B的答案,以下是我实现解决方案的方式:
.userlist:after {
content: '';
flex: 10 0 auto;
}
结果如下:
美丽。
:after { flex: 10 0 auto; }
的问题在于,如果您在最后一行中有正确的数量,它会搞乱它。只有在最后一行有悬挂项时才需要应用。 - chovytext-align:justify
一样很酷。 - Niet the Dark Absol