css实现组织架构图2-一对多,再多对一,再对多

先看下效果图


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代码,主要用ullibefore、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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 8,596评论 0 5
  • 为了让我有一个更快速、更精彩、更辉煌的成长,我将开始这段刻骨铭心的自我蜕变之旅!从今天开始,我将每天坚持阅...
    李薇帆阅读 6,070评论 0 3
  • 似乎最近一直都在路上,每次出来走的时候感受都会很不一样。 1、感恩一直遇到好心人,很幸运。在路上总是...
    时间里的花Lily阅读 5,262评论 0 2
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 3,621评论 0 1
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 3,587评论 0 0