Is this the result you are looking for?
your “dangling lines” is just wrongly calculated height of :before element.
.tree-menu-1st-example ul {
padding-left: 0px;
}
.tree-menu-1st-example ul li {
list-style-type: none;
padding-left: 30px;
position: relative;
line-height: 2em;
}
.tree-menu-1st-example ul li:before {
content: "";
position: absolute;
top: 0px;
left: 0px;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
border-radius: 0 0 0 0px;
height: 100%;
}
.tree-menu-1st-example ul li:after {
content: "";
display: block;
position: absolute;
top: 1em;
left: 0px;
border-top: 1px solid #ccc;
border-radius: 0px 0 0 0;
width: 20px;
height: 100%;
}
.tree-menu-1st-example ul li:last-of-type:before {
height: 1em;
}
/* new example: */
.tree-menu-2 ul {
padding-left: 0px;
}
.tree-menu-2 ul li {
list-style-type: none;
padding-left: 30px;
position: relative;
line-height: 2em;
}
.tree-menu-2 ul .tree-menu-2{
position:relative;
}
.tree-menu-2 ul .tree-menu-2:before {
content: "";
position: absolute;
top: 0px;
left: 0px;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
border-radius: 0 0 0 0px;
height: 100%;
}
.tree-menu-2 ul li:after {
content: "";
display: block;
position: absolute;
top: 1em;
left: 0px;
border-top: 1px solid #ccc;
border-radius: 0px 0 0 0;
width: 20px;
height: 100%;
}
.tree-menu-2 ul .tree-menu-2:last-of-type:before {
height: 1em;
}
<div class="tree-menu-1st-example">
<ul>
<li>
Root
<ul>
<li>
Item1
<ul>
<li>item 1.1</li>
<li>item 1.1</li>
</ul>
</li>
<li>
Item2
<ul>
<li>item 1.1</li>
<li>item 1.1</li>
</ul>
</li>
<ul>
</li>
</ul>
</div>
<div id="app">
<div class="tree-menu-2">
<li>
<div class="label-wrapper">
<div class="has-children"><i class="fa fa-plus-square-o"></i>
root
</div>
</div>
<ul>
<div class="tree-menu-2">
<li>
<div class="label-wrapper">
<div class="has-children"><i class="fa fa-plus-square-o"></i>
item1
</div>
</div>
<ul>
<div class="tree-menu-2">
<li>
<div class="label-wrapper">
<div class="">
<!---->
item1.1
</div>
</div>
<ul></ul>
</li>
</div>
<div class="tree-menu-2">
<li>
<div class="label-wrapper">
<div class="has-children"><i class="fa fa-plus-square-o"></i>
item1.2
</div>
</div>
<ul>
<div class="tree-menu-2">
<li>
<div class="label-wrapper">
<div class="">
<!---->
item1.2.1
</div>
</div>
<ul></ul>
</li>
</div>
</ul>
</li>
</div>
</ul>
</li>
</div>
<div class="tree-menu-2">
<li>
<div class="label-wrapper">
<div class="">
<!---->
item2
</div>
</div>
<ul></ul>
</li>
</div>
</ul>
</li>
</div>
</div>
CLICK HERE to find out more related problems solutions.