我有两个答案供您考虑...第一个是您要求的纯 css,第二个使用少量 php 和 css。通常,纯 css 解决方案是可取的,但根据情况,第二种解决方案也可能有一些好处。
所以,首先,css。你肯定是在正确的轨道上,外边界覆盖了 div 的边界。不过,我稍微调整了你的方法。我没有将边框放在父元素上,而是创建了一个额外的子元素(在本例中为跨度)并将其绝对定位在父元素中,以跨越整个宽度和高度。我把边框放在这个上面,而不是父元素,因为它是绝对定位的,它不会干扰其他元素的定位。
此外,box-sizing: border-box;
如果您在边框破坏布局时遇到麻烦,也可以派上用场。我在我的例子中使用了它。
这是该方法的演示:
http://jsfiddle.net/PGygr/
至于第二种解决方案,我使用了一些更高级的选择器来覆盖某些框上的某些边框。这样一来,它们不仅被隐藏了……它们实际上并不存在。出于这个原因,我更愿意使用这个解决方案而不是第一个,但这只是我的意见。
首先,我在所有 div 上放置了右边框和下边框。这对于所有 div 都是正确的,除了每行的最后一行和底行中的所有 div。
要选择每行中的最后一个 div 以取消它的右侧边框,我可以执行以下操作:
.container div:nth-child(Xn) {
border-right: none;
}
其中“X”将替换为每行中的 div 数。如果我使用嵌入式样式执行此操作,我可以使用 php 将那个数字动态地放在那里。
要选择和停用最后一行的底部边框,我可以执行以下操作:
.container div:nth-child(X) ~ div {
border-bottom: none;
}
同样,'X' 将与 php 一起放置,并且等于每行中的 div 数乘以行数减一。所以基本上,选择倒数第二行最后一个 div 之后的所有 div。
这是要演示的小提琴,减去它的 php 方面(我已经手动将数字输入到 css 中)
http://jsfiddle.net/t7atH/
无论您决定坚持仅使用 css 方法,还是尝试添加一点 php,我希望这对您有所帮助。祝你好运!
更新:作为事后的想法,我可能应该添加第三种解决方案。如果您能够添加环绕 div 的行元素,则可以使用:first-child
和:last-child
禁用边框。
我认为这是不言自明的,所以只需看一下代码:
http://jsfiddle.net/PGygr/3/