| name | h5-style-guide |
| description | H5 移动端项目样式编写规范指南。适用于:(1) 编写新组件样式,(2) 修改或重构已有组件样式,(3) Code Review 检查样式代码是否符合规范,(4) 解答样式写法相关问题。核心约定:camelCase 命名,rem 适配(750px 设计稿基准),多种样式方案混合使用。触发词包括:写样式、CSS规范、SCSS规范、样式检查、样式规范、rem适配、H5适配、组件样式。 |
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 提供的布局组件:
import { Flex, Space } from 'antd'
<Flex align="center" justify="space-between" gap={16}>
<span>左侧</span>
<span>右侧</span>
</Flex>
<Row gutter={[16, 16]}>
<Col span={12}>...</Col>
<Col span={12}>...</Col>
</Row>
<div className="flex items-center justify-between">...</div>
其他样式 → Tailwind CSS
布局以外的样式(颜色、字体、圆角、阴影、间距微调等)优先用 Tailwind:
<div className="rounded-xl bg-white text-sm text-gray-600 shadow-sm px-4 py-3">
内容
</div>
<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:
import styles from './Card.module.less'
<div className={styles.card}>...</div>
.card {
position: relative;
&::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 1px;
transform: scaleY(0.5);
background: #eee;
}
}
内联 style → 仅限动态值
<div style={{ width: `${progress}%`, color: themeColor }}>...</div>
<div style={{ fontSize: '14px', color: '#333' }}>...</div>
单位使用规则
- rem:布局、尺寸相关的值(宽高、间距、字体大小)
- px:
1px 边框线、box-shadow、不需要随屏幕缩放的装饰值
- %:父容器百分比布局
- vw / vh:全屏容器、视口比例场景
- postcss-pxtorem 会自动将代码中的
px 转为 rem,直接按设计稿数值写即可
.card {
width: 686px;
padding: 24px 32px;
border: 1px solid #eee;
box-shadow: 0 4px 16px rgba(0,0,0,0.08);
}
.card {
width: 343px;
}
命名规范(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 检查项
样式方案选用:
代码质量: