frontend-design
npx skills add https://github.com/yyh211/claude-meta-skill --skill frontend-design
Agent 安装分布
Skill 文档
Frontend Design Skill
æ¤æè½æå¯¼å建ç¬ç¹çç产级å端çé¢ï¼é¿å 平庸ç”AI ç²ç³”ç¾å¦ãå®ç°çæ£å¯ç¨ç代ç ï¼å¹¶é«åº¦å ³æ³¨ç¾å¦ç»èååæéæ©ã
When to Use This Skill
ä½¿ç¨æ¤æè½å½ç¨æ·è¯·æ±ï¼
- æå»º Web ç»ä»¶ã页颿宿´åºç¨ç¨åº
- å建çé页ã仪表çæè¥é页é¢
- 设计 ReactãVue æåç HTML/CSS çé¢
- ç¾åæéæ°è®¾è®¡ç°æç Web UI
- å建海æ¥ãç´ ææè§è§è®¾è®¡å ç´ ï¼ç¨äº Webï¼
- éè¦é«è®¾è®¡åè´¨åç¬ç¹ç¾å¦çä»»ä½å端项ç®
å ³é®è§¦åè¯: Web ç»ä»¶ã页é¢ãåºç¨ãç½ç«ãçé页ã仪表çãReact ç»ä»¶ãHTML/CSSãUI 设计ãç¾åãå端
æ ¸å¿åå
å¨ç¼å代ç ä¹åï¼å¿ é¡»è¿è¡æ·±å ¥ç设计æèãæ¯ä¸ªçé¢é½åºè¯¥æ¯ç¬ç¹çãææå¾çã令人é¾å¿çã
设计æç»´æµç¨
å¨å®ç°ä»»ä½ä»£ç ä¹åï¼åç以ä¸é®é¢ï¼
1. ç®ç (Purpose)
- é®é¢: æ¤çé¢è§£å³ä»ä¹é®é¢ï¼
- ç¨æ·: è°ä½¿ç¨å®ï¼å¨ä»ä¹æ å¢ä¸ä½¿ç¨ï¼
- ç®æ : ç¨æ·éè¦å®æä»ä¹ä»»å¡ï¼
2. 飿 ¼æ¹å (Style Direction)
éæ©ä¸ä¸ªæç¡®ä¸å¤§èçç¾å¦æ¹åãä¸è¦éæ©”ç°ä»£ç®çº¦”è¿æ ·çéç¨æè¿°ï¼èæ¯éæ©æè´ç飿 ¼ï¼
飿 ¼é项ï¼ä½ä¸éäºè¿äºï¼ï¼
- æç®ä¸»ä¹: æåº¦å å¶ï¼å¤§éçç½ï¼ç²¾åæç
- æè´æ··ä¹±: å¯éå¸å±ï¼éå å ç´ ï¼è§è§å²å»
- å¤å¤æªæ¥ä¸»ä¹: 80年代éè¹è²ï¼ç½æ ¼ï¼åææ³¢é£æ ¼
- ææº/èªç¶: æµå¨å½¢ç¶ï¼èªç¶è²è°ï¼æåæ²çº¿
- 奢å/ç²¾è´: ä¼é åä½ï¼éè²ç¹ç¼ï¼ç²¾ç»ç»è
- ä¿ç®/ç©å ·æ: æäº®è²å½©ï¼åè§ï¼è¶£å³å¨ç»
- ç¼è¾/æå¿é£æ ¼: 大èæçï¼ç½æ ¼ç³»ç»ï¼é»ç½ä¸ºä¸»
- ç²ç·/åå§: åè²ï¼ç¡¬è¾¹ï¼å®ç¨ä¸»ä¹
- è£ é¥°èºæ¯/å ä½: å¯¹ç§°å¾æ¡ï¼å ä½å½¢ç¶ï¼é«å¯¹æ¯åº¦
- æå/ç²å½©: 温åè²å½©ï¼æ¸åï¼æ¢¦å¹»æ
- å·¥ä¸/å®ç¨: ç³»ç»åä½ï¼åè²ï¼åè½ä¼å
- æ°ææ: æåé´å½±ï¼æµ®éææï¼å¾®å¦æ·±åº¦
- ç»çæ: 模ç³èæ¯ï¼éæåº¦ï¼å æ
å ³é®: éæ©æ¸ æ°çæ¦å¿µæ¹åå¹¶ç²¾åæ§è¡ã大èçæè´ä¸»ä¹åç²¾è´çæç®ä¸»ä¹é½ææââå ³é®å¨äºæå¾ï¼è䏿¯å¼ºåº¦ã
3. ææ¯éå¶ (Constraints)
- 使ç¨ä»ä¹æ¡æ¶ï¼ï¼React, Vue, åç HTML/CSSï¼
- æ§è½è¦æ±ï¼ï¼å¨ç»å¤æåº¦ï¼æä»¶å¤§å°ï¼
- å¯è®¿é®æ§è¦æ±ï¼ï¼ARIA æ ç¾ï¼é®ç导èªï¼è²å½©å¯¹æ¯åº¦ï¼
- æµè§å¨å ¼å®¹æ§ï¼
4. å·®å¼å (Differentiation)
- è®°å¿ç¹: æ¯ä»ä¹è®©å®ä»¤äººé¾å¿ï¼
- ç¬ç¹æ§: ç¨æ·ä¼è®°ä½åªä¸ä¸ªç»èï¼
- æå: åªéä¼è®©ç¨æ·ç¼åä¸äº®ï¼
å端ç¾å¦æå
1. æç (Typography)
åå: åä½éæ©æ¯è®¾è®¡ççµéã
Do:
- â éæ©ç¬ç¹ä¸æä¸ªæ§çåä½
- â æ é¢ä½¿ç¨å¼äººæ³¨ç®çåä½ï¼æ£æä½¿ç¨æè¯»åä½
- â å°è¯ææ³ä¸å°çåä½é 对
- â 使ç¨åä½åä½ï¼font-weight, font-styleï¼åé 屿¬¡
- â 精确æ§å¶åé´è·ï¼letter-spacingï¼åè¡é«ï¼line-heightï¼
Don’t:
- â 使ç¨éç¨åä½ï¼Arial, Helvetica, Inter, Roboto, ç³»ç»åä½
- â ææææ¬ä½¿ç¨ç¸åçåä½å大å°
- â 忽ç¥åä½å è½½æ§è½ï¼ä½¿ç¨ font-display: swapï¼
æ¨èå使¥æº:
- Google Fonts (éæ©å°ä¼ãç¬ç¹çåä½)
- èªå®ä¹åä½ï¼å¦æé¡¹ç®å 许ï¼
示ä¾åä½ç»å:
/* æç®ç¼è¾é£æ ¼ */
--font-heading: 'Playfair Display', serif;
--font-body: 'Source Sans Pro', sans-serif;
/* ç°ä»£ç§æé£æ ¼ */
--font-heading: 'Space Mono', monospace;
--font-body: 'DM Sans', sans-serif;
/* ä¼é
奢å飿 ¼ */
--font-heading: 'Cormorant Garamond', serif;
--font-body: 'Lato', sans-serif;
2. é¢è²ä¸ä¸»é¢ (Color & Theme)
åå: é¢è²å®ä¹æ 绪ååçã
Do:
- â ä½¿ç¨ CSS åéä¿æä¸è´æ§
- â 主è²è° + 鲿ç¹ç¼è²çç»å
- â èèè²å½©å¿çå¦ï¼èè²=ä¿¡ä»»ï¼çº¢è²=ç´§è¿«ï¼ç»¿è²=æåï¼
- â ä½¿ç¨æ¸åè¥é 深度ï¼ä½è¦æåå³ï¼
- â ä¿æè²å½©å¯¹æ¯åº¦ï¼WCAG AA æ åï¼è³å° 4.5:1ï¼
Don’t:
- â ä¿å¥é è²ï¼ç½è²èæ¯ + ç´«è²æ¸å
- â è¿å¤é¢è²ï¼3-5 个主è²å·²è¶³å¤ï¼
- â 忽ç¥å¯è®¿é®æ§
示ä¾ä¸»é¢:
:root {
/* æç®é»ç½ */
--color-primary: #000000;
--color-secondary: #ffffff;
--color-accent: #ff3366;
/* å¤å¤æªæ¥ */
--color-primary: #1a1a2e;
--color-secondary: #16213e;
--color-accent: #00fff5;
--color-highlight: #ff006e;
/* èªç¶ææº */
--color-primary: #2d6a4f;
--color-secondary: #52b788;
--color-accent: #ffc857;
}
3. 卿 (Animation & Motion)
åå: å¨ç»åºè¯¥å¢å¼ºä½éªï¼è䏿¯åæ£æ³¨æåã
Do:
- â ä¼å ä½¿ç¨ CSS å¨ç»ï¼æ§è½æ´å¥½ï¼
- â 设计页é¢å è½½å¨ç»ï¼é¦æ¬¡å°è±¡ï¼
- â
使ç¨
animation-delayå®ç°å ç´ é个æ¾ç¤º - â æ¬åç¶ææ·»å å¾®å¦è¿æ¸¡
- â æ»å¨è§¦åå¨ç»ï¼Intersection Observerï¼
- â å¯¹äº Reactï¼ä½¿ç¨ Framer Motion æ React Spring
Don’t:
- â è¿åº¦ä½¿ç¨å¨ç»ï¼æ¯ä¸ªå ç´ é½å¨å¨ï¼
- â å¨ç»æç»æ¶é´è¿é¿ï¼> 500ms ä¼è®©äººä¸èç¦ï¼
- â 忽ç¥
prefers-reduced-motionåªä½æ¥è¯¢
示ä¾å¨ç»:
/* 页é¢å è½½ - å
ç´ é个淡å
¥ */
.fade-in-up {
animation: fadeInUp 0.6s ease-out forwards;
opacity: 0;
}
.fade-in-up:nth-child(1) { animation-delay: 0.1s; }
.fade-in-up:nth-child(2) { animation-delay: 0.2s; }
.fade-in-up:nth-child(3) { animation-delay: 0.3s; }
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* æ¬åææ */
.card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.card:hover {
transform: translateY(-8px);
box-shadow: 0 20px 40px rgba(0,0,0,0.15);
}
4. ç©ºé´ææ (Spatial Composition)
åå: å¸å±åºè¯¥å¼å¯¼è§çº¿ï¼åé è§è§èå¥ã
Do:
- â å°è¯ä¸å¯¹ç§°å¸å±
- â 使ç¨éå å ç´ åé æ·±åº¦
- â 对è§çº¿æµç¨å¼å¯¼è§çº¿
- â æç ´ç½æ ¼çå ç´ ï¼ä½ææå¾ï¼
- â 宽æççç½æç²¾å¿æ§å¶çå¯åº¦
- â ä½¿ç¨ Grid å Flexbox åé 夿å¸å±
Don’t:
- â ææå ç´ å± ä¸å¯¹é½
- â åååå¸çç½æ ¼ï¼æ èï¼
- â 忽ç¥ååºå¼è®¾è®¡
示ä¾å¸å±æå·§:
/* ä¸å¯¹ç§°ç½æ ¼ */
.grid-asymmetric {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 40px;
}
/* éå ææ */
.overlap-container {
position: relative;
}
.overlap-item {
position: absolute;
z-index: 2;
transform: translate(-20%, -20%);
}
/* 对è§çº¿æµç¨ */
.diagonal-section {
transform: skewY(-3deg);
padding: 100px 0;
}
.diagonal-section > * {
transform: skewY(3deg);
}
5. èæ¯åè§è§ç»è (Background & Visual Details)
åå: èæ¯è¥é æ°å´å深度ã
Do:
- â æ¸åç½æ ¼
- â åªç¹çº¹ç
- â å ä½å¾æ¡
- â åå±éæåº¦
- â æå§æ§é´å½±
- â è£ é¥°æ§è¾¹æ¡
- â èªå®ä¹å æ ï¼å¦æéå飿 ¼ï¼
- â é¢ç²å å ææ
Don’t:
- â 纯è²èæ¯ï¼é¤éæç®é£æ ¼ï¼
- â ä½è´¨éæä¸ç¸å ³çåºåå¾ç
- â è¿åº¦ä½¿ç¨é´å½±ï¼box-shadow 污æï¼
示ä¾èæ¯ææ:
/* æ¸åç½æ ¼èæ¯ */
.gradient-grid {
background:
linear-gradient(90deg, rgba(255,255,255,0.05) 1px, transparent 1px),
linear-gradient(rgba(255,255,255,0.05) 1px, transparent 1px),
linear-gradient(135deg, #667eea 0%, #764ba2 100%);
background-size: 50px 50px, 50px 50px, 100% 100%;
}
/* åªç¹çº¹ç */
.noise-texture {
position: relative;
}
.noise-texture::before {
content: '';
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.05'/%3E%3C/svg%3E");
pointer-events: none;
}
/* ç»çæææ */
.glass-card {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}
é¿å éç¨ AI ç¾å¦
ç»å¯¹ç¦æ¢çå ç´ :
- â è¿åº¦ä½¿ç¨çåä½ï¼Inter, Roboto, Arial, ç³»ç»åä½
- â ä¿å¥é è²ï¼ç½è²èæ¯ + ç´«è²æ¸å
- â å¯é¢æµçå¸å±æ¨¡å¼ï¼å± ä¸å¡çç½æ ¼ï¼
- â 缺ä¹ç¹å®ä¸ä¸æç¹å¾çåç¯ä¸å¾è®¾è®¡
å¦ä½é¿å :
- â 为æ¯ä¸ªé¡¹ç®éæ©ä¸åçåä½
- â 卿µ è²/æ·±è²ä¸»é¢ä¹é´åå
- â å°è¯ä¸åçå¸å±ç»æ
- â æ·»å ç¬ç¹çåçå ç´ å个æ§
å®ç°å¤ææ§ä¸ç¾å¦å¹é
å ³é®åå: 代ç å¤æåº¦åºä¸è®¾è®¡æ¿æ¯ç¸å¹é ã
æç¹ä¸»ä¹è®¾è®¡ â 夿代ç
- 大éå¨ç»åè¿æ¸¡ææ
- å¤å±å å å ç´
- 夿ç交äºç¶æ
- 详ç»çè§è§ææï¼ç²åãæ¸åã纹çï¼
// 示ä¾ï¼å¤æçå¨ç»å¡ç
<motion.div
initial={{ opacity: 0, scale: 0.8, rotateX: -15 }}
animate={{ opacity: 1, scale: 1, rotateX: 0 }}
whileHover={{
scale: 1.05,
rotateY: 5,
boxShadow: "0 25px 50px rgba(0,0,0,0.2)"
}}
transition={{
type: "spring",
stiffness: 300,
damping: 20
}}
>
{/* 夿å
容 */}
</motion.div>
æç®ä¸»ä¹è®¾è®¡ â ç²¾å代ç
- å å¶çå¨ç»ï¼ä» å¨å ³é®æ¶å»ï¼
- 精确çé´è·åæç
- ç»å¾®çè¿æ¸¡ææ
- å ³æ³¨ç»èèéæ°é
/* 示ä¾ï¼ç²¾è´çæç®ä¸»ä¹ */
.minimal-card {
padding: 60px;
background: #ffffff;
border: 1px solid rgba(0,0,0,0.08);
transition: border-color 0.3s ease;
}
.minimal-card:hover {
border-color: rgba(0,0,0,0.2);
}
.minimal-card h2 {
font-family: 'Cormorant Garamond', serif;
font-size: 2.5rem;
font-weight: 300;
letter-spacing: -0.02em;
line-height: 1.2;
margin: 0 0 20px 0;
}
工使µç¨
第 1 æ¥ï¼çè§£éæ±
- é è¯»ç¨æ·è¯·æ±ï¼æåå ³é®ä¿¡æ¯
- ç¡®å®é¡¹ç®ç±»åï¼ç»ä»¶ã页é¢ã宿´åºç¨ï¼
- è¯å«ææ¯æ ï¼ReactãVueãåç HTML/CSSï¼
第 2 æ¥ï¼è®¾è®¡æè
- åç设计æç»´æµç¨ä¸ç 4 个é®é¢
- éæ©æç¡®çç¾å¦æ¹å
- å¨å¿ä¸å¯è§åæç»ææ
第 3 æ¥ï¼ææ¯å³ç
- éæ©æ¡æ¶åå·¥å ·
- å³å®å¨ç»åºï¼Framer MotionãCSSãReact Springï¼
- ç¡®å®å使¥æº
第 4 æ¥ï¼å®ç°
- ç¼åè¯ä¹å HTML ç»æ
- å®ç° CSS æ ·å¼ï¼ä½¿ç¨ CSS åéï¼
- æ·»å 交äºåå¨ç»
- ç¡®ä¿ååºå¼è®¾è®¡
第 5 æ¥ï¼ç²¾ç»å
- è°æ´é´è·åæç
- ä¼åå¨ç»æ¶é´
- æµè¯ä¸åå±å¹å°ºå¯¸
- ç¡®ä¿å¯è®¿é®æ§ï¼ARIAãé®ç导èªï¼
示ä¾åºæ¯
åºæ¯ 1: å建çé页
ç¨æ·è¯·æ±: “帮æå建ä¸ä¸ª SaaS 产åççé页”
设计æè:
- ç®çï¼å±ç¤ºäº§åä»·å¼ï¼å¸å¼ç¨æ·æ³¨å
- 飿 ¼ï¼ç°ä»£ç§æ + ç¼è¾é£æ ¼ï¼ä½¿ç¨ Space Grotesk åä½ï¼é»ç½ + èè²ç¹ç¼
- å¸å±ï¼ä¸å¯¹ç§°ï¼è±éåºåå æ® 70% å±å¹ï¼å¯¹è§çº¿æµç¨
- å·®å¼åï¼ç¬ç¹çåä½é 对ï¼å¤§èçæç屿¬¡
å®ç°éç¹:
- Hero section 使ç¨å¤§åå·æ é¢ï¼4-6remï¼
- æ»å¨è§¦åçæ·¡å ¥å¨ç»
- ç»çæ CTA æé®
- ååºå¼ç½æ ¼å±ç¤ºåè½
åºæ¯ 2: 设计仪表ç
ç¨æ·è¯·æ±: “å建ä¸ä¸ªæ°æ®åæä»ªè¡¨ç”
设计æè:
- ç®çï¼æ¸ æ°å±ç¤ºæ°æ®ï¼æ¯æå¿«éå³ç
- 飿 ¼ï¼å®ç¨ä¸»ä¹ + ç²¾è´ï¼ä½¿ç¨ IBM Plex Sansï¼æ·±è²ä¸»é¢
- å¸å±ï¼ç½æ ¼ç³»ç»ï¼å¡çå¼å¸å±ï¼æ°æ®å¯è§åä¼å
- å·®å¼åï¼å¾®å¦çå¨ç»è¿æ¸¡ï¼æ¬åæ¾ç¤ºè¯¦ç»ä¿¡æ¯
å®ç°éç¹:
- æ·±è²èæ¯åå°ç¼çç²å³
- å¡çä½¿ç¨æåé´å½±åè¾¹æ¡
- å¾è¡¨ä½¿ç¨é²æçç¹ç¼è²
- å è½½ç¶æä½¿ç¨éª¨æ¶å±
åºæ¯ 3: React ç»ä»¶åº
ç¨æ·è¯·æ±: “å建ä¸å¥èªå®ä¹æé®ç»ä»¶”
设计æè:
- ç®çï¼å¯å¤ç¨ãå¯å®å¶çæé®ç³»ç»
- 飿 ¼ï¼çµæ´»ï¼æ¯æå¤ç§åä½
- ææ¯ï¼ä½¿ç¨ styled-components æ CSS modules
- å·®å¼åï¼ç¬ç¹çæ¬åææåå è½½ç¶æ
å®ç°éç¹:
- 主æé®ãæ¬¡è¦æé®ãææ¬æé®åä½
- 大å°åä½ï¼small, medium, largeï¼
- å è½½åç¦ç¨ç¶æ
- å¹³æ»çè¿æ¸¡å¨ç»
代ç è´¨éæ å
å¿ é¡»éµå®:
- â
è¯ä¹å HTMLï¼
<header>,<nav>,<main>,<article>ï¼ - â BEM å½åè§èæ CSS Modules
- â CSS åéç¨äºé¢è²åé´è·
- â ç§»å¨ä¼å çååºå¼è®¾è®¡
- â å¯è®¿é®æ§ï¼ARIA æ ç¾ï¼é®ç导èªï¼
- â æ§è½ä¼åï¼å¾çæå è½½ï¼åä½ä¼åï¼
ç¦æ¢:
- â å èæ ·å¼ï¼é¤é卿å¼ï¼
- â ä¸å¿
è¦ç
!important - â 硬ç¼ç çé¢è²å¼ï¼ä½¿ç¨ CSS åéï¼
- â æªä¼åçå¾ç
- â æ æä¹çç±»åï¼
.box1,.container2ï¼
ææ¯æ åè
æ¨èå·¥å ·:
- åä½: Google Fonts, Font Squirrel
- é¢è²: Coolors.co, Adobe Color
- å¨ç»: Framer Motion (React), Anime.js, GreenSock
- 徿 : Heroicons, Lucide, Phosphor Icons
- CSS æ¡æ¶: Tailwind CSS (èªå®ä¹é ç½®), styled-components
é¿å :
- â Bootstrap, Material-UIï¼å®¹æäº§çéç¨å¤è§ï¼
- â é»è®¤ Tailwind é ç½®ï¼éè¦èªå®ä¹ï¼
æ£æ¥æ¸ å
å¨å®æå®ç°åï¼éªè¯ä»¥ä¸å 容:
- éæ©äºç¬ç¹çåä½ç»åï¼ä¸æ¯ Inter/Roboto/Arialï¼
- é¢è²æ¹æ¡ææç¡®çç¾å¦æ¹å
- è³å°æ 1-2 å¤ç²¾å¿è®¾è®¡çå¨ç»
- å¸å±ä¸æ¯ç®åçå± ä¸ç½æ ¼
- æç¬ç¹çè§è§ç»èï¼èæ¯ã纹çãé´å½±ï¼
- ååºå¼è®¾è®¡å¨ææºåæ¡é¢é½å¥½ç
- å¯è®¿é®æ§æ åè¾¾æ ï¼å¯¹æ¯åº¦ãARIAï¼
- ä»£ç æ¸ æ°ãå¯ç»´æ¤
- æ§è½è¯å¥½ï¼æ å¡é¡¿å¨ç»ï¼å¿«éå è½½ï¼
æåæé
åé æ§è¯ éæ¯å ³é®ãä¸è¦é®ç¨æ·”ä½ æ³è¦ä»ä¹é¢è²ï¼”ï¼èæ¯åºäºä¸ä¸æååºå¤§èç设计å³çãæ¯ä¸ªè®¾è®¡é½åºè¯¥æ¯ç¬ä¸æ äºçãå¨ä¸å项ç®ä¹é´ååæµ è²/æ·±è²ä¸»é¢ãåä½åç¾å¦é£æ ¼ã
追æ±åè¶ï¼èéå®ç¾ãä¸ä¸ªæå¼ºç个æ§ç设计èè¿ä¸ä¸ª”å®å ¨”ä½å¹³åº¸çè®¾è®¡ãæ¢äºå°è¯ï¼ä¸ºç¨æ·å¸¦æ¥æåã