h5-style-guide
npx skills add https://github.com/byte-n/skills-test --skill h5-style-guide
Agent 安装分布
Skill 文档
H5 é¡¹ç®æ ·å¼ç¼åè§è
æ ¸å¿çº¦å®éæ¥
| é¡¹ç® | è§è |
|---|---|
| å½åæ¹å¼ | camelCaseï¼å°é©¼å³°ï¼ |
| 设计稿åºå | 750px |
| éé åä½ | remï¼postcss-pxtorem èªå¨è½¬æ¢ï¼ |
| åºå®å°ºå¯¸åä½ | pxï¼è¾¹æ¡çº¿ãé´å½±çè£ é¥°æ§å±æ§ï¼ |
æ ·å¼æ¹æ¡ä¼å 级ï¼å¿ é¡»ææ¤é¡ºåºéç¨ï¼ï¼
| ä¼å 级 | æ¹æ¡ | éç¨åºæ¯ |
|---|---|---|
| 1st | Ant Design å¸å±ç»ä»¶ï¼FlexãRow/ColãGridãSpaceï¼ | ææå¸å±æååºæ¯ |
| 2nd | Tailwind CSS | å¸å±ä»¥å¤çæ ·å¼éæ± |
| 3rd | Less Module | Tailwind æ æ³è¡¨è¾¾çå¤ææ ·å¼ |
| 4th | style å
è |
ä» é卿å¼ï¼å¦ JS 计ç®ç宽é«ãé¢è²ï¼ |
æ ·å¼æ¹æ¡éç¨è§å
å¸å± â Ant Design ç»ä»¶ä¼å
塿¯æ¶åæåãé´è·ãæ æ ¼çå¸å±ï¼ä¼å ç¨ Ant Design æä¾çå¸å±ç»ä»¶ï¼
// â
ç¨ Ant Design Flex åæ°´å¹³æå
import { Flex, Space } from 'antd'
<Flex align="center" justify="space-between" gap={16}>
<span>左侧</span>
<span>å³ä¾§</span>
</Flex>
// â
ç¨ Row/Col åæ
æ ¼å¸å±
<Row gutter={[16, 16]}>
<Col span={12}>...</Col>
<Col span={12}>...</Col>
</Row>
// â ä¸è¦ä¸ºäºå¸å±æå Tailwind flex æ Less
<div className="flex items-center justify-between">...</div>
å ¶ä»æ ·å¼ â Tailwind CSS
å¸å±ä»¥å¤çæ ·å¼ï¼é¢è²ãåä½ãåè§ãé´å½±ãé´è·å¾®è°çï¼ä¼å ç¨ Tailwindï¼
// â
ç¨ Tailwind å¤çè§è§æ ·å¼
<div className="rounded-xl bg-white text-sm text-gray-600 shadow-sm px-4 py-3">
å
容
</div>
// â
Tailwind å¤çç¶æ
<button className={`rounded-full px-6 py-2 ${isActive ? 'bg-primary text-white' : 'bg-gray-100 text-gray-500'}`}>
æé®
</button>
å¤ææ ·å¼ â Less Module
Tailwind æ æ³è¡¨è¾¾æ¶ï¼ä¼ªå ç´ ã夿å¨ç»ãåªä½æ¥è¯¢ç»åã1px 线çï¼ç¨ Less Moduleï¼
// â
å¤æä¼ªå
ç´ ç¨ Less Module
import styles from './Card.module.less'
<div className={styles.card}>...</div>
// Card.module.less
.card {
position: relative;
&::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 1px;
transform: scaleY(0.5);
background: #eee;
}
}
å
è style â ä»
é卿å¼
// â
ä»
ç¨äº JS 计ç®åºç卿å¼
<div style={{ width: `${progress}%`, color: themeColor }}>...</div>
// â ä¸è¦ç¨å
è style åéææ ·å¼
<div style={{ fontSize: '14px', color: '#333' }}>...</div>
åä½ä½¿ç¨è§å
- remï¼å¸å±ã尺寸ç¸å ³çå¼ï¼å®½é«ãé´è·ãåä½å¤§å°ï¼
- pxï¼
1pxè¾¹æ¡çº¿ãbox-shadowãä¸éè¦éå±å¹ç¼©æ¾çè£ é¥°å¼ - %ï¼ç¶å®¹å¨ç¾åæ¯å¸å±
- vw / vhï¼å ¨å±å®¹å¨ãè§å£æ¯ä¾åºæ¯
- postcss-pxtorem ä¼èªå¨å°ä»£ç ä¸ç
px转为remï¼ç´æ¥æè®¾è®¡ç¨¿æ°å¼åå³å¯
// â
æ£ç¡®
.card {
width: 686px; // postcss 转 rem
padding: 24px 32px; // postcss 转 rem
border: 1px solid #eee; // ä¿æ px
box-shadow: 0 4px 16px rgba(0,0,0,0.08); // ä¿æ px
}
// â é误
.card {
width: 343px; /* px-ignore */ // ä¸è¦ç¨ ignore 黿¢è½¬æ¢æ¥è¾¾å°åºå®å°ºå¯¸
}
å½åè§èï¼camelCaseï¼
- ç±»å使ç¨å°é©¼å³°ï¼
.cardItemã.headerTitleã.btnPrimary - ç¶æç±»å
isåç¼ï¼.isActiveã.isDisabledã.isLoading - 修饰类å
hasåç¼ï¼.hasIconã.hasBadge - JS é©åç±»å
jsåç¼ï¼ä¸åæ ·å¼ï¼ï¼.jsToggle - ç¦æ¢ä½¿ç¨æ¼é³ãæ æä¹ç¼©å
// â
æ£ç¡®
.productCard { }
.productCard .coverImg { }
.productCard.isSelected { }
// â é误
.product_card { } // ä¸å线
.ProductCard { } // 大åå¼å¤´
.pic { } // æ æä¹ç¼©å
.tupian { } // æ¼é³
详ç»å½å示ä¾è§ references/naming.md
屿§ä¹¦å顺åº
æåç»é¡ºåºä¹¦åï¼ç»é´ç©ºè¡åéï¼
- å®ä½ â
position,top/right/bottom/left,z-index - çæ¨¡å â
display,flex-*,width,height,padding,margin - è§è§ â
background,border,border-radius,box-shadow,opacity - æå â
font-size,font-weight,color,line-height,text-align - å
¶ä» â
cursor,overflow,transition,transform,animation
详ç»è§åå示ä¾è§ references/properties-order.md
rem éé æ¹æ¡
设计稿 750pxï¼rootValue = 37.5ï¼å³ 1rem = 37.5pxï¼ã
ç´æ¥æè®¾è®¡ç¨¿æ 注ç px æ°å¼åï¼postcss èªå¨æ¢ç®ï¼
- 设计稿
750pxâ 代ç å750pxâ 转为20rem - 设计稿
32pxé´è· â 代ç å32pxâ 转为0.853rem
详ç»é ç½®è§ references/adaptation.md
å¸¸ç¨æ ·å¼æ¨¡å¼
åè¡çç¥ãå¤è¡çç¥ãflex å¸å±ã1px ç»çº¿ãå®å ¨åºéé çè§ references/common-patterns.md
Code Review æ£æ¥é¡¹
æ ·å¼æ¹æ¡éç¨ï¼
- å¸å±æåæ¯å¦ä¼å ä½¿ç¨ Ant Design Flex / Row / Col / Space
- éå¸å±æ ·å¼æ¯å¦ä¼å ä½¿ç¨ Tailwindï¼èé Less Module
- Less Module ä» ç¨äº Tailwind æ æ³è¡¨è¾¾çå¤æåºæ¯
- å
è
styleä» ç¨äºå¨æå¼ï¼æ éæå èæ ·å¼
代ç è´¨éï¼
- ç±»åä½¿ç¨ camelCaseï¼æ æ¼é³/æ æä¹ç¼©å
- å¸å±å°ºå¯¸ä½¿ç¨ pxï¼ç± postcss 转 remï¼ï¼è£ 饰æ§å±æ§ä¿æ px
- 屿§æåç»é¡ºåºä¹¦å
- åµå¥ä¸è¶ è¿ 3 å±ï¼Lessï¼
- æ
!importantï¼é¤éè¦çç¬¬ä¸æ¹åºï¼ - é¢è²ãé´è·ä½¿ç¨åéï¼æ éæ³æ°å