Skip to main content

design-region-extractor

从指定区域/元素提取设计风格。输入目标网站 URL + 用户喜欢的具体区域描述, 精确提取该区域的设计 tokens(颜色、字体、间距、阴影等)。 触发方式:用户说"我喜欢这个按钮"、"提取这个区域"、"这个卡片好好看"、 "仿照这个导航栏"、"像 xxx 网站的那个 xxx" 等。 输出:该区域的精确设计规范 + 可直接应用的 CSS/Tailwind 代码。 前置要求:需要 Playwright CLI 或 browser 工具。

Informações da origem

Repositório
gszyboy/opencode-config
Última atividade na origem
18 de abril de 2026 às 06:07
Idioma detectado do SKILL.md
chinês
Estrelas
0
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
2 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
design-region-extractor
description
从指定区域/元素提取设计风格。输入目标网站 URL + 用户喜欢的具体区域描述, 精确提取该区域的设计 tokens(颜色、字体、间距、阴影等)。 触发方式:用户说"我喜欢这个按钮"、"提取这个区域"、"这个卡片好好看"、 "仿照这个导航栏"、"像 xxx 网站的那个 xxx" 等。 输出:该区域的精确设计规范 + 可直接应用的 CSS/Tailwind 代码。 前置要求:需要 Playwright CLI 或 browser 工具。
triggers
["^我喜欢.*这个","^提取.*区域","^这个.*好好看","^像.*那个","^仿照.*导航栏","^提取.*那个.*按钮","^分析.*这个.*区域","^提取.*那个.*样式"]
# Design Region Extractor Skill 从网页的具体区域/元素提取设计风格。 ## 核心价值 **你不需要会设计,也不需要会审查元素**。看到喜欢的按钮、卡片、导航栏,直接告诉我,我帮你: 1. 🎯 定位到你喜欢的那个具体元素 2. 📊 提取精确的设计数值 3. 💻 生成可直接用的代码 ## 工作流程 ``` 用户描述喜欢的地方 → 我定位元素 → 精确提取 → 生成代码 ``` ## Step 1: 理解用户想要哪个区域 用户可能这样描述: | 用户说 | 我的理解 | |--------|----------| | "我喜欢这个按钮" | 用户在页面上看到了一个喜欢的按钮 | | "这个卡片好好看" | 某个产品卡片/文章卡片 | | "仿照那个导航栏" | header 或 nav 导航区域 | | "像 xxx 网站的那个 CTA 按钮" | 特定网站的特定区域 | | "提取这个 hero section" | 首屏大区块 | **如果是自己网站的元素**:告诉我 URL + 描述是哪个区域 **如果是参考其他网站**:给我 URL + 描述 ### 如果用户给了截图 用户上传了截图并在上面标注了区域: ``` ✅ 收到截图! 请告诉我: 1. 这个网站是什么 URL?(如果有) 2. 你圈出的区域是网站的哪个部分?(如:登录按钮、右侧卡片、顶部导航栏) ``` ## Step 2: 定位元素 ### 方式 A:用户提供选择器(最快) 如果用户知道元素的选择器: ``` playwright-cli open <url> playwright-cli eval " (function() { const el = document.querySelector('USER_PROVIDED_SELECTOR'); if (!el) return { error: '元素未找到' }; const cs = getComputedStyle(el); return JSON.stringify({ backgroundColor: cs.backgroundColor, color: cs.color, fontSize: cs.fontSize, fontFamily: cs.fontFamily, fontWeight: cs.fontWeight, padding: cs.padding, margin: cs.margin, borderRadius: cs.borderRadius, boxShadow: cs.boxShadow, border: cs.border, display: cs.display, flexDirection: cs.flexDirection, alignItems: cs.alignItems, justifyContent: cs.justifyContent, gap: cs.gap, width: cs.width, height: cs.height }, null, 2); })() " ``` ### 方式 B:用户提供 URL + 描述,我推断选择器 用户:`https://xxx.com 我喜欢那个蓝色的登录按钮` ```bash playwright-cli open https://xxx.com # 我先用快照看看页面结构,推断选择器 playwright-cli snapshot ``` 然后我分析快照,结合用户描述(如"蓝色的登录按钮"),推断可能的选择器: - `button[type="submit"]` - `.login-btn` - `#submit` - `button:contains("登录")` 执行提取: ```bash playwright-cli eval " (function() { // 尝试多个可能的选择器 const selectors = [ 'button[type=\"submit\"]', '.login-btn', '#submit', 'button', '.btn-primary' ]; for (const sel of selectors) { const el = document.querySelector(sel); if (el) { const cs = getComputedStyle(el); return JSON.stringify({ selector: sel, found: true, styles: { backgroundColor: cs.backgroundColor, color: cs.color, fontSize: cs.fontSize, fontFamily: cs.fontFamily, fontWeight: cs.fontWeight, padding: cs.padding, borderRadius: cs.borderRadius, boxShadow: cs.boxShadow } }, null, 2); } } return { error: '未找到匹配的元素' }; })() " ``` ### 方式 C:用户上传截图 + URL,让我分析 1. 先用 Playwright 截图确认页面 2. 分析截图中的区域 3. 在页面上找到对应的元素 4. 执行提取 ## Step 3: 精确提取设计 Tokens 对于找到的元素,执行完整提取: ```bash playwright-cli eval " (function() { const el = document.querySelector('SELECTOR'); const cs = getComputedStyle(el); // 提取完整设计系统 return { // 颜色(转换 HEX) colors: { background: cs.backgroundColor, color: cs.color, border: cs.borderColor }, // 字体 typography: { fontFamily: cs.fontFamily, fontSize: cs.fontSize, fontWeight: cs.fontWeight, lineHeight: cs.lineHeight }, // 间距 spacing: { padding: { top: cs.paddingTop, right: cs.paddingRight, bottom: cs.paddingBottom, left: cs.paddingLeft }, margin: { top: cs.marginTop, right: cs.marginRight, bottom: cs.marginBottom, left: cs.marginLeft } }, // 边框 border: { radius: cs.borderRadius, width: cs.borderWidth, style: cs.borderStyle, color: cs.borderColor }, // 阴影 shadow: cs.boxShadow, // 布局 layout: { display: cs.display, flexDirection: cs.flexDirection, alignItems: cs.alignItems, justifyContent: cs.justifyContent, gap: cs.gap }, // 尺寸 sizing: { width: cs.width, height: cs.height, maxWidth: cs.maxWidth } }; })() " ``` ## Step 4: 生成可应用的代码 根据提取的 tokens,生成代码: ### Tailwind 配置 ```javascript // tailwind.config.js module.exports = { theme: { extend: { colors: { primary: '#HEX值', secondary: '#HEX值', }, borderRadius: { 'sm': 'Xpx', 'md': 'Xpx', }, boxShadow: { 'card': 'X X X rgba(0,0,0,X)', } } } } ``` ### CSS 变量 ```css /* design-region.css */ .region-button { background-color: var(--color-primary); color: var(--color-text); font-size: var(--font-size-base); font-family: var(--font-family); padding: var(--spacing-sm) var(--spacing-md); border-radius: var(--radius-md); box-shadow: var(--shadow-card); } ``` ## 输出格式 ``` ✅ 区域设计提取完成! 📍 目标区域:[用户描述] 🔍 选择器:[实际使用的选择器] ┌─────────────────────────────────────┐ │ 颜色 │ ├─────────────────────────────────────┤ │ Background: #HEX (rgb转HEX) │ │ Color: #HEX │ │ Border: #HEX │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ 字体 │ ├─────────────────────────────────────┤ │ Font: PingFang SC, sans-serif │ │ Size: 16px │ │ Weight: 600 │ │ Line Height: 1.5 │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ 间距 │ ├─────────────────────────────────────┤ │ Padding: 12px 24px │ │ Margin: 0 0 16px 0 │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ 边框与阴影 │ ├─────────────────────────────────────┤ │ Border Radius: 8px │ │ Box Shadow: 0 4px 12px rgba(...) │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ 布局 │ ├─────────────────────────────────────┤ │ Display: flex │ │ Flex Direction: row │ │ Align Items: center │ │ Gap: 12px │ └─────────────────────────────────────┘ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 已生成代码: • Tailwind 配置片段 • CSS 变量文件 • 组件示例代码 你想把这个设计用到哪里? 1. 我的登录按钮 2. 我的卡片组件 3. 告诉我你想做什么 ``` ## 常见区域参考 ### 按钮 ```javascript const buttonTokens = { backgroundColor: 'rgb(55, 95, 127)', // 主色 color: 'rgb(255, 255, 255)', // 白色文字 fontSize: '16px', fontWeight: '600', padding: '12px 24px', borderRadius: '8px', boxShadow: '0 4px 12px rgba(55, 95, 127, 0.3)' } ``` ### 卡片 ```javascript const cardTokens = { backgroundColor: 'rgb(255, 255, 255)', borderRadius: '12px', padding: '24px', boxShadow: '0 8px 32px rgba(0, 0, 0, 0.08)', border: '1px solid rgba(0, 0, 0, 0.06)' } ``` ### 导航栏 ```javascript const navTokens = { backgroundColor: 'rgb(255, 255, 255)', height: '64px', padding: '0 32px', boxShadow: '0 2px 8px rgba(0, 0, 0, 0.04)', borderBottom: '1px solid rgba(0, 0, 0, 0.06)' } ``` ## 注意事项 - **优先使用选择器**:告诉用户先在浏览器审查元素获取选择器,这样最准确 - **模糊描述时多尝试**:如果用户说"蓝色的按钮",我会尝试多个蓝色相关的选择器 - **颜色转换**:如果需要 RGB 转 HEX,用 `rgb(55, 95, 127)` → `#375f7f` - **保留精确值**:16px 就是 16px,不要四舍五入成 15px ## 适用场景 ✅ **你喜欢某个网站的一个按钮,想用到自己项目** ✅ **看到一个好看的卡片设计,想参考样式** ✅ **喜欢某个导航栏的风格,想复制布局** ✅ **看到好的设计,想提取具体数值学习** ## 禁忌事项 - ❌ 不要猜测数值,必须获取实际 computed style - ❌ 不要忽略 hover/active 状态,用户可能想了解不同状态 - ❌ 不要只说"提取完成",必须生成可应用的代码
Ver no GitHub