食谱卡片(份量换算 + 收藏交互 CSS 源码)
食谱卡片组件源码:份量加减自动换算食材用量、收藏状态切换、烹饪时间与难度标签,纯 CSS + 原生 JS 实现,适合美食博客、菜谱列表页与餐饮小程序。
效果演示(真实可交互)
下方是一张广式腊味煲仔饭食谱卡片:顶部渐变插画区带表情符号与「粤式经典」徽章,中部展示烹饪时间、难度与份量元信息,食材清单每行右侧的用量与份量实时联动。点击「+ / −」把份量从 1 调到 8,米、腊肠、腊肉、鸡蛋等用量会按比例自动换算;点击「收藏食谱」可切换为红色「♥ 已收藏」状态,并带一次心跳缩放动画。
广式腊味煲仔饭
腊肠腊肉双拼、金黄锅巴,一锅端出街头烟火气。食材用量随份量自动换算。
- 丝苗米150g
- 广式腊肠2 根
- 腊肉80g
- 鸡蛋1 个
- 菜心4 棵
- 煲仔饭酱油30ml
完整代码
HTML 结构:卡片由插画区(.rc-hero)与内容区(.rc-body)组成,食材行用静态结构 + JS 索引一一对应:
<div class="rc-card">
<div class="rc-hero">
<span class="rc-emoji">🍚</span>
<span class="rc-badge">粤式经典 · 一锅成饭</span>
</div>
<div class="rc-body">
<h3>广式腊味煲仔饭</h3>
<div class="rc-meta">
<span>⏱ 45 分钟</span><span>🔥 中难度</span><span>👥 <b>2</b> 人份</span>
</div>
<ul class="rc-ing">
<li><span>丝苗米</span><b class="rc-q">150g</b></li>
<!-- 其余食材行同理 -->
</ul>
</div>
</div>
核心 CSS:卡片使用深色渐变 + 双层 radial 光斑营造氛围;收藏按钮激活态用边框与背景色切换,图标配一次心跳关键帧:
.rc-fav.active {
background: rgba(255, 107, 138, .14); border-color: #ff6b8a; color: #ff6b8a;
}
.rc-fav.active #rcFavIcon { animation: rcHeart .45s ease; }
@keyframes rcHeart {
0% { transform: scale(1); }
40% { transform: scale(1.5); }
100% { transform: scale(1); }
}
原生 JS:份量换算的核心是「每份基准量数组 × 份数」,再按单位格式化:
const BASE = [75, 1, 40, 0.5, 2, 15]; // 每份:米g/腊肠根/腊肉g/鸡蛋个/菜心棵/酱油ml
const UNITS = ['g', ' 根', 'g', ' 个', ' 棵', 'ml'];
function render() {
qEls.forEach((el, i) => {
el.textContent = fmt(BASE[i] * servings) + UNITS[i];
});
}
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| 份数范围 | 1 – 8 | 加减按钮的上下限,可自行调整 |
每份基准量 BASE | [75, 1, 40, 0.5, 2, 15] | 与食材行一一对应,改菜谱时同步改数组 |
单位数组 UNITS | ['g', ' 根', …] | 与基准量配对,决定用量后缀 |
| 初始份数 | 2 | 页面加载时的默认份量 |
| 收藏文案 | 收藏食谱 / 已收藏 | 切换态文案,可替换 |
兼容性与性能
- 全部使用原生 DOM API 与 CSS 动画,无第三方依赖,兼容所有现代浏览器
- 用量换算只更新 6 个文本节点,无重排压力,不会触发整卡重绘
Number.isInteger判断整数,0.5 份鸡蛋这类小数用量会显示为一位小数- 收藏心跳动画走
transform合成属性,性能开销可忽略
常见问题
Q: 换了菜谱怎么改用量? 只需替换 BASE 与 UNITS 两个数组,顺序与食材行一一对应即可,份数逻辑无需改动。
Q: 份数想支持小数(如 2.5 人份)? 把加减按钮步长改为 0.5 并去掉整数下限判断即可,换算公式天然支持小数。
Q: 收藏状态刷新后丢失怎么办? 演示版只做了内存态;生产环境可把状态写入 localStorage 或对接登录用户接口。
Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。