推荐用 flexbox 或 css grid 实现多列平铺图文列表:flexbox 通过 display: flex + flex-wrap 控制等宽换行,grid 用 grid-template-columns + 媒体查询响应式调列数,均需保持 语义结构、图片 alt 属性及可访问性。

用 HTML 列表实现多列平铺的图文分类列表,核心是让 <li> 项横向排列并均匀分布,同时保持语义清晰、响应式友好。纯 HTML 不支持直接“多列平铺”,需结合 CSS 布局控制 —— 推荐用 Flexbox 或 CSS Grid,避免浮动或表格等过时方案。
用 Flexbox 实现等宽多列(推荐)
给 <ul></ul> 设置 display: flex,再用 flex-wrap: wrap 允许换行,配合 flex: 1 或固定宽度控制每项尺寸:
- HTML 结构保持语义化:用
<ul><li><figure><img><figcaption>...</figcaption></figure></li></ul>包裹图文 - CSS 中设
ul { display: flex; flex-wrap: wrap; gap: 1rem; } - 每个
li设为flex: 1 1 calc(33.333% - 0.666rem);(三列,自动减去 gap 占位),或用min-width触发换行(如min-width: 280px;) - 图片建议设置
width: 100%; height: auto;防止拉伸,文字用word-break: break-word;防溢出
用 CSS Grid 实现更灵活的列数控制
Grid 更适合明确列数或响应式断点切换:
-
ul { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }直接定义三列等宽 - 配合媒体查询动态调整列数:
@media (max-width: 768px) { grid-template-columns: repeat(2, 1fr); } - 若想每项占满整行(如标题分类项),可用
grid-column: 1 / -1;跨列 - 避免在
li上设固定高度,优先用min-height保证图文对齐
保持可访问性与语义正确性
多列布局不改变列表的语义结构,但需注意:
- 不要用
<div> 替代 <code><ul><li></ul>—— 屏幕阅读器依赖语义识别导航逻辑 - 图片必须有
alt属性,分类名称建议放在<figcaption></figcaption>或<h3></h3>内(根据重要性) - 避免仅靠视觉位置表达层级(比如“第一列是热门”),必要时加
aria-label或隐藏文本说明 - 键盘 Tab 浏览顺序默认按 DOM 顺序,Flex/Grid 不影响逻辑流,无需额外干预
- 如需兼容 IE11,Flexbox 可用
-ms-flex前缀,Grid 则建议降级为 Flex 或 JS 补充(如 Masonry 不适用图文均高场景) - 移动端建议最小列宽 ≥ 240px,避免文字挤成一条线;用
clamp(240px, 33vw, 320px)动态缩放更稳妥 - 慎用
column-count(CSS 多列布局)—— 它会破坏li的块级结构,导致图文错位,不适合分类列表
响应式与兼容性小提醒
现代项目可放心用 Flex/Grid(IE11 需加前缀或降级):











