CSS中的层次结构显示

at.*_*at. 19 html css css3 html-lists

我在为层次结构显示提供CSS时遇到了麻烦,比如文件和文件夹树.我使用嵌套的无序列表:

<ul>
  <li>animals<ul>
    <li>dogs</li>
    <li>cats</li>
  </ul></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

它们与正确的CSS减去连接线很好地显示.我需要连线.我使用以下CSS执行此操作:

ul ul li:before {
  content: "";
  padding: 15px;
  border: 1px solid #000;
  border-width: 0 0 1px 1px;
  border-radius: 0 0 0 10px;
  position: absolute;
  left: -22px;
  top: -15px;
}
Run Code Online (Sandbox Code Playgroud)

问题是线条与动物,狗和猫的图标重叠.我尝试将z-index更改为无效.有没有更好的方法来实现这个CSS?还是有另一种方法让z-index有意义吗?

boo*_*sey 23

看看这个例子.您可以使用图像轻松替换鲑鱼色的盒子:

文件结构与css示例

HTML

<div>
    <h3>Root</h3>
    <ul>        
      <li>Folder 1
        <ul>
            <li>Folder 2
                <ul>
                    <li>file1.xml</li>
                    <li>file2.xml</li>
                    <li>file3.xml</li>
                </ul>
            </li>
            <li>file.html</li>
          </ul>
      </li>
      <li>file.psd</li>
      <li>file.cpp</li>
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

body {
    margin: 20px;
    line-height: 3;
    font-family: sans-serif;

}

div {
    position: relative;
}

ul {
    text-indent: .5em;
    border-left: .25em solid gray;
}

ul ul {
    margin-top: -1.25em;
    margin-left: 1em;

}

li {
    position: relative;
    bottom: -1.25em;
}

li:before {
    content: "";
    display: inline-block;
    width: 2em;
    height: 0;
    position: relative;
    left: -.75em;
    border-top: .25em solid gray;
}

ul ul:before, h3:before, li:after {
    content: '';
    display: block;
    width: 1em;
    height: 1em;
    position: absolute;
    background: salmon;
    border: .25em solid white;
    top: 1em;
    left: .4em;
}

h3 {
    position: absolute;
    top: -1em;
    left: 1.75em;
}

h3:before {
    left: -2.25em;
    top: .5em;
}
Run Code Online (Sandbox Code Playgroud)

演示


art*_*ics 7

jsFiddle演示

这是一个很棒的在线教程,可以完全满足您的需求.

它使用图像创建独特的项目符号,但在您的情况下,您可以使用管道(即|)符号并指定具有所需颜色的较大字体大小.

截图:

编辑:

这是一个额外的jsFiddle复制您的弯曲连接线.

jsFiddle演示2


编辑2:

这是一个最终修订的 jsFiddle修订版,它增加了一个转义空间,以便在保持曲线连接的同时提供更好的可视性.

jsFiddle演示3 3b

编辑3:这个特殊的空白区域是content上面演示中用于属性的选项:

Entity  Name Symbol/Description
&#8194; &ensp; ? en space
Run Code Online (Sandbox Code Playgroud)

可以肯定的是,特殊的空白区域是符号下方3个空白区域的中间位置.使用它不需要使用替代字符加透明度来模拟空白区域.删除透明属性意味着IE8很高兴.以防万一,下面的空行包含1个特殊的空格字符.复制到剪贴板使用,作为EntityName不工作:


编辑4:替代编辑3是检查提供的答案使用CSS内容添加HTML实体.