求助:为CSS Flex实现的赛事对阵表添加日期与比分不破坏布局
赛事对阵表添加日期/比分后布局修复方案
问题说明
使用HTML和CSS制作的赛事对阵表,通过display: flex(含兼容前缀-ms-flexbox/-ms-flex)实现对阵布局,但添加比赛日期(如.datetime元素)和比分后,原有布局完全混乱,需调整样式确保新增元素不破坏结构。
修复后的完整代码
CSS 代码
.playoff-table * { box-sizing: border-box; } .playoff-table { font-family: sans-serif; font-size: 15px; line-height: 1.42857143; font-weight: 400; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; background-color: #f5f5f5; } .playoff-table .playoff-table-content { display: -webkit-flex; display: -ms-flexbox; display: -ms-flex; display: flex; padding: 80px; } .playoff-table .playoff-table-tour { display: -webkit-flex; display: -ms-flexbox; display: -ms-flex; display: flex; -webkit-align-items: center; -ms-align-items: center; align-items: center; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-justify-content: space-around; -ms-justify-content: space-around; justify-content: space-around; position: relative; } .playoff-table .playoff-table-pair { position: relative; } /* 调整日期标记线的位置,适配新增的datetime元素 */ .playoff-table .playoff-table-pair:before { content: ''; position: absolute; top: 53px; right: -12px; width: 12px; height: 1px; background-color: blue; } .playoff-table .playoff-table-pair:after { content: ''; position: absolute; width: 3px; height: 1000px; background-color: #f5f5f5; right: -12px; z-index: 1; } .playoff-table .playoff-table-pair:nth-child(even):after { top: 54px; } .playoff-table .playoff-table-pair:nth-child(odd):after { bottom: 54px; } .playoff-table .playoff-table-pair-style { border: 1px solid #cccccc; background-color: white; width: 160px; margin-bottom: 20px; } .playoff-table .playoff-table-group { padding-right: 11px; padding-left: 10px; margin-bottom: 20px; position: relative; overflow: hidden; height: 100%; display: -webkit-flex; display: -ms-flexbox; display: -ms-flex; display: flex; -webkit-align-items: center; -ms-align-items: center; align-items: center; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-justify-content: space-around; -ms-justify-content: space-around; justify-content: space-around; } .playoff-table .playoff-table-group .playoff-table-pair-style:last-child { margin-bottom: 0px; } .playoff-table .playoff-table-group:after { content: ''; position: absolute; top: 54px; bottom: 55px; right: 0px; width: 1px; background-color: red; } .playoff-table .playoff-table-group:last-child { margin-bottom: 0; } .playoff-table .playoff-table-left-player, .playoff-table .playoff-table-right-player { min-height: 26px; padding: 3px 5px; } .playoff-table .playoff-table-left-player { border-bottom: 1px solid #cccccc; } /* 调整左侧连接线的位置,适配datetime元素 */ .playoff-table .playoff-table-left-player:before { content: ''; position: absolute; bottom: 53px; left: -12px; width: 12px; height: 1px; background-color: red; } .playoff-table .playoff-table-right-player { margin-top: -1px; border-top: 1px solid #cccccc; } /* 新增datetime元素的样式,确保布局稳定 */ .playoff-table .datetime { padding: 3px 5px; font-size: 12px; border-bottom: 1px solid #cccccc; min-height: 26px; display: flex; justify-content: space-between; align-items: center; } .playoff-table .playoff-table-third-place { position: absolute; left: 11px; top: 50%; transform: translateY(-50%); margin-top: 100px; } .playoff-table .playoff-table-third-place .playoff-table-left-player:before { display: none; } .playoff-table .playoff-table-tour:first-child .playoff-table-group { padding-left: 0; } .playoff-table .playoff-table-tour:first-child .playoff-table-left-player:before { display: none; } .playoff-table .playoff-table-tour:last-child .playoff-table-group:after { display: none; } .playoff-table .playoff-table-tour:last-child .playoff-table-pair:after, .playoff-table .playoff-table-tour:last-child .playoff-table-pair:before { display: none; }
HTML 代码
<div class="playoff-table"> <div class="playoff-table-content"> <div class="playoff-table-tour"> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style "> <div class='datetime'>12:30 <span>12/12/2023</span></div> <div class="playoff-table-left-player">player1 8</div> <div class="playoff-table-right-player">player2 2</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>13:00 <span>12/12/2023</span></div> <div class="playoff-table-left-player">player3</div> <div class="playoff-table-right-player">player4</div> </div> </div> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>14:00 <span>13/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>15:00 <span>13/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> </div> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>16:00 <span>14/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>17:00 <span>14/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> </div> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>10:00 <span>15/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>11:00 <span>15/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Player 16</div> </div> </div> </div> <div class="playoff-table-tour"> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>14:00 <span>16/12/2023</span></div> <div class="playoff-table-left-player">PLAYER 5</div> <div class="playoff-table-right-player">Сидоров 2</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>15:30 <span>16/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> </div> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>10:00 <span>17/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>11:30 <span>17/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> </div> </div> <div class="playoff-table-tour"> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>14:00 <span>18/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>15:30 <span>18/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> </div> </div> <div class="playoff-table-tour"> <div class="playoff-table-group"> <div class="playoff-table-pair playoff-table-pair-style"> <div class='datetime'>14:00 <span>19/12/2023</span></div> <div class="playoff-table-left-player">winer</div> <div class="playoff-table-right-player">Сидоров</div> </div> <div class="playoff-table-third-place playoff-table-pair-style"> <div class='datetime'>11:00 <span>19/12/2023</span></div> <div class="playoff-table-left-player">Иванов</div> <div class="playoff-table-right-player">Сидоров</div> </div> </div> </div> </div> <div class="playoff-table-pair-style"> The Winner is : </div> <div class="playoff-table-pair-style"> Third Place IS : </div> </div>
关键修改点
- 新增
.datetime样式:给日期元素设置固定高度、内边距和边框,确保它和选手区域高度统一,避免容器高度突变。 - 调整连接线位置:所有通过
position:absolute定位的连接线(如.playoff-table-pair:before、.playoff-table-group:after等)的top/bottom值适配新增元素高度,保证线条对齐正确。 - 优化日期显示结构:将日期和时间拆分,用flex布局左右分布,提升可读性。
- 统一容器高度规则:确保所有对阵卡片的子元素高度一致,flex容器的对齐逻辑不受新增元素影响。
内容的提问来源于stack exchange,提问作者NoGodButAllah
相关产品推荐
相关产品推荐

