HTML/CSS实现table内ul动态li超宽自动换行 避免列溢出
问题根源
布局溢出由三个核心问题导致:
<ul>设置了display:flex但flex-wrap: wrap被注释,flex子项默认强制在单行排列,超出容器宽度就会溢出- 表格默认使用
table-layout: auto规则,会优先根据内容宽度撑开单元格,没有强制约束内容宽度,最终覆盖右侧相邻列 - 给
.existing_number和内部ul写死100px固定宽度,和外层grid分配的62%列宽不适配,进一步加剧溢出问题。
修复方案
按以下步骤修改样式即可实现需求:
- 首先给表格添加固定布局规则,从外层约束单元格宽度,避免内容撑破表格结构
table { table-layout: fixed; width: 100%; /* 可根据实际页面需求调整表格总宽度 */ }
- 修改
.existing_number相关样式,开启flex换行,移除冲突的样式声明,适配网格容器宽度:
.dataset_number_container{ display: grid; grid-template-columns: 32% 62%; column-gap: 6%; .dataset_number{ input{ width: 60px; } } .existing_number{ width: 100%; /* 替换原写死的100px,适配grid分配的列宽 */ ul{ list-style: none; padding: 0; margin: 0; display: flex; align-items: center; gap: 5px; /* 控制li之间的横向间距 */ flex-wrap: wrap; /* 开启自动换行,核心修复项 */ width: 100%; /* 替换原写死的100px,撑满父容器 */ li{ width: 40px; height: 35px; margin-bottom: 5px; /* 控制换行后的上下行间距 */ display: flex; /* 替换原inline-block,配合居中属性生效 */ justify-content: center; align-items: center; background: #F5F6FA; border-radius: 4px; font-weight: 500; input{ width: 40px; height: 35px; text-align: right; } } } } }
最终效果
修改后,动态渲染的<li>元素总宽度超出容器宽度时会自动折行,第一行的li和左侧第一个输入框保持水平对齐,超出部分自动落到下方依次排列,不会再溢出覆盖右侧相邻列。
内容的提问来源于stack exchange,提问作者Rakesh Saini
相关产品推荐
相关产品推荐

