如何修改HTML/CSS代码实现自定义组织结构图布局
自定义组织结构图实现方案
以下是符合你需求的HTML+CSS实现,核心用Flex布局控制节点排列,CSS伪元素绘制连接线:
完整代码
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>组织结构图</title> <style> /* 全局重置 */ * { margin: 0; padding: 0; box-sizing: border-box; } body { padding: 50px; font-family: Arial, sans-serif; } /* 基础节点样式 */ .node { padding: 12px 20px; border: 2px solid #333; background-color: #fff; text-align: center; position: relative; min-width: 100px; } /* 组织结构图容器 */ .org-chart { display: flex; flex-direction: column; align-items: center; gap: 30px; /* 父节点与子节点容器的垂直间距 */ } /* 子节点容器(包含子节点和孙节点容器) */ .child-container { display: flex; flex-direction: column; align-items: center; gap: 20px; /* 子节点与孙节点容器的垂直间距 */ } /* 孙节点容器 */ .grandchild-container { display: flex; justify-content: center; gap: 50px; /* 孙节点之间的水平间距 */ position: relative; } /* 父节点到子节点的垂直线 */ .parent::after { content: ''; position: absolute; top: 100%; left: 50%; transform: translateX(-50%); width: 2px; height: 30px; /* 与.org-chart的gap值一致 */ background-color: #333; } /* 子节点到孙节点横向线的垂直线 */ .child::after { content: ''; position: absolute; top: 100%; left: 50%; transform: translateX(-50%); width: 2px; height: 20px; /* 与.child-container的gap值一致 */ background-color: #333; } /* 孙节点上方的横向连接线 */ .grandchild-container::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background-color: #333; } /* 每个孙节点到横向线的垂直线 */ .grandchild::before { content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 2px; height: 20px; /* 与.child-container的gap值一致 */ background-color: #333; } </style> </head> <body> <div class="org-chart"> <!-- 父节点 --> <div class="node parent">父节点</div> <!-- 子节点容器 --> <div class="child-container"> <div class="node child">子节点</div> <!-- 孙节点容器 --> <div class="grandchild-container"> <div class="node grandchild">孙节点1</div> <div class="node grandchild">孙节点2</div> <div class="node grandchild">孙节点3</div> </div> </div> </div> </body> </html>
关键实现说明
- 布局控制:通过
flex-direction: column实现父节点与子节点的垂直排列,孙节点容器默认flex-direction: row实现横向排列,align-items: center保证垂直居中对齐。 - 连接线绘制:利用CSS伪元素
::before/::after绘制线条,通过position: absolute定位,transform: translateX(-50%)实现水平居中,确保线条与节点中心对齐。 - 间距匹配:线条高度与容器
gap值保持一致,保证连接线的连续性和美观性。
内容的提问来源于stack exchange,提问作者sps
相关产品推荐
相关产品推荐

