应使用语义化<section>包裹团队区并配aria-labelledby,每位成员用<article>而非<div>,姓名用<h3>、头像<img>必带描述性alt,链接需aria-label说明目的,动态加载内容须直接插入原生<article>标签。
直接说结论:用语义化 <section> 包裹,每个成员用 <article>,别用 <div> 堆砌——否则 SEO 和屏幕阅读器会“看不见”你的人。
团队成员区不是装饰画,是页面重要内容。搜索引擎和读屏软件靠 HTML 标签理解内容层级:
<section aria-labelledby="team-heading">,再配一个 <h2 id="team-heading">我们的团队</h2>
<article>,不是 <div class="card"> ——<article> 表示独立、可分发的内容单元(比如这个人可以单独 RSS 推送)<h3>,职位用 <p> 或 <span>(别用 <h4> 乱拉层级)<img> 必须带 alt,例如 alt="张伟,前端工程师",不能写 alt="头像"
取决于你是否要响应式换行和对齐控制:
display: grid 配 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)),一行放不满自动撑满,小屏自动单列display: flex + flex-wrap: wrap,但得手动算 flex-basis,容易在 Safari 里错位float 或 inline-block ——已过时,间隙难控,移动端塌陷常见line-height 模拟,用 display: flex; align-items: center; 更稳很多新手加个 <a href="/member/zhangwei"><img></a> 就完事,但这是错的:
立即学习“前端免费学习笔记(深入)”;
aria-label,例如 <a href="/member/zhangwei" aria-label="访问张伟的个人主页"><img alt="张伟,前端工程师"></a>
<h3>张伟</h3>,且整个 <article> 外层已包裹链接,那就不用重复加链接 —— 否则键盘 Tab 会扫两次同一人:hover)必须有对应键盘焦点态(:focus),否则盲人用户按 Tab 键看不到高亮最常被忽略的是:团队页一旦加了 JS 动态加载(比如“点击加载更多”),<article> 必须在 JS 插入后立刻被 DOM 正确识别——别等渲染完再补 role="article",那没用;原生 <article> 才生效。