怎样用纯CSS实现响应式自适应树形组织架构图

阿萱酱_6952

阿萱酱_6952

2026-11-10

292人浏览

原创

使用纯css实现响应式自适应树形组织架构图,核心在于利用 flexbox 布局处理层级对齐,并通过媒体查询(media queries)在移动端切换为垂直堆叠模式。具体做法是定义一个根节点容器,子节点采用水平排列的 flex 结构,利用伪元素绘制连接线;当屏幕宽度小于特定阈值时,将子节点容器改为垂直排列,并调整连接线方向以适配手机屏幕的阅读习惯。

怎样用纯CSS实现响应式自适应树形组织架构图

CSS Tree 结构的 HTML 语义化构建

构建基础结构时,必须严格遵循嵌套列表或自定义 div 层级,确保每个父节点包含其所有子节点的容器。这种结构允许 CSS 选择器精准定位父子关系,从而生成连线。关键在于外层容器需要设置 display: flex 和 justify-content: center,以保证顶层节点居中,而子节点容器内部同样使用 Flex 布局来均匀分布兄弟节点。

怎样用纯CSS实现响应式自适应树形组织架构图

<div class="tree">
  <ul>
<li>
      <div class="node">CEO</div>
      <ul>
<li>
          <div class="node">CTO</div>
          <ul>
<li><div class="node">Dev Lead</div></li>
            <li><div class="node">QA Lead</div></li>
          </ul>
</li>
        <li>
          <div class="node">CFO</div>
        </li>
      </ul>
</li>
  </ul>
</div>

上述代码展示了标准的嵌套结构。每个

  • 代表一个分支,内部的 .node 用于显示文本内容。这种结构不依赖 JavaScript 动态生成,完全由静态 HTML 构成,便于 SEO 和初始渲染。在实际项目中,可以根据数据源通过模板引擎生成此结构,但前端展示逻辑仅依赖 CSS。

    连线绘制与 Flex 布局细节

    实现连线的关键在于利用伪元素 ::before 和 ::after。对于每个

  • ,::before 绘制从父节点下来的垂直线,::after 绘制连接到当前节点的水平线。通过设置 position: absolute 和精确的 top/left 值,可以将线条锚定在节点中心。同时,
      容器需要去除默认列表样式,并设置 padding-top 为线条留出空间。

      CSS工具箱(专业版)
      CSS工具箱(专业版)

      全功能 CSS 工程手册,覆盖性能优化、无障碍、设计系统与跨浏览器兼容。

      下载

      怎样用纯CSS实现响应式自适应树形组织架构图

      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      
      .tree ul {
        padding-top: 20px;
        position: relative;
        transition: all 0.5s;
        display: flex;
        justify-content: center;
      }
      
      .tree li {
        float: left; text-align: center;
        list-style-type: none;
        position: relative;
        padding: 20px 5px 0 5px;
        transition: all 0.5s;
      }
      
      /* 绘制垂直线 */
      .tree li::before, .tree li::after {
        content: '';
        position: absolute;
        top: 0;
        right: 50%;
        border-top: 1px solid #ccc;
        width: 50%;
        height: 20px;
      }
      
      .tree li::after {
        right: auto;
        left: 50%;
        border-left: 1px solid #ccc;
      }
      
      /* 移除第一个子节点的左侧线和最后一个子节点的右侧线 */
      .tree li:only-child::after, .tree li:only-child::before {
        display: none;
      }
      
      .tree li:only-child { padding-top: 0; }
      
      .tree li:first-child::before, .tree li:last-child::after {
        border: 0 none;
      }
      
      /* 添加垂直连接线到父级 */
      .tree li:last-child::before{
        border-right: 1px solid #ccc;
        border-radius: 0 5px 0 0;
      }
      
      .tree li:first-child::after{
        border-radius: 5px 0 0 0;
      }

      这段 CSS 代码构建了完整的树形连线逻辑。.tree li::before 负责从上方垂直到当前节点高度的线,.tree li::after 负责从当前节点向左或向右延伸的水平线。通过 :first-child 和 :last-child 的选择器,去除了边缘多余的线条,使图形更加整洁。节点本身可以通过 .node 类设置背景色、圆角和内边距,使其看起来像卡片。

      移动端响应式垂直转换策略

      当屏幕宽度较小时,横向布局会导致节点重叠或溢出。此时需要通过媒体查询将

        的子节点排列方式从 row 切换为 column。同时,连线的方向也需要调整:垂直线变为水平线,水平线变为垂直向下。这种转换使得树形图在手机上呈现为从上到下的垂直列表,符合移动用户的操作习惯。

        @media screen and (max-width: 768px) {
          .tree ul {
            flex-direction: column;
            padding-top: 0;
            padding-left: 20px;
          }
        
          .tree li {
            float: none;
            text-align: left;
            padding: 10px 0 0 0;
            width: calc(100% - 20px);
          }
        
          /* 重置连线逻辑 */
          .tree li::before, .tree li::after {
            border: 0 none;
          }
        
          /* 绘制左侧垂直线 */
          .tree li::before {
            border-left: 1px solid #ccc;
            height: 100%;
            top: 0;
            left: 0;
            width: 1px;
          }
        
          /* 绘制连接节点的短横线 */
          .tree li::after {
            border-top: 1px solid #ccc;
            width: 20px;
            height: 1px;
            top: 10px;
            left: 0;
          }
        
          .tree li:only-child::before, .tree li:only-child::after {
            display: none;
          }
        
          .tree li:only-child { padding-top: 0; }
        
          /* 修正首尾节点 */
          .tree li:first-child::before, .tree li:last-child::after {
            border: 0 none;
          }
          .tree li:last-child::before {
            border-left: 1px solid #ccc;
            border-radius: 0;
          }
        }

        在媒体查询中,.tree ul 的 flex-direction 被设为 column,使子节点垂直堆叠。连线的绘制逻辑完全重写:::before 现在作为左侧的垂直引导线,::after 作为连接节点标题的短横线。这种设计确保了即使在窄屏设备上,组织结构依然清晰可见,且不会出现横向滚动条。开发者可以直接复制上述代码块到项目中,替换 .node 的内容即可看到效果。

        前端入门到VUE实战笔记:立即使用
        在学习笔记中,你将探索 前端 的入门与实战技巧!

      • 相关文章

        PHP速学视频免费教程(入门到精通)
        PHP速学视频免费教程(入门到精通)

        PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

        下载

        相关标签:

        css

        本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

        相关专题

        更多
        css
        css

        css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

        2023.06.15

        5576

        6

        css居中
        css居中

        css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

        2023.07.27

        1197

        5

        css如何插入图片
        css如何插入图片

        cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

        2023.07.28

        2078

        6

        css超出显示...
        css超出显示...

        在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

        2023.08.01

        4226

        7

        css字体颜色
        css字体颜色

        CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

        2023.08.10

        8825

        11

        什么是css
        什么是css

        CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

        2023.08.10

        7471

        7

        css三角形怎么写
        css三角形怎么写

        CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

        2023.08.21

        2437

        9

        css设置文字颜色
        css设置文字颜色

        CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

        2023.08.22

        3591

        5

        css禁止点击事件
        css禁止点击事件

        实现css禁止点击事件的方法有使用CSS的pointer-events属性和使用JavaScript禁用点击事件。本专题为大家提供点击事件相关的文章、下载、课程内容,供大家免费下载体验。

        2023.08.23

        3173

        5

        热门下载

        更多
        网站特效
        /
        网站源码
        /
        网站素材
        /
        前端模板

        精品课程

        更多
        相关推荐
        /
        热门推荐
        /
        最新课程