模拟列表中的边界折叠(无表)

| 我总是有同样的问题,当我有2个带边框的相邻元素时,边框将合并。对于表,我们具有border-collapse属性来解决此问题。 我曾尝试从一侧的边框中删除边框,但这仅适用于中间的元素,第一个和最后一个元素会丢失边框。 有人知道例如列表元素的解决方案吗?     
已邀请:
您可以在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;
}
    
这是我的解决方法:在每个li元素上添加一个-1px的margin-left / -top。然后边界真的崩溃了,没有任何花招。     
您可以使用CSS伪选择器执行此操作:
li {
    border: 1px solid #000;
    border-right: none;
}

li:last-child {
    border-right: 1px solid #000;
}
这将清除列表中最后一个元素以外的所有li元素的右边框。     
这次聚会来得不迟,但是这里是如何获得列表项的完整边框以在悬停时进行更改的方法。 首先,仅在
li
元素上使用(顶部和侧面)边框,然后为最后一个添加底部边框。
li:last-child {border-bottom:2px solid silver;}
然后,选择一个悬停边框样式:
li:hover {border-color:#0cf;}
最后,使用同级选择器更改下一项的顶部边框,使其与您的悬停项目的悬停边框匹配。
li:hover + li {border-top-color:#0cf;}
http://jsfiddle.net/8umrq46g/     
旧线程,但是我找到了另一个解决方案,并且更重要: 您无需知道哪个是父元素
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>
这个线程很旧,但是我发现了使用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>
给元素边距。例如, HTML:
<ul>
    <li>Stuff</li>
    <li>Other Stuff</li>
<ul>
CSS:
li { border: 1px solid #000; margin: 5px 0; }
jsfiddle示例     

要回复问题请先登录注册