勋章墙核心是flex/grid布局+svg/img渲染+语义化可访问性;正确做法:容器flex-wrap换行、flex计算等宽、max-width防溢出;优先内联svg支持主题色;用dialog实现轻量弹窗并确保响应式与键盘导航。

直接说结论:勋章墙不是靠“堆 HTML 标签”做出来的,核心是用 flex 或 grid 控制布局 + img 或 svg 渲染徽章 + 用 aria-label 和语义化结构保可访问性——否则手机点不开、屏幕阅读器念不清、换浏览器排版全乱。
怎么让勋章自动等宽换行不溢出容器
常见错误是给每个勋章套 div 后用 float 或一堆 margin 硬调,结果缩放页面就错位。正确做法是把勋章容器设为 display: flex 并启用换行:
- 容器加
display: flex; flex-wrap: wrap; gap: 12px;(gap比margin更可靠) - 每个勋章用
flex: 0 0 calc(25% - 9px);(四列布局,减去 gap 占用) - 必须设容器
max-width和box-sizing: border-box,否则 padding 会撑破宽度 - 别用
width: 25%—— 遇到边框/内边距时计算会失准
勋章图标用 img 还是 svg?
优先选内联 svg,尤其当需要动态变色或适配深色模式时:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
-
img简单但无法用 CSS 改颜色,src加载失败就留白 - 内联
svg可直接加fill: currentColor,配合父级color自动响应主题色 - 如果用外部
svg文件,记得加loading="lazy"和decoding="async"防阻塞渲染 - 所有图标必须带
aria-label,例如<svg aria-label="已通过 JavaScript 高级认证"></svg>
点击勋章弹出详情的轻量实现
不用引入整个 Modal 库,原生 HTML + 少量 JS 就够用:
- 每个勋章加
data-detail属性存描述文本:data-detail="掌握闭包、原型链与事件循环" - 用
dialog元素(现代浏览器支持良好,showModal()自动处理焦点和遮罩) - JS 只需监听点击,读取
dataset.detail填入dialog内容,再调用.showModal() - 务必加
role="dialog"和aria-modal="true",否则屏幕阅读器无法识别模态上下文
最容易被忽略的是响应式断点和可访问性交互反馈——比如小屏下勋章列数要从 4 列退到 2 列甚至 1 列,而键盘用户按 Tab 时焦点必须能落到每个勋章上,且有清晰的视觉聚焦样式。这些不是“锦上添花”,而是决定别人能不能真正看到你花了心思做的成就。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










