仅使用CSS显示树列表的最佳方法(无图像或JS,内部示例)

时间:2013-01-20 10:40:29

标签: html css

我想在HTML页面上显示以下内容: enter image description here

仅限使用CSS。 主要问题在于: |└ ├“分支”。

上面的例子是我自己做的一个解决方案。每个分支具有相同的宽度,包括:

<ul>
    <li></li>
    <li></li>
</ul>

诀窍是相应地将<li>的边框变为黑色。一个图像来显示这个(只是一个快速模拟) enter image description here

我遇到的一个问题是将边框变为白色以匹配背景而不是透明(显然CSS在列表上的透明边框有一些问题)。

我的问题是:什么是最简单的解决方案?有更好的方法吗?

编辑:一些要求:

  • 分支必须具有固定的宽度,但高度必须随着表格单元的高度而相应增长。
  • 两个li元素必须占据行高度的一半,以使-中的始终位于中间。

EDIT2:http://en.wikipedia.org/wiki/Template:Tree_list做了一点研究。唉,他们用图像作为分支。

PS:根据要求http://jsfiddle.net/q3zdB/2/

2 个答案:

答案 0 :(得分:19)

我能想到的最好的是一些(遗憾的是令人遗憾的)嵌套和使用生成的内容(所以它需要一个非常新的浏览器,所以IE < 8不会看起来非常漂亮),然而,这说,给了HTML:

ul {
  padding: 0;
  margin: 0;
  list-style-type: none;
  position: relative;
}
li {
  list-style-type: none;
  border-left: 2px solid #000;
  margin-left: 1em;
}
li div {
  padding-left: 1em;
  position: relative;
}
li div::before {
  content:'';
  position: absolute;
  top: 0;
  left: -2px;
  bottom: 50%;
  width: 0.75em;
  border: 2px solid #000;
  border-top: 0 none transparent;
  border-right: 0 none transparent;
}
ul > li:last-child {
  border-left: 2px solid transparent;
}
<ul>
  <li><div>Level 1</div></li>
  <li><div>Level 1</div>
    <ul>
      <li><div>Level 2</div></li>
      <li><div>Level 2</div>
        <ul>
          <li><div>Level 3</div></li>
          <li><div>Level 3</div></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><div>Level 1</div></li>
</ul>

我们得到了这个:

Link to the JS Fiddle demo.

JS Fiddle demo

答案 1 :(得分:1)

这是大卫解决方案的一个分支,无需在每个<div>中额外<li>

ul {
  padding: 0;
  margin: 0;
  list-style-type: none;
  position: relative;
}
li {
  border-left: 2px solid #000;
  margin-left: 1em;
  padding-left: 1em;
  position: relative;
}
li li {
  margin-left: 0;
}
li::before {
  content:'┗';
  color: #000;
  position: absolute;
  top: -5px;
  left: -9px;
}
ul > li:last-child {
  border-left: 2px solid transparent;
}
<ul>
  <li>Level 1</li>
  <li>Level 1
    <ul>
      <li>Level 2</li>
      <li>Level 2
        <ul>
          <li>Level 3</li>
          <li>Level 3</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Level 1</li>
</ul>

Demo on JS Bin