如何修改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> ⤷ 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> </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
相关产品推荐
相关产品推荐

