ITCSS 开发规范文档

1. 目录结构

src/styles 目录下,按照 ITCSS 的层次结构组织样式文件:

src/
├── styles/
│   ├── _settings.scss       // 全局变量和常量
│   ├── _tools.scss          // Mixins 和函数
│   ├── _generic.scss        // 全局重置和标准化样式
│   ├── _elements.scss       // 基础 HTML 元素样式
│   ├── _objects.scss        // 布局对象和通用组件样式
│   ├── _components.scss     // 具体组件样式
│   ├── _trumps.scss         // 高特异性样式
│   └── main.scss            // 汇总所有样式
├── components/
│   ├── Button/
│   │   ├── Button.jsx        // Button 组件逻辑
│   │   ├── Button.module.scss // Button 组件模块样式
│   ├── Card/
│   │   ├── Card.jsx          // Card 组件逻辑
│   │   ├── Card.module.scss // Card 组件模块样式
├── App.jsx                   // 主应用组件
└── index.jsx                 // 应用入口文件

2. 文件内容和规范

2.1 Settings

定义全局变量、常量和基础设置。

// src/styles/_settings.scss
$primary-color: #007bff;
$font-family: Arial, sans-serif;
$base-font-size: 16px;
$border-radius: 4px;

2.2 Tools

定义 SCSS mixins 和函数。

// src/styles/_tools.scss
@mixin border-radius($radius) {
  border-radius: $radius;
}
 
@function rem($px) {
  @return $px / $base-font-size * 1rem;
}

2.3 Generic

全局重置和标准化样式。

// src/styles/_generic.scss
html, body {
  margin: 0;
  padding: 0;
  font-family: $font-family;
  font-size: $base-font-size;
}
 
* {
  box-sizing: border-box;
}

2.4 Elements

基础 HTML 元素样式。

// src/styles/_elements.scss
h1 {
  font-size: rem(32px);
  margin-bottom: rem(16px);
}
 
p {
  margin-bottom: rem(16px);
}

2.5 Objects

布局对象和通用样式。

// src/styles/_objects.scss
.container {
  width: 80%;
  margin: 0 auto;
  padding: rem(20px);
}
 
.media {
  display: flex;
  align-items: center;
}
 
.media__image {
  margin-right: rem(16px);
}

2.6 Components

具体组件的样式。

// src/styles/_components.scss
.button {
  background-color: $primary-color;
  color: #fff;
  padding: rem(10px) rem(20px);
  border: none;
  border-radius: $border-radius;
  cursor: pointer;
 
  &:hover {
    background-color: darken($primary-color, 10%);
  }
}
 
.card {
  border: 1px solid #ddd;
  border-radius: $border-radius;
  padding: rem(16px);
  background-color: #fff;
}

2.7 Trumps

高特异性样式,例如布局调整和隐藏元素。

// src/styles/_trumps.scss
.hidden {
  display: none !important;
}
 
.clearfix::after {
  content: "";
  display: table;
  clear: both;
}

2.8 Main

汇总所有 ITCSS 层次样式。

// src/styles/main.scss
@import './settings';
@import './tools';
@import './generic';
@import './elements';
@import './objects';
@import './components';
@import './trumps';

3. 组件样式

  • 每个组件应有独立的模块化样式文件。
  • 使用 *.module.scss 文件来实现 CSS Modules,以避免样式冲突。

Button 组件示例:

// src/components/Button/Button.module.scss
@import '../../styles/_components.scss';
 
.button {
  @extend .button;
}
// src/components/Button/Button.jsx
import React from 'react';
import styles from './Button.module.scss';
 
const Button = ({ children }) => (
  <button className={styles.button}>{children}</button>
);
 
export default Button;

Card 组件示例:

// src/components/Card/Card.module.scss
@import '../../styles/_components.scss';
 
.card {
  @extend .card;
}
// src/components/Card/Card.jsx
import React from 'react';
import styles from './Card.module.scss';
 
const Card = ({ children }) => (
  <div className={styles.card}>{children}</div>
);
 
export default Card;

4. 开发和维护实践

  • 样式文件命名:遵循一致的命名规范,确保文件名和类名具有描述性。
  • 注释:在样式文件中添加必要的注释,解释复杂的样式规则和使用场景。
  • 定期审查:定期审查和优化样式代码,确保符合 ITCSS 层次结构,避免样式冲突和冗余。
  • 工具使用:使用 stylelint 等工具来保持样式一致性和质量。
  • 文档化:为样式文件和组件样式添加文档,以便团队成员理解和使用。

5. 示例

应用入口文件:

// src/index.jsx
import './styles/main.scss'; // 导入所有 ITCSS 层次样式
 
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
 
ReactDOM.render(<App />, document.getElementById('root'));

通过遵循以上规范,你可以在 Vite + React 项目中有效实施 ITCSS,确保样式的高效管理和维护。