我总是遇到同样的问题,当我有2个带边框的相邻元素时,边框会被合并。对于表格,我们有border-collapse属性来解决这个问题。
我已经尝试从其中一个边缘省略边框,但这仅适用于中间的元素,第一个和最后一个元素将错过边框。
例如,有人知道列表元素的解决方案吗?
答案 0 :(得分:68)
以下是我如何解决它:向每个li元素添加-1px的margin-left / -top。然后边界真的崩溃没有任何技巧。
答案 1 :(得分:42)
您可以向ul添加左边框和下边框,然后将其从li中删除。
小提琴:http://jsfiddle.net/TELK7/
HTML:
<ul>
<li>one</li>
<li>two</li>
</ul>
的CSS:
ul{
border: 0 solid silver;
border-width: 0 0 1px 1px;
}
li{
border: 0 solid silver;
border-width: 1px 1px 0 0;
padding:.5em;
}
答案 2 :(得分:7)
您可以使用CSS伪选择器执行此操作:
li {
border: 1px solid #000;
border-right: none;
}
li:last-child {
border-right: 1px solid #000;
}
这将清除除列表中最后一个元素之外的所有li元素的右边框。
答案 3 :(得分:2)
这个派对的时间已经很晚了,但是这里是如何让列表项的完整边框在悬停时更改。
首先,只需在li
元素上使用(顶部和侧面)边框,然后将最后一个边框设为底部边框。
li:last-child {border-bottom:2px solid silver;}
然后,选择悬停边框样式:
li:hover {border-color:#0cf;}
最后,使用同级选择器更改下一个项目的上边框,以匹配您的悬停项目的悬停边框。
li:hover + li {border-top-color:#0cf;}
答案 4 :(得分:1)
旧线程,但我找到了另一个解决方案,更重要的是:
你不知道哪个是父母元素
li{
border: 2px solid gray;
}
li + li{
border-top: none;
}
/* Makeup */ li{width: 12rem;list-style: none;padding: .5rem 1rem;}
<li>First</li>
<li>Second</li>
<li>Third</li>
<li>Fourth</li>
<li>Fifth</li>
答案 5 :(得分:0)
这个帖子很老了,但我找到了一个使用outline属性的新解决方案。它适用于垂直和水平列表,即使水平列表长度为多行。
使用预期宽度的一半边框,并添加一个预期宽度的一半的轮廓。
ul {
list-style-type: none;
width: 100px;
margin: 0;
/* also set the parent's padding to half of the intended border's width to prevent the outlines from overlapping anything they shouldn't overlap */
padding: 0.5px;
}
li {
display: inline-block;
float: left;
box-sizing: border-box;
text-align: center;
width: 20px;
height: 20px;
padding: 0;
margin: 0;
/* simulates a 1px-wide border */
border: 0.5px solid black;
outline: 0.5px solid black;
}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
答案 6 :(得分:-4)
赋予元素边距。例如,
HTML:
<ul>
<li>Stuff</li>
<li>Other Stuff</li>
<ul>
CSS:
li { border: 1px solid #000; margin: 5px 0; }