2017-02-20 70 views
2

我想按以下方式創建組織樹。列表圖表HTML CSS

enter image description here

我無法生成樹圖所示。

如圖所示,在生成樹時需要幫助,因爲我有多個級別,其中一些數據必須顯示爲像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>

+1

你似乎已經產生了樹,你的意思是把它定位像你的屏幕截圖? –

+0

@CassidyWilliams是的。 – MM0959

回答

1

我對你的代碼做了一些調整。這將幫助你開始。

我補充:

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>

+0

我嘗試了你所說的,樹看起來像在這個小提琴https://jsfiddle.net/Mamu/8pd5b0tp/2/,但我希望sidelevel之間的部門和部分 – MM0959

2

你要一個類添加到<ul>元素(如 「方」)認爲:

  1. 延長了向下連接器(可能height: 40px
  2. 將第一個孩子定位在父母的正下方
  3. 將第二個孩子在父母的右側
  4. 刪除現有的子連接器
  5. 向第二個孩子添加側連接器。
+0

如果你可以提供和例子,它將是非常有益的基礎上,我可以將其轉換爲我的客戶需要。 – MM0959

+0

@ MM0959編寫所有這一切都是一個相當大的CSS的答案,你在尋找什麼樣的具體例子?如何正確定位? –

+0

我嘗試過這個例子(https://jsfiddle.net/Mamu/8pd5b0tp/2/),正如用戶所說的那樣。如果我有超過2個項目在同一級別,我希望側面水平位於level1和level2之間。 – MM0959