CSS 树视图(嵌套列表),显示为 table

CSS Treeview (nested lists), display as table

我想为 HTML 结构获得一个 table 的显示,其中嵌套列表 + dl/dt/dd 列表作为给定行的单元格。

到目前为止,这是我能做的:

使用代码:

<ul class="treeview">
  <li>
    <dl>
      <dt>item1</dt>
      <dd>
        <input type="checkbox" />
      </dd>
      <dd>
        <input type="checkbox" />
      </dd>
      <dd>
        <input type="checkbox" />
      </dd>
    </dl>
    <ul>
      <li class="last">
        <dl>
          <dt>subitem</dt>
          <dd>
            <input type="checkbox" />
          </dd>
          <dd>
            <input type="checkbox" />
          </dd>
          <dd>
            <input type="checkbox" />
          </dd>
        </dl>
      </li>
    </ul>
  </li>
  <li>
    <dl>
      <dt>item2</dt>
      <dd>
        <input type="checkbox" />
      </dd>
      <dd>
        <input type="checkbox" />
      </dd>
      <dd>
        <input type="checkbox" />
      </dd>
    </dl>
  </li>
</ul>

和CSS:

ul.treeview li dl dt,
ul.treeview li dl dd {
  display: inline-block;
}

ul.treeview li dl dt {
  width: 200px;
}

ul.treeview li dl dd {
  width: 50px;
}

https://jsfiddle.net/wt6gd2f2/

问题出在嵌套列表上,其复选框未与子级列表对齐。知道怎么做吗?

这主要是因为默认的填充和边距,所以你必须先重置它们。

nested li(一个新的默认填充,你可以设置为任何值):

li ul { padding-left:25px; }

日:

ul.treeview li dl dd { margin:0; }

.. 现在你可以添加一个负边距(到第一个!)dd 把它带到左边:

ul.treeview li ul dl dd:first-of-type { margin-left:-25px; }

可以直接跳到最后一行,但是由于每个浏览器都有自己的默认值margins/paddings,最好自己设置缩进。

新 CSS:

ul.treeview li dl dt,
ul.treeview li dl dd {
  display: inline-block;
}

ul.treeview li dl dt {
  width: 200px;
}

ul.treeview li dl dd {
  width: 50px;
  margin: 0;
}

ul.treeview li ul {
  padding-left: 25px;
}

ul.treeview li ul dl dd:first-of-type {
  margin-left:-25px;
}