19

我在为分层显示(如文件和文件夹树)提出 CSS 时遇到了麻烦。我使用嵌套的无序列表:

<ul>
  <li>animals<ul>
    <li>dogs</li>
    <li>cats</li>
  </ul></li>
</ul>

它们在适当的 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;
}

问题是线条与动物、狗和猫的图标重叠。我尝试将 z-index 更改为无效。有没有更好的方法来使用 CSS 实现这一点?还是有另一种方法可以使 z-index 有意义?

4

3 回答 3

24

看看这个例子。您可以轻松地将鲑鱼色框替换为图像:

带有 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>

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;
}

演示

于 2012-12-26T01:35:49.300 回答
8

jsFiddle 演示

有一个很棒的过时的在线教程,可以完全满足您的需求。

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

截屏:

编辑:

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

jsFiddle 演示 2


编辑2:

这是一个最终修订的jsFiddle 修订版,它添加了一个转义空间以在保持弯曲连接的同时获得更好的可视性。

jsFiddle 演示 33b

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

Entity  Name Symbol/Description
&#8194; &ensp;   en space

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


EDIT 4: Alternate for Edit 3 是检查为使用 CSS 内容添加 HTML 实体提供的 SO Answers 。

于 2012-12-26T00:31:43.413 回答
1

如果你想要一个简单的例子,我们去:

HTML

<ul>
  <li>animals
   <ul>
    <li>dogs</li>
    <li>cats</li>
  </ul></li>
</ul>​

CSS

li {
  border-left: 1px solid #000;
  margin-left: 10px;
  margin-top: 5px;
  padding-left: 10px;
}​

查看jsFiddle 结果

于 2012-12-26T00:36:34.790 回答