Communitygithub.com

hubeiqiao/apple-bento-grid

创建苹果风格的Bento Grid演示卡片,用于展示项目统计、时间线和成就。生成自包含的HTML文件,包含零间距网格、统计卡片、药丸标签、条形图和深色引用卡片——优化用于截图导出。支持浅色(苹果标志性 #f5f5f7)和深色(#000)主题。

apple-bento-grid 是什么?

该技能可根据用户的项目数据、里程碑和成就,自动生成苹果风格的Bento Grid演示卡片,输出为自包含的HTML文件。它解决了传统设计工具(如Figma或Keynote)创建演示图形的繁琐问题,用户无需任何设计技能即可获得像素完美的截图。技能支持浅色和深色两种主题,提供三种布局模板(4列、3列和垂直2列),并能智能匹配卡片类型(如 Hero、Stat、Category、Bar Chart、Badge、Quote、Highlight)。整个HTML文件内联所有CSS,仅依赖Google Fonts,适用于Playwright截图导出。用户只需提供内容,技能即可自动或根据用户偏好生成完整的可视化网格,并包含视觉审查步骤以确保证明无误的输出。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add hubeiqiao/apple-bento-grid

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

预览

来自技能 README

apple-bento-grid preview

文档

Apple Bento Grid

问题

创建视觉精美的演示图形通常需要Figma或Keynote等设计工具。本技能可生成苹果品质的Bento Grid布局,作为自包含的HTML文件,截图后即可获得像素完美的图像——无需设计工具。

概述

生成自包含的HTML文件,呈现苹果风格的Bento卡片网格。每个输出都是一个单一的HTML文件,包含内联CSS——除Google Fonts外无其他依赖。卡片填满紧密的CSS网格,间距极小,可用于Playwright以2倍分辨率截图导出。提供浅色和深色两种主题。

工作流程

  1. 有选择地读取设计系统:根据需要参考design-system.md:
    • 始终读取:第2节(零间距网格)+ 第3节(布局模板)——网格基础
    • 按卡片类型读取:根据需要读取5.1–5.7节
    • 读取主题:第1节(浅色标记)或第9节(深色标记)
    • 首次生成时读取一次:第8节(HTML骨架)作为结构起点
  2. 收集用户内容——要展示哪些统计数据、里程碑、类别和引用
  3. 选择主题——根据上下文建议浅色、深色或两者(见下方主题选择)
  4. 选择布局——根据卡片数量和方向从3种布局模板中选择
  5. 组合卡片——选择卡片类型并填充用户内容;优先考虑密度(没有空荡荡的卡片)
  6. 询问徽标/图片——如果用户有徽标或图片,则将其融入(见下方徽标与图片)
  7. 生成HTML——生成一个自包含的HTML文件
  8. 视觉审查——在浏览器中打开HTML并截图以检查问题(见下方视觉审查)
  9. 提供垂直版本——生成立方体网格后,询问:“想要用于社交媒体的垂直(竖屏)版本吗?” 如果用户同意,则生成模板C的适配版
  10. 截图(可选)——使用Playwright脚本以2倍分辨率捕获PNG

视觉审查

生成HTML后,务必查看输出以在呈现给用户之前发现视觉问题。使用Playwright、浏览器MCP工具或open命令渲染文件,然后检查:

孤行 —— 单个药丸标签或单词单独换行。解决方法是移除一个药丸,使剩余药丸均匀排列,或添加足够多的药丸填满两整行。

空白空间 —— 卡片看起来稀疏,空白过多。解决方法是添加副标题、徽章或额外描述文字以填充卡片。

文本溢出 —— 数字或标签超出其卡片宽度。解决方法:减小字体大小或使用缩写(例如“$2.4M”而非“$2,400,000”)。

网格断裂 —— 可见的行间距或卡片对齐错误。检查:没有align-items: start,间距正好为6px,所有网格单元格均已占用。

字体回退 —— 文本渲染为系统字体而非Sora/DM Sans。确保Google Fonts链接存在且页面有网络访问权限。

截图裁剪 —— 导出的PNG中卡片右边缘或底边缘被裁剪。解决方法:确保视口宽度与网格CSS宽度完全匹配,并且剪辑区域使用boundingBox()的box.x/box.y,而不是x: 0, y: 0。

如果发现任何问题,修复HTML并重新检查。在输出通过视觉审查之前,不要呈现给用户。

主题选择

根据上下文建议主题。不确定时,生成两种主题。

上下文建议主题
幻灯片/演示深色——在投影仪上视觉效果更强
社交媒体/作品集深色——在信息流中脱颖而出
报告/文档嵌入浅色——与白色页面背景相符
打印/PDF浅色——节省墨水,可读性更好
用户说“苹果风格”浅色——苹果的标志性外观
用户说“现代”或“时尚”深色——当代感
未表明偏好两者——生成两个文件,让用户选择

参见design-system.md第9节获取完整的深色主题标记,或第1节获取浅色主题标记。

输出格式

始终生成一个自包含的HTML文件,包含:

  • <!DOCTYPE html> + <html lang="en">
  • Google Fonts <link> 标签在 <head> 中
  • 所有CSS在单个 <style> 块中
  • 所有内容在 <body> 中——无需JavaScript

可用卡片类型

卡片用途关键特性
Hero标语、标题渐变顶部边框,跨2行
Stat数字+标签按类别颜色编码强调
Category分组项目(阶段、团队、季度)颜色标签+副标题+药丸标签
Bar Chart随时间增长/比较渐变条形,头部徽章
Badge工具归属、特色标注图标药丸+统计数字
Quote使命宣言、推荐语深色背景,白色文本,绿色 <em>
Highlight英雄数字(3x、10x、100%)全渐变背景

布局模板

模板列数宽度宽高比适用场景
A: 水平4列1200px52/2512-16张卡片,幻灯片
B: 水平3列1100px52/228-10张卡片,聚焦
C: 垂直2列600px无(内容自适应)8-14张卡片,社交媒体

关键:零间距网格规则

以下5条规则是获得苹果风格外观的强制要求。详见design-system.md第2节。

  1. 切勿设置 align-items: start——默认的stretch可填满单元格
  2. 在水平布局上使用 aspect-ratio 来锁定容器形状
  3. 行:水平布局用 1fr,垂直布局用 auto
  4. 间距:6px(非8px)
  5. 每个网格单元格必须被占用——无空单元格

截图导出

使用位于 scripts/screenshot.mjs 的Playwright脚本捕获像素完美的PNG。

cd scripts
npm install
npx playwright install chromium
node screenshot.mjs

编辑 screenshot.mjs 中的 pages 数组,指向你的HTML文件。每个条目需要:file(HTML路径)、output(PNG路径)、viewportWidth(与网格宽度匹配)。

关键:视口宽度必须与网格宽度匹配。 如果视口宽于网格,网格会居中,导致剪辑可能切掉右边缘。始终将viewportWidth设置为精确的网格CSS宽度(4列用1200,3列用1100,2列用600)。

关键:剪辑必须使用元素位置。 当剪辑到网格元素时,使用boundingBox()的box.x和box.y,而不是 x: 0, y: 0。如果网格在更宽的视口中居中,x: 0 会使剪辑在网格之前开始,从而切掉右侧。

截图后,务必查看输出图像,以验证没有边缘被裁剪。检查最右侧和最底部的卡片是否完全可见,并且其圆角边框完整。

徽标与图片

用户可以在Bento Grid卡片中添加自己的徽标或图片。询问用户是否有任何徽标或图片需要包含。

放置选项:

位置方式适用场景
Hero卡片角落<img> 配合 position: absolute; top: 20px; right: 20px; width: 40px;公司徽标
Badge卡片图标用 <img> 标签(width: 16px; height: 16px; border-radius: 4px;)替换 .badge-pill 中的SVG工具/框架徽标
全卡片背景background-image: url(...) 配合叠加渐变以增强文本可读性功能截图
独立图片卡片<img> 填满卡片,object-fit: cover; border-radius: 18px;产品照片

指南:

  • 使用 <img src="path/to/file.png"> 配合本地文件路径——HTML用于截图导出,而非托管
  • 保持徽标较小(24–48px),以免占满卡片
  • 对于深色主题,确保徽标在深色背景上可用(使用白色/浅色版本)
  • 始终添加 alt 文本以实现无障碍

内容适配

用户数据推荐模板卡片组合
3–5个统计数据,无类别C(2列垂直)1个Hero + 3–5个Stat + 1个Quote
6–8个统计数据,1–2个类别B(3列水平)1个Hero + 4–6个Stat + 1–2个Category + 1个Chart
8–12个统计数据,3+个类别A(4列水平)完整组合:Hero、Stat、Category、Chart、Badge、Quote、Highlight
社交媒体/竖屏格式C(2列垂直)任意组合,使用较小字体

密度规则:每张卡片都应感觉充实。如果某张卡片看起来稀疏,添加副标题、徽章或药丸标签。如果网格中存在明显的空白空间,要么将某张卡片跨越单元格,要么添加一张辅助卡片。

自定义清单

  1. 收集内容——统计数据、类别、里程碑、引用
  2. 选择主题——浅色、深色或两者
  3. 选择布局——4列、3列或2列
  4. 命名网格区域——与内容匹配的可读名称
  5. 选择卡片类型——Hero、Stat、Category、Chart、Badge、Quote、Highlight
  6. 分配强调色——每个类别一种颜色,最多3–4种强调色
  7. 设置尺寸——视口宽度与网格宽度匹配
  8. 锁定宽高比——仅水平布局;垂直布局省略
  9. 验证密度——没有空荡的卡片,没有未使用的网格单元格,间距为6px
  10. 按方向缩放——垂直布局使用更小的字体、内边距和圆角
  11. 截图——Playwright以2倍分辨率,视口宽度与网格宽度匹配

验证

生成Bento Grid HTML文件后:

  1. 在Chrome或Safari中打开——验证所有网格单元格已填充,没有可见的行间距
  2. 检查字体加载——应渲染Sora和DM Sans(而非系统回退字体)
  3. 对于深色主题——验证卡片背景为#1a1a1a,而非#fff
  4. 在正确的视口宽度(1200/1100/600)下以2倍分辨率截图
  5. 确认密度——没有卡片出现过多空白

备注

  • Google Fonts需要互联网访问;离线时网格将回退到系统字体
  • Playwright截图是可选的;用户可以手动进行浏览器截图
  • aspect-ratio 仅适用于水平布局;垂直布局的高度由内容决定
  • 每个网格最多使用3–4种强调色,以保持苹果风格的克制
  • 本技能生成用于截图导出的静态HTML,而非交互式仪表盘
  • 对于少于6个数据点的网格,模板C(2列垂直)通常效果最佳

参考文件

相关技能