先看下效果图

organization2.png
其中html代码
<div class="org-tree">
<ul>
<li class="ceo">
<div>
<span>总经理</span><br/>
<span>张三,李四四四</span>
</div>
<ul>
<li class="manager lineLeft">
<div>技术总监</div>
</li>
<li class="manager line">
<i class="left"></i>
<div>产品总监</div>
<i class="right"></i>
</li>
<li class="manager lineRight">
<div>运营总监</div>
</li>
</ul>
<div class="companyManagerBox">
<div class="companyManager">
<span>总经理</span><br/>
<span>张三,李四四四</span>
</div>
</div>
<ul>
<li class="department">
<div>前端开发部</div>
<ul>
<li class="employee">
<div>
<span>前端工程师A</span>
<span>张三,李思思</span>
</div>
</li>
<li class="employee"><div>前端工程师</div></li>
<li class="employee"><div>前端工程师C</div></li>
</ul>
</li>
<li class="department">
<div>后端开发部</div>
<ul>
<li class="employee"><div>后端工程师A</div></li>
<li class="employee"><div>
<span>前端工程师A</span>
<span>张三,李思思</span>
</div></li>
<li class="employee"><div>后端工程师C</div></li>
</ul>
</li>
<li class="department">
<div>测试部</div>
<ul>
<li class="employee"><div>测试工程师A</div></li>
<li class="employee"><div>测试工程师B</div></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
css代码,主要用ul和li的before、after伪元素进行设置,其中ul伪元素主要用来实现连接下方的线,li的伪元素主要是来实现连接左右的线,li要加上padding,这样可以实现左右有间隔距离,并且伪元素连接的线也正好是li的一半宽度
其中第二层组织,是单独添加一个ul标签来实现的
ul,li{
list-style: none;
margin: 0;
padding: 0;
box-sizing: border-box;
}
.org-tree {
display: flex;
justify-content: center;
padding: 20px;
}
.org-tree ul {
position: relative;
padding: 16px 0;
margin: 0 auto;
text-align: center;
display: flex;
justify-content: center;
}
.org-tree ul::after {
content: '';
display: block;
clear: both;
}
.org-tree li {
/* display: inline-block; */
float: left;
text-align: center;
position: relative;
padding: 16px 8px 0 8px;
}
.org-tree li::before,
.org-tree li::after {
content: '';
position: absolute;
top: 0;
right: 50%;
border-top: 2px solid #ccc;
width: 50%;
height: 16px;
}
.org-tree li::after {
left: 50%;
border-left: 2px solid #ccc;
}
.org-tree li:first-child::before,
.org-tree li:last-child::after {
border: 0 none;
}
.org-tree li:last-child::before {
border-right: 2px solid #ccc;
border-radius: 0 5px 0 0;
}
.org-tree li:first-child::after {
border-radius: 5px 0 0 0;
}
.org-tree .ceo::after,
.org-tree .ceo::before {
height: 0;
}
.org-tree ul ul::before {
content: '';
position: absolute;
top: 0;
left: 50%;
border-left: 2px solid #ccc;
width: 0;
height: 16px;
}
.org-tree li div {
border: 2px solid #ccc;
padding: 8px 3px;
display: inline-block;
border-radius: 5px;
color: #333;
font-size: 14px;
background: #fff;
width: 120px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.org-tree .employee div {
width: 40px;
height: 150px;
}
.org-tree .employee div span {
display: inline-block;
}
.org-tree .employee div span:first-child {
margin-bottom: 10px;
}
.org-tree .companyManagerBox {
border: 0;
padding: 16px 8px 0 8px;
box-shadow: none;
background-color: transparent;
width:auto;
position: relative;
}
.org-tree .companyManagerBox::before{
position: absolute;
content: '';
width: 50%;
height: 16px;
left: 0%;
top: 0;
border-right: 2px solid #ccc;
}
.line .left {
position: absolute;
content: '';
width: 50%;
height: 16px;
left: 0%;
bottom: -16px;
border-bottom: 2px solid #ccc;
}
.line .right {
position: absolute;
content: '';
width: 50%;
height: 16px;
left: 50%;
bottom: -16px;
border-left: 2px solid #ccc;
border-bottom: 2px solid #ccc;
}
.org-tree .ceo .lineLeft::before {
left: 50%;
bottom: -16px;
top: auto;
border-left: 2px solid #ccc;
border-bottom: 2px solid #ccc;
border-radius: 0 0px 0 5px;
}
.org-tree .ceo .lineRight::after {
right: 50%;
bottom: -16px;
left: auto;
top: auto;
border-right: 2px solid #ccc;
border-bottom: 2px solid #ccc;
border-radius: 0 0px 5px 0;
}