用纯HTML+CSS实现语义清晰、响应式宠物日记页,以包裹每条记录,含、等标准标签,CSS Grid布局适配移动端单列与桌面多列,图片路径统一相对化,避免内联样式与localStorage陷阱,专注降低每日录入门槛。

用纯 HTML + CSS 实现宠物日记页,不需要框架也能结构清晰
直接上手就能用,不用学 Vue 或 React。核心是把「日期 + 照片 + 行为记录 + 体重/饮食备注」这四类信息组织成可读性强、易添加的块状结构。关键不是炫效果,而是让主人第二天打开网页就能快速填一条——否则再好看也坚持不下去。
-
<article></article>包裹每条日记,语义正确,方便后期加 JS 排序或搜索 - 日期用
<time datetime="2024-05-20">5月20日</time>,既对人友好,也利于爬虫和屏幕阅读器识别 - 照片统一用
<figure><img src="..." alt="小橘吃罐头"><figcaption>饭后打滚</figcaption></figure>,避免用<div> 堆砌,语义和可访问性都更稳 <li>别在 HTML 里写内联样式(比如 <code>style="margin-top: 12px;"),所有样式抽到<style></style>块或外部 CSS 文件里,否则改十张图的圆角要手动点十次
CSS 控制卡片式布局和响应式折叠
手机上看日记,图片和文字挤在一起会很难读;桌面端又希望横向空间利用充分。用 CSS Grid + @media 最直接:
.diary-list {
display: grid;
grid-template-columns: 1fr;
gap: 1.2rem;
}
@media (min-width: 768px) {
.diary-list {
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}
}
- 移动端默认单列,避免左右滑动看全文
-
minmax(320px, 1fr)确保每张卡片至少宽 320px(适配老款 iPhone),但能随窗口变大自动铺开 - 给
<img alt="HTML怎么做宠物日记页_html宠物成长日记页面实现【收藏】" >加max-width: 100%; height: auto;,防止图片撑破卡片 - 别用
float或inline-block做多列——它们对响应式支持差,且容易因空白符产生意外间隙
本地存储数据?别硬上 localStorage,先用 JSON 文件模拟
很多人一上来就想“怎么让日记存到浏览器里”,但实际需求只是“关掉页面再打开,昨天写的还在”。这时候直接用 localStorage 反而埋坑:容量上限约 5MB 没问题,但手动序列化/反序列化 JSON.parse()/JSON.stringify() 容易出错;更麻烦的是,用户清缓存就全丢了,还没法备份。
- 初期建议把每条日记存成独立的
diary-20240520.json文件,用静态服务器(如 Python 的python -m http.server)跑起来,后期再对接真实后端 - 如果真要用
localStorage,务必包裹 try/catch:try { localStorage.setItem('diary', JSON.stringify(data)); } catch (e) { console.error('存日记失败:', e); } - 注意
localStorage只存字符串,new Date()、undefined这类值存进去会变成"Invalid Date"或"undefined",必须提前处理
图片路径别写死,用相对路径 + 统一文件夹结构
常见错误是把照片路径写成 C:\Users\Me\Pictures\cat-0520.jpg 或 http://localhost:8000/images/cat-0520.jpg,结果换电脑或部署到 GitHub Pages 就全挂了。
立即学习“前端免费学习笔记(深入)”;
- 约定好根目录下建
/images/diary/文件夹,所有日记图放里面 - HTML 中统一用
<img src="images/diary/20240520-1.jpg" alt="...">,路径简洁、可移植 - 上传前用工具批量重命名照片(比如
20240520-1.jpg、20240520-2.jpg),比靠记忆找“IMG_1294.HEIC”靠谱得多 - GitHub Pages 默认不支持 WebP 格式,用
<picture></picture>做兼容很麻烦,初期直接用 JPG/PNG 更省心
src 路径,五张图全变红叉”。先保证新增一条日记的操作控制在 3 次点击以内——其余优化,等你真写满 30 天再说。



















