每个项目应封装为语义化 <section class="project"> 区块,含 <h3> 标题、<p class="meta"> 辅助信息(含 <time>)、简洁描述及可点击链接;移动端单列,平板起用 grid 自适应;强调时间精度、具体技术动作与量化结果。

项目经历怎么在 HTML 个人页面里排版才不乱
直接放一堆 <div> 套 <p>,看着就像简历 PDF 转成网页——信息堆着,没重点,手机上还错位。关键不是“怎么写 HTML”,而是“怎么让项目经历自己说话”。
核心思路:每个项目 = 一个语义区块 + 可读节奏 + 响应式锚点。别用 <table>,也别全靠 float 或手写 margin 调位置。
- 用
<section class="project">包裹单个项目,比<div>更利于 SEO 和屏幕阅读器识别 - 标题用
<h3>(不是<h2>),因为整个页面主标题应是<h1>,项目属于二级内容 - 技术栈、时间、角色这些辅助信息统一用
<small>或带class="meta"的<p>,字体小、颜色浅、不抢主描述 - 描述正文控制在 3–4 行,超长就加「展开」按钮(用
details/summary最轻量)
HTML 项目列表用什么结构最稳
别碰 <ul> + <li> 套项目——它适合菜单或标签,不适合含标题/时间/描述的复合内容。也不要用 <dl>,语义对不上,CSS 控制反而更麻烦。
推荐结构:<main> 下直接平铺多个 <section class="project">,每个内部按顺序组织:
立即学习“前端免费学习笔记(深入)”;
<section class="project"> <h3>电商后台管理系统</h3> <p class="meta"><time datetime="2023-03">2023.03–2023.08</time>|React + Ant Design|独立开发</p> <p>重构商品 SKU 管理模块,将平均操作耗时从 8s 降至 1.2s……</p> </section>
-
<time>标签自带datetime属性,方便未来加筛选或排序逻辑 - 所有项目用相同 class(如
project),CSS 用.project:not(:last-child) { margin-bottom: 2rem; }控制间距,避免底部多出空白 - 如果项目要排序(比如按时间倒序),后端吐数据时就排好;前端 JS 排序容易漏掉 DOM 更新或无障碍问题
响应式断点下项目列表怎么不挤成一坨
手机上看两栏项目并列?那不是“响应式”,是“自欺欺人”。真正的响应式是:小屏单列 + 合理留白 + 触控友好。
- 默认移动端优先:
.project { width: 100%; padding: 1rem; },不设固定宽度 -
平板及以上(≥768px)用
display: grid,但别写死grid-template-columns: repeat(2, 1fr)——改用minmax(300px, 1fr), ...,防窄屏撑破 - 绝对别给
<h3>设font-size: 1.5rem这种固定值,用rem或clamp()(如font-size: clamp(1.1rem, 4vw, 1.3rem);) - 项目间垂直间距用
margin-block(而非margin-top/bottom),兼容书写模式变化
为什么你写的项目列表总被说“像静态文档”
因为缺了两个隐形钩子:上下文线索 + 行动引导。纯文字罗列只是档案,不是经历。
- 每个项目加一个真实可点的链接:
<a href="https://github.com/xxx/project" target="_blank" rel="noopener">查看源码</a>,哪怕只是私有仓库地址(写 “源码私有” 也比空着强) - 技术栈别写 “Vue/Node.js”,写清楚角色:“用 Vue Composition API 封装表单校验 Hook”、“用 Node.js Stream 处理 CSV 导入”
- 上线项目补一句效果:“上线后客服工单处理效率提升 37%”——数字比“性能优化”三个字有力十倍
- 如果项目已下线,写明原因:“因业务整合于 2024 年 Q1 下线”,比留白或删掉更显真实
最常被忽略的是时间精度:写 “2023 年” 不如写 “2023.03–2023.08”,后者能自然暗示项目周期和投入密度。细节不靠堆,靠准。








