【问题标题】:List Charts HTML CSS列表图表 HTML CSS
【发布时间】:2017-02-20 06:06:22
【问题描述】:

我想按以下方式创建组织树。

我无法生成如图所示的树。

请帮助生成如图所示的树,因为我有多个级别,其中一些数据必须显示为像 Level21 这样的扩展。

下面是我用来生成树的代码。

/*Now the CSS*/

* {
  margin: 0;
  padding: 0;
}

.tree ul {
  padding-top: 20px;
  position: relative;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

.tree li {
  float: left;
  text-align: center;
  list-style-type: none;
  position: relative;
  padding: 20px 5px 0 5px;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}


/*We will use ::before and ::after to draw the connectors*/

.tree li::before,
.tree li::after {
  content: '';
  position: absolute;
  top: 0;
  right: 50%;
  border-top: 1px solid #ccc;
  width: 50%;
  height: 20px;
}

.tree li::after {
  right: auto;
  left: 50%;
  border-left: 1px solid #ccc;
}


/*We need to remove left-right connectors from elements without 
any siblings*/

.tree li:only-child::after,
.tree li:only-child::before {
  display: none;
}


/*Remove space from the top of single children*/

.tree li:only-child {
  padding-top: 0;
}


/*Remove left connector from first child and 
right connector from last child*/

.tree li:first-child::before,
.tree li:last-child::after {
  border: 0 none;
}


/*Adding back the vertical connector to the last nodes*/

.tree li:last-child::before {
  border-right: 1px solid #ccc;
  border-radius: 0 5px 0 0;
  -webkit-border-radius: 0 5px 0 0;
  -moz-border-radius: 0 5px 0 0;
}

.tree li:first-child::after {
  border-radius: 5px 0 0 0;
  -webkit-border-radius: 5px 0 0 0;
  -moz-border-radius: 5px 0 0 0;
}


/*Time to add downward connectors from parents*/

.tree ul ul::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  border-left: 1px solid #ccc;
  width: 0;
  height: 20px;
}

.tree li a {
  border: 1px solid #ccc;
  padding: 5px 10px;
  text-decoration: none;
  color: #666;
  font-family: arial, verdana, tahoma;
  font-size: 11px;
  display: inline-block;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}


/*Time for some hover effects*/


/*We will apply the hover effect the the lineage of the element also*/

.tree li a:hover,
.tree li a:hover+ul li a {
  background: #c8e4f8;
  color: #000;
  border: 1px solid #94a0b4;
}


/*Connector styles on hover*/

.tree li a:hover+ul li::after,
.tree li a:hover+ul li::before,
.tree li a:hover+ul::before,
.tree li a:hover+ul ul::before {
  border-color: #94a0b4;
}


/*Thats all. I hope you enjoyed it.
Thanks :)*/
<div class="tree">
  <ul class="level1">
    <li class="level11">
      <a href="#">Level 1</a>
      <ul class="level2">
        <li class="level21">
          <a href="#">Level 21</a>
        </li>
        <li class="level22">
          <a href="#">Level 22</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

【问题讨论】:

  • 你好像已经在生成一棵树了,你的意思是像你的截图一样定位它吗?
  • @CassidyWilliams 是的。

标签: html css treeview orgchart


【解决方案1】:

您需要向&lt;ul&gt; 元素(如“side”)添加一个类:

  1. 加长向下的连接器(可能是height: 40px
  2. 将第一个子项定位在父项的正下方
  3. 将第二个孩子放在父母的右边
  4. 删除现有的子连接器
  5. 为第二个孩子添加一个侧面连接器。

【讨论】:

  • 如果您可以提供示例,这将是非常有益的,基于我可以将其转换为我的客户需要的内容。
  • @MM0959 为一个答案编写所有这些都是相当大量的 CSS,您在寻找什么具体示例?如何正确定位?
  • 我尝试了一个用户所说的示例 (jsfiddle.net/Mamu/8pd5b0tp/2)。如果我在同一级别中有超过 2 个项目,我希望将侧面级别定位在 level1 和 level2 之间。
【解决方案2】:

我对您的代码做了一些调整。这将帮助您入门。

我的补充:

li.levelSide::before {
  height: 0px;
  border: none;
}

li.levelSide {
  position: absolute;
  left: 100%;
  padding-top: 0;
  top: 0;
  padding-left: 0;
}

/*Now the CSS*/

* {
  margin: 0;
  padding: 0;
}

.tree ul {
  padding-top: 20px;
  position: relative;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

.tree li {
  float: left;
  text-align: center;
  list-style-type: none;
  position: relative;
  padding: 20px 5px 0 5px;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}


/*We will use ::before and ::after to draw the connectors*/

.tree li::before,
.tree li::after {
  content: '';
  position: absolute;
  top: 0;
  right: 50%;
  border-top: 1px solid #ccc;
  width: 50%;
  height: 20px;
}

.tree li::after {
  right: auto;
  left: 50%;
  border-left: 1px solid #ccc;
}


/*We need to remove left-right connectors from elements without 
any siblings*/

.tree li:only-child::after,
.tree li:only-child::before {
  display: none;
}


/*Remove space from the top of single children*/

.tree li:only-child {
  padding-top: 0;
}


/*Remove left connector from first child and 
right connector from last child*/

.tree li:first-child::before,
.tree li:last-child::after {
  border: 0 none;
}


/*Adding back the vertical connector to the last nodes*/

.tree li:last-child::before {
  border-right: 1px solid #ccc;
  border-radius: 0 5px 0 0;
  -webkit-border-radius: 0 5px 0 0;
  -moz-border-radius: 0 5px 0 0;
}

.tree li:first-child::after {
  border-radius: 5px 0 0 0;
  -webkit-border-radius: 5px 0 0 0;
  -moz-border-radius: 5px 0 0 0;
}


/*Time to add downward connectors from parents*/

.tree ul ul::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  border-left: 1px solid #ccc;
  width: 0;
  height: 20px;
}

.tree li a {
  border: 1px solid #ccc;
  padding: 5px 10px;
  text-decoration: none;
  color: #666;
  font-family: arial, verdana, tahoma;
  font-size: 11px;
  display: inline-block;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}


/*Time for some hover effects*/


/*We will apply the hover effect the the lineage of the element also*/

.tree li a:hover,
.tree li a:hover+ul li a {
  background: #c8e4f8;
  color: #000;
  border: 1px solid #94a0b4;
}


/*Connector styles on hover*/

.tree li a:hover+ul li::after,
.tree li a:hover+ul li::before,
.tree li a:hover+ul::before,
.tree li a:hover+ul ul::before {
  border-color: #94a0b4;
}


/*Thats all. I hope you enjoyed it.
Thanks :)*/

li.levelSide::before {
  height: 0px;
  border: none;
}

li.levelSide {
  position: absolute;
  left: 100%;
  padding-top: 0;
  top: 0;
  padding-left: 0;
}
<div class="tree">
  <ul class="level1">
    <li class="level11">
      <a href="#">Level 1</a>
      <ul class="level2">
        <li class="level21">
          <a href="#">Level 21</a>
          <ul class="level2">
            <li class="level31">
              <a href="#">Level 31</a>
            </li>
            <li class="levelSide">
              <a href="#">Side Level</a>
            </li>
          </ul>

        </li>

        <li class="levelSide">
          <a href="#">Side Level</a>
        </li>
      </ul>
    </li>

  </ul>
</div>

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2015-04-12
  • 2014-11-17
  • 1970-01-01
  • 2015-11-02
  • 2011-01-21
  • 2011-03-30
相关资源
最近更新 更多