我有以下布局:
#limited-width {
width: 100%;
max-width: 200px;
margin: 0 auto;
font-size: 18px;
}
ul {
display: flex;
flex-flow: row wrap;
list-style: none;
padding: 0;
margin: 20px;
}
ul > li {
display: block;
text-align: center;
flex: 1 0 auto;
max-width: 100%;
box-sizing: border-box;
margin: 0;
padding: 4px 7px;
border: 2px solid rgba(0,0,0,.3);
background-color: rgba(0,0,0,.03);
}
<div id="limited-width">
<ul>
<li>Apple</li>
<li>Orange</li>
<li>Pineapple</li>
<li>Banana</li>
<li>Tomato</li>
<li>Pear</li>
<li>Lemon</li>
</ul>
</div>
如您所见, ul
内的列表项的边框宽度为 2px
,但正因为如此,元素之间的边框加倍。我正在寻找一种方法使元素之间的边框宽度相同,同时使用 flexbox 保持外部边框相同(类似于 border-collapse
在表格上的工作方式)。这可能吗?如果可以,怎么做?
原文由 SeinopSys 发布,翻译遵循 CC BY-SA 4.0 许可协议
有两种主要方法可以实现这一目标。在每种方法下,您都会找到一个工作演示,您可以展开它来查看它的行为方式。将鼠标悬停在元素上会给它们一个红色边框,以便更轻松地选择最适合您的方法。
父子边框对齐
您需要像这样定义边框:
这里的关键在于
border-width
属性:top
和left
的值设置为所需大小,而right
0
bottom
---
right
andbottom
are set to the desired size while thetop
andleft
are set to0
通过这样做,边框将以某种方式叠加在一起,从而在元素和容器周围形成一个很好的折叠、一致的边框。
将边界减半
如果您出于任何目的想要为每个元素设置不同的边界,这可能是适合您需求的折衷方案。给定所需的
border-width
的2px
CSS 如下:此方法在父项及其子项上设置所需边框宽度的一半,使最终边框
2px
厚。小心使用这种带有小数像素的方法(例如1.5px
),因为您可能会 遇到问题。当使用
border-color
更改规则时,半角会很明显,但是如果您想要更好看的边框,这是比第一种更好的方法。