• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

CSS 图表:如何创建组织结构图

在之前的教程中,我们学习了如何创建不同类型的图表,包括条形图、温度计图表和圆环图。今天,我们将通过构建仅 css 的组织结构图来继续这一旅程。

准备好测试你的 CSS 技能了吗?

我们正在构建的组织结构图

这是我们将要创建的 CSS 图表:

See the Pen  How to Build a CSS-only Organizational Chart by Envato Tuts+ (@tutsplus)  on CodePen.

它由四个级别组成,描述了公司的层次结构。

什么是组织结构图?

为了找出组织结构图是什么,让我们借用维基百科的定义:

“组织结构图,也称为组织结构图或组织结构图,是显示组织结构及其部分和职位/工作的关系和相对等级的图表。该术语也用于类似的图表,例如显示知识领域或一组语言的不同元素的图表。”

这是一个例子:


CSS 图表:如何创建组织结构图  第1张

作者:Sskulkarni9090 - 自己的作品,CC BY-SA 3.0


这种类型的图表通常用于呈现公司人员或部门之间的关系。在公司网站上,您可能会在“关于我们”或“公司”页面上找到它。

您还将看到用于家谱的组织结构图(查看 BBC 网站上的英国皇室家族树和继承线)。它们非常适合说明层次结构。

1.指定容器

我们的图表将存在于一个容器中:

<divclass="container"><!-- chart goes here --></div>

2.定义一些基本样式

在通过它的关卡之前,我们将设置一些重置规则和帮助类:

:root {

  --level-1: #8dccad;

  --level-2: #f5cc7f;

  --level-3: #7b9fe0;

  --level-4: #f27c8d;

  --black: black;

}

 

* {

  padding: 0;

  margin: 0;

  box-sizing: border-box;

}

 

ol {

  list-style: none;

}

 

body {

  margin: 50px 0 100px;

  text-align: center;

  font-family: "Inter", sans-serif;

}

 

.container {

  max-width: 1000px;

  padding: 0 10px;

  margin: 0 auto;

}

 

.rectangle {

  position: relative;

  padding: 20px;

  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);

}

注意rectangle课堂。我们将把它附加到图表的每个节点/元素上。

注意:为简单起见,我没有优化 CSS。这将帮助您更好地了解每个级别的样式。 

3.指定级别

此时,我们已准备好指定图表级别;正如我们之前讨论的,这里我们将有四个:


CSS 图表:如何创建组织结构图  第2张


从最高级别开始,每个级别将代表公司中的一个角色。

1级

第一级将仅包含一个节点:


CSS 图表:如何创建组织结构图  第3张


html

为了描述它,我们将使用一个h1标签,因为它是我们图表中最重要的部分:

<h1class="level-1 rectangle">...</h1>

CSS

我们将使用它的::before伪元素来创建第一层和第二层之间的关系:

/*CUSTOM VARIABLES HERE*/

 

.level-1 {

  width: 50%;

  margin: 0 auto 40px;

  background: var(--level-1);

}

 

.level-1::before {

  content: "";

  position: absolute;

  top: 100%;

  left: 50%;

  transform: translateX(-50%);

  width: 2px;

  height: 20px;

  background: var(--black);

}

2 级

第二级将由两个节点组成:


CSS 图表:如何创建组织结构图  第4张


正如我们稍后将看到的,每个节点都将包含其他子节点。

这些子节点将代表较低级别的管理层次结构。

HTML

为了描述它,我们将使用带有两个列表项的有序列表。每个列表项将包含一个h2元素:

<ol class="level-2-wrapper">

  <li>

    <h2 class="level-2 rectangle">...</h2>

  </li>

  <li>

    <h2 class="level-2 rectangle">...</h2>

  </li>

</ol>

CSS

感谢 CSS Grid,我们将为这个级别创建布局。

接下来,我们将使用::before特定元素的伪元素来创建该级别的节点与相邻级别之间的关联:

/*CUSTOM VARIABLES HERE*/

 

.level-2-wrapper {

  position: relative;

  display: grid;

  grid-template-columns: repeat(2, 1fr);

}

 

.level-2-wrapper::before {

  content: "";

  position: absolute;

  top: -20px;

  left: 25%;

  width: 50%;

  height: 2px;

  background: var(--black);

}

 

.level-2-wrapper::after {

  display: none;

  content: "";

  position: absolute;

  left: -20px;

  bottom: -20px;

  width: calc(100% + 20px);

  height: 2px;

  background: var(--black);

}

 

.level-2-wrapper li {

  position: relative;

}

 

.level-2-wrapper > li::before {

  content: "";

  position: absolute;

  bottom: 100%;

  left: 50%;

  transform: translateX(-50%);

  width: 2px;

  height: 20px;

  background: var(--black);

}

 

.level-2 {

  width: 70%;

  margin: 0 auto 40px;

  background: var(--level-2);

}

 

.level-2::before {

  content: "";

  position: absolute;

  top: 100%;

  left: 50%;

  transform: translateX(-50%);

  width: 2px;

  height: 20px;

  background: var(--black);

}

 

.level-2::after {

  display: none;

  content: "";

  position: absolute;

  top: 50%;

  left: 0%;

  transform: translate(-100%, -50%);

  width: 20px;

  height: 2px;

  background: var(--black);

}

请注意,我们还定义了::after二级节点的伪元素。这只会出现在小屏幕上。

3 级

第三级将包括四个节点。

我们将前两个节点与第二层的第一个节点相关联,而后两个节点与其第二个节点相关联: 


CSS 图表:如何创建组织结构图  第5张


HTML

尽管如此,在第二级所在的初始列表中,我们将定义两个新列表。它们中的每一个都将包含两个列表项。对于每个项目将指定一个h3 元素:

<ol class="level-2-wrapper">

  <li>

    ...

    <ol class="level-3-wrapper">

      <li>

        <h3 class="level-3 rectangle">...</h3>

      </li>

      <li>

        <h3 class="level-3 rectangle">...</h3>

      </li>

    </ol>

  </li>

  <li>

    ...

    <ol class="level-3-wrapper">

      <li>

        <h3 class="level-3 rectangle">...</h3>

      </li>

      <li>

        <h3 class="level-3 rectangle">...</h3>

      </li>

    </ol>

  </li>

</ol>

CSS

再次感谢 CSS Grid,我们将定位节点。

同样,我们将设置::before特定元素的伪元素以创建所需的连接:

/*CUSTOM VARIABLES HERE*/

 

.level-3-wrapper {

  position: relative;

  display: grid;

  grid-template-columns: repeat(2, 1fr);

  grid-column-gap: 20px;

  width: 90%;

  margin: 0 auto;

}

 

.level-3-wrapper::before {

  content: "";

  position: absolute;

  top: -20px;

  left: calc(25% - 5px);

  width: calc(50% + 10px);

  height: 2px;

  background: var(--black);

}

 

.level-3-wrapper > li::before {

  content: "";

  position: absolute;

  top: 0;

  left: 50%;

  transform: translate(-50%, -100%);

  width: 2px;

  height: 20px;

  background: var(--black);

}

 

.level-3 {

  margin-bottom: 20px;

  background: var(--level-3);

}

级别 #4

第四级需要 16 个节点。这些将平均分配到四个列表中。

每个第三级节点将包含一个列表:


CSS 图表:如何创建组织结构图  第6张


HTML

尽管如此,在第二级所在的初始列表中,我们将定义四个新列表。它们中的每一个都将包含四个列表项。对于每个项目将指定一个h4元素:

<ol class="level-2-wrapper">

  <li>

    ...

    <ol class="level-3-wrapper">

      <li>

        ...

        <ol class="level-4-wrapper">

          <li>

            <h4 class="level-4 rectangle">...</h4>

          </li>

          ...

        </ol>

      </li>

      <li>

        ...

        <ol class="level-4-wrapper">

          <li>

            <h4 class="level-4 rectangle">...</h4>

          </li>

          ...

        </ol>

      </li>

    </ol>

  </li>

  <li>

    ...

    <ol class="level-3-wrapper">

      <li>

        ...

        <ol class="level-4-wrapper">

          <li>

            <h4 class="level-4 rectangle">...</h4>

          </li>

          ...

        </ol>

      </li>

      <li>

        ...

        <ol class="level-4-wrapper">

          <li>

            <h4 class="level-4 rectangle">...</h4>

          </li>

          ...

        </ol>

      </li>

    </ol>

  </li>

</ol>

CSS

再一次,我们将设置::before特定元素的伪元素,用于将四级节点与其父节点关联起来:

/*CUSTOM VARIABLES HERE*/

 

.level-4-wrapper {

  position: relative;

  width: 80%;

  margin-left: auto;

}

 

.level-4-wrapper::before {

  content: "";

  position: absolute;

  top: -20px;

  left: -20px;

  width: 2px;

  height: calc(100% + 20px);

  background: var(--black);

}

 

.level-4-wrapper li + li {

  margin-top: 20px;

}

 

.level-4 {

  font-weight: normal;

  background: var(--level-4);

}

 

.level-4::before {

  content: "";

  position: absolute;

  top: 50%;

  left: 0%;

  transform: translate(-100%, -50%);

  width: 20px;

  height: 2px;

  background: var(--black);

}

组织结构图和响应式

使组织结构图具有响应性是很棘手的。我记得自己不得不重建标记一到两次,直到提出这个版本。因此,如果您打算创建这样的图表,我建议您遵循移动优先的方法。

考虑到这一切,这是它的移动布局:


CSS 图表:如何创建组织结构图  第7张


为了实现这种行为,我们必须修改一些样式:

@media screen and (max-width: 700px) {   

  .rectangle {

    padding: 20px 10px;

  }

  .level-1,

  .level-2 {

    width: 100%;

  }

  .level-1 {

    margin-bottom: 20px;

  }

  .level-1::before,

  .level-2-wrapper > li::before {

    display: none;

  }

  .level-2-wrapper,

  .level-2-wrapper::after,

  .level-2::after {

    display: block;

  }

  .level-2-wrapper {

    width: 90%;

    margin-left: 10%;

  }

  .level-2-wrapper::before {

    left: -20px;

    width: 2px;

    height: calc(100% + 40px);

  }

  .level-2-wrapper > li:not(:first-child) {

    margin-top: 50px;

  }

}

我们已经完成了我们的 CSS 图表!

恭喜,伙计们!在没有编写任何 javascript 代码的情况下,我们设法构建了一个功能齐全的组织结构图。

让我们提醒自己我们构建了什么:

See the Pen  How to Build a CSS-only Organizational Chart by Envato Tuts+ (@tutsplus)  on CodePen.

当然,请记住,我们的图表具有特定的结构。根据您的需要,您可能希望丰富其内容或修改其布局。如果您需要更高级或动态的东西,请查看一些 JavaScript 库,例如Highcharts.js。

你有没有创建过 CSS 图表?如果是这样,请与我们分享您的经验!

文章目录
  • 我们正在构建的组织结构图
  • 什么是组织结构图?
  • 1.指定容器
  • 2.定义一些基本样式
  • 3.指定级别
    • 1级
      • html
      • CSS
    • 2 级
      • HTML
      • CSS
    • 3 级
      • HTML
      • CSS
    • 级别 #4
      • HTML
      • CSS
  • 组织结构图和响应式
  • 我们已经完成了我们的 CSS 图表!