You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改inline-block元素参考点以修复家族树布局问题

家族树垂直连接线对齐问题解决

问题说明

现有家族树代码运行正常,但当某个成员盒子高度高于常规时,同一行的垂直连接线无法对齐。原因是inline-block元素默认以基线(左下角区域)作为对齐参考点,需要将其改为左上角对齐。

原始代码

CSS 样式

/* Tree */

.tree ul {
  padding-top: 20px;
  position: relative;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

.tree li {
  display: table-cell;
  text-align: center;
  list-style-type: none;
  position: relative;
  /*the padding is 20px + border-top = 23px*/
  padding: 23px 5px 0 5px;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}


/*We will use ::before and ::after to draw the connectors*/

.tree li::before,
.tree li::after {
  content: '';
  position: absolute;
  top: 0;
  right: 50%;
  border-top: 3px solid #ccc;
  width: 50%;
  height: 20px;
}

.tree li::after {
  right: auto;
  left: 50%;
  border-left: 3px solid #ccc;
}


/*We need to remove left-right connectors from elements without 
any siblings*/

.tree li:only-child::after,
.tree li:only-child::before {
  display: none;
}


/*Remove space from the top of single children*/

.tree li:only-child {
  padding-top: 0;
}


/*Remove left connector from first child and 
right connector from last child*/

.tree li:first-child::before,
.tree li:last-child::after {
  border: 0 none;
}


/*Adding back the vertical connector to the last nodes*/

.tree li:last-child::before {
  border-right: 3px solid #ccc;
  border-radius: 0 5px 0 0;
  -webkit-border-radius: 0 5px 0 0;
  -moz-border-radius: 0 5px 0 0;
}

.tree li:first-child::after {
  border-radius: 5px 0 0 0;
  -webkit-border-radius: 5px 0 0 0;
  -moz-border-radius: 5px 0 0 0;
}


/*Time to add downward connectors from parents*/

.tree ul ul::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  border-left: 3px solid #ccc;
  width: 0;
  height: 20px;
}

.tree li .family {
  position: relative;
}


/* Person */

.person {
  border: 3px solid black;
  padding: 10px;
  min-width: 150px;
  #min-height: 100px;
  to increase the min height of the boxes background-color: #FFFFFF;
  display: inline-block;
}

.person.female {
  border-color: #F45B69;
  top: 0px
}

.person.male {
  top: 0px;
  border-color: #456990;
}

.person .content {
  font-size: 16px;
  align=center;
  text-align: center;
}

HTML 结构

<body bgcolor="white" background="" vlink="peru" alink="peru" link="peru">
  <p align=center>
    <br><br>
    <b>
      <font size=6> <I> FAMILY TREE </I> </font>
      </br>

      <div class="tree" align=center>
        <ul>
          <li>
            <div class="person child male">
              <div class="content">
                Dupont Charles </br>
                France, 1900 - France, 1970</br></br>
                <div align=left>
                  Spouse: Celine, born Dupone</br>
                  &#10551 TREE
                </div>
              </div>
            </div>
            <ul>
              <li>
                <div class="person child male">
                  <div class="content">Uncle</br></br></div>
                </div>
              </li>
              <li>
                <div class="person child female">
                  <div class="content">Aunt blabla</br>blabla</br>blabla</div>
                </div>
              </li>
              <li>
                <div class="person child female">
                  <div class="content">Mother</br>&nbsp</div>
                </div>
                <ul>
                  <li>
                    <div class="person child male">
                      <div class="content">Me</div>
                    </div>
                  </li>
                  <li>
                    <div class="person child female">
                      <div class="content">Sister</div>
                    </div>
                    <ul>
                      <li>
                        <div class="person child male">
                          <div class="content">Me</div>
                        </div>
                      </li>
                      <li>
                        <div class="person child female">
                          <div class="content">Sister</div>
                        </div>
                      </li>
                    </ul>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </div>
  </p>
</body>

解决方法

核心是修改.person类的垂直对齐方式,将默认的基线对齐改为顶部对齐:

在.person的CSS规则中添加:

vertical-align: top;

修改后的.person样式如下:

.person {
  border: 3px solid black;
  padding: 10px;
  min-width: 150px;
  background-color: #FFFFFF;
  display: inline-block;
  vertical-align: top; /* 新增这一行 */
}

同时建议清理原始CSS中的无效注释(#min-height: 100px;和to increase...),避免影响样式解析。

修改后,所有成员盒子会以左上角为对齐参考点,同一行的垂直连接线就能保持对齐,不会因盒子高度不同而错位。


内容的提问来源于stack exchange,提问作者MikeTeX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:34:54