У меня есть дерево в css flex, и оно выглядит правильно:
А вот код:
.dot {
width: 50px;
height:60px;
background: #ccc;
text-align: center;
vertical-align: middle;
position: relative;
}
.dot::before {
display: block;
content: '';
width: 10px;
height:10px;
margin-left: calc(50% - 5px);
margin-top: -10px;
border-left: solid 10px #900;
}
.dot::after {
display: block;
position: absolute;
content: '';
width: 50px;
height:50px;
border-radius: 50%;
background: #ddd;
}
.tree {
display: flex;
flex-direction: column;
align-items: center;
}
.tree>:first-child::before {
height: 80px;
}
.tree>:first-child::after {
top: 0;
}
.kid {
display: flex;
}
.kid>div {
border-top: solid 10px #900;
padding-top: 10px;
}
.kid>:first-child, .kid>:last-child {
border-top-color: rgba(0,0,0,.2);
}
.kid>:first-child::before {
display: block;
content: '';
width: 100%;
height:10px;
margin-top: -20px;
border-top: solid 10px #900;
border-left: solid 10px #900;
}
.kid>:last-child::before {
display: block;
content: '';
width: calc(50% - 5px);
height:10px;
margin-top: -20px;
border-top: solid 10px #900;
border-right: solid 10px #900;
margin-left: 0;
border-left: 0;
}
.tree::before {
/* for tree is the last kid */
/* margin-left: calc(5px - 50%) !important; */
/* also need fix if tree is first child */
}
.kid>:only-child::before {
border-top: 0;
height: 20px;
}
<div class="kid">
<div class="dot" title="a"></div>
<div class="tree" title="b">
<div class="dot"></div>
<div class="kid">
<div class="dot" title="b1"></div>
<div class="tree" title="b2">
<div class="dot"></div>
<div class="kid">
<div class="dot"></div>
<div class="tree">
<div class="dot"></div>
<div class="kid">
<div class="dot"></div>
</div>
</div>
<div class="tree">
<div class="dot"></div>
<div class="kid">
<div class="dot"></div>
<div class="dot"></div>
</div>
</div>
<div class="dot"></div>
</div>
</div>
<div class="dot" title="b3"></div>
</div>
</div>
<div class="dot" title="c"></div>
</div>
Когда первый элемент ребенка - это дерево, или последний элемент - дерево, или он является единственным ребенком в виде дерева, тогда он выглядит не верно в соответствии с нижеследующим (путем удаления a или c или b1 или b3 или удаления обоих a и b):
Я могу исправитьудалите следующее:
.tree {
align-items: center;
}
Но это повлияет на других.
Кто-нибудь может помочь?
[Также есть пробел для первого элемента внутри дерева, нокогда фон прозрачный, мне все равно]