棉麻质感- react

请输入...



很好,这个技术栈非常适合做“棉麻质感”,因为 CSS Module 天然有“克制、局部、不过度侵入”的特性。下面我会给你一套可以直接拷进项目用的规范,并且完全贴合 React + CSS Modules 的工程实践。





一、项目级结构建议(React + CSS Modules)


src/

├─ styles/

│  ├─ tokens.css        # 设计变量(颜色 / 字体 / 间距)

│  ├─ texture.module.css # 纹理 & 背景

│  └─ base.css          # 全局基础样式

├─ components/

│  ├─ Card/

│  │  ├─ Card.jsx

│  │  └─ Card.module.css

│  ├─ Button/

│  │  ├─ Button.jsx

│  │  └─ Button.module.css

│  └─ Input/

└─ App.jsx





二、全局设计 Token(styles/tokens.css)



只在入口文件引入一次

:root {

 /* Background */

 --bg-main: #f7f5f1;

 --bg-sub: #efece6;

 --bg-deep: #e4dfd6;


 /* Text */

 --text-primary: #2f2e2b;

 --text-secondary: #6b6862;

 --text-muted: #9b978f;


 /* Accent */

 --accent-main: #a38c6d;

 --accent-hover: #8f7a5e;


 /* Radius */

 --radius-sm: 4px;

 --radius-md: 6px;


 /* Spacing */

 --space-sm: 8px;

 --space-md: 16px;

 --space-lg: 24px;


 /* Font */

 --font-main: -apple-system, BlinkMacSystemFont,

   "PingFang SC", "Noto Sans SC", sans-serif;

}

在 main.jsx / index.jsx:

import "./styles/tokens.css";

import "./styles/base.css";





三、全局基础样式(styles/base.css)


html, body {

 margin: 0;

 padding: 0;

 background-color: var(--bg-main);

 font-family: var(--font-main);

 color: var(--text-primary);

}


* {

 box-sizing: border-box;

}


p {

 line-height: 1.8;

}





四、棉麻纹理模块(styles/texture.module.css)


.linen {

 background:

   linear-gradient(

     0deg,

     rgba(255,255,255,0.02),

     rgba(0,0,0,0.02)

   ),

   var(--bg-main);

}

使用方式(React):

import texture from "@/styles/texture.module.css";


export function Page({ children }) {

 return (

   <div className={texture.linen}>

     {children}

   </div>

 );

}





五、核心组件示例




1️⃣ Card 组件




Card.jsx


import styles from "./Card.module.css";


export function Card({ children }) {

 return <div className={styles.card}>{children}</div>;

}


Card.module.css


.card {

 background-color: var(--bg-sub);

 border-radius: var(--radius-md);

 padding: var(--space-lg);

 box-shadow: 0 1px 3px rgba(0,0,0,0.04);

}





2️⃣ Button 组件




Button.jsx


import styles from "./Button.module.css";


export function Button({ children, ...props }) {

 return (

   <button className={styles.button} {...props}>

     {children}

   </button>

 );

}


Button.module.css


.button {

 background-color: var(--accent-main);

 color: #fff;

 border: none;

 border-radius: var(--radius-sm);

 padding: 8px 18px;

 font-size: 14px;

 cursor: pointer;

 transition: background-color 0.25s ease;

}


.button:hover {

 background-color: var(--accent-hover);

}





3️⃣ Input 组件


.input {

 background-color: var(--bg-main);

 border: 1px solid #d8d3c9;

 border-radius: var(--radius-sm);

 padding: 8px 10px;

 color: var(--text-primary);

}


.input:focus {

 outline: none;

 border-color: var(--accent-main);

}





六、页面级示例(React)


import { Card } from "@/components/Card/Card";

import { Button } from "@/components/Button/Button";


export default function Home() {

 return (

   <div style={{ padding: 40 }}>

     <Card>

       <h2>棉麻质感示例</h2>

       <p>

         这是一个偏自然、克制、非工业化的界面示例。

       </p>

       <Button>确认</Button>

     </Card>

   </div>

 );

}





七、和产品经理对齐用语(非常实用)



你可以这样总结给他听:


我这边会用低饱和暖色、轻微纹理、克制阴影和舒缓排版,整体避免科技感和强对比,页面会更像生活方式类产品,而不是工具型后台。


如果他点头,说明你们对“棉麻”已经对齐了。





八、进阶建议(开发者向)



  • 把 tokens.css 当作唯一允许调风格的入口
  • 禁止组件内写具体色值(Code Review 规则)
  • 后期可直接换一套 token 做主题切换





如果你愿意,下一步我可以:


  • 给你一份 Lint 级别的“禁止非 token 色值”约定
  • 或帮你 把这套规范映射成 Tailwind 配置
  • 或做一版 移动端专用的棉麻规范



你现在这个项目更偏 内容型 / 工具型 / 后台?我可以针对性再收紧一版。