Mojtaba Pourkhanlar
About meProjectsBlog

  • 👤About me
  • 🧰Projects
  • ✍️Blog

CSS Architecture

  • طراحی یک ساختار منطقی، قابل نگهداری و مقیاس‌پذیر برای CSS
    طوری که:

  • استایل‌ها قاطی پاتی نشن

  • با بزرگ شدن پروژه، اعصابت داغون نشه

  • هر کامپوننت مسئول کار خودش باشه


چرا CSS بدون معماری خطرناکه؟

اگه CSS معماری نداشته باشه، اینا رو تجربه می‌کنی:

  • تغییر یه margin میشه یه باگ جدید
  • پروژه پر میشه از !important ها (جهنم CSS)
  • ترس از تغییر یه کلاس ساده
  • باگ‌هایی که فقط تو prod ظاهر میشن
  • ریفکتور میشه ترسناک‌تر از Deploy جمعه

اهداف CSS Architecture

یک معماری خوب باید:

Scalable

  • با رشد پروژه، CSS تبدیل به هیولا نشه

Maintainable

  • بتونی بعد از ۶ ماه برگردی و هنوز بفهمی چی به چیه

Predictable

  • بدونی اضافه کردن یک کلاس چه تأثیری داره

Reusable

  • کامپوننت‌ها قابل استفاده مجدد باشن، نه One-Time Only

معماری‌های معروف CSS

بریم سراغ معروف‌ترین الگوها:

1. BEM (Block Element Modifier)

.block {
}
.block__element {
}
.block--modifier {
}

مزایا

  • بسیار واضح و خوانا
  • بدون تداخل استایل
  • عالی برای تیم‌های بزرگ

معایب

  • اسم کلاس‌ها طولانی میشه

2. OOCSS (Object Oriented CSS)

جدا کردن:

  • ساختار (Structure)
  • ظاهر (Skin)
<div class="card bg-white shadow"></div>
.card {
  padding: 16px;
  border-radius: 8px;
}

.bg-white {
  background: white;
}

.shadow {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

مزایا

  • خب Reusability بالا
  • و CSS کمتر

معایب

  • اما HTML شلوغ میشه

3. SMACSS

دسته‌بندی استایل‌ها:

  • Base
  • Layout
  • Module
  • State
  • Theme
/* Base */
body {
  font-family: sans-serif;
}

/* Layout */
.l-header {
  display: flex;
}

/* Module */
.card {
  border: 1px solid #eee;
}

/* State */
.is-active {
  color: red;
}

مزایا

  • ساختار ذهنی قوی
  • مناسب پروژه‌های بزرگ

4. Atomic / Utility-First CSS

  • سلام Tailwind
<button class="px-4 py-2 bg-blue-500 text-white rounded">Click me</button>

مزایا

  • سرعت توسعه بالا

  • بدون تداخل

  • بدون CSS

معایب

  • سند HTML خیلی شلوغ

  • سخت برای تازه‌کارها


کدوم معماری؟ کِی؟

سناریو پیشنهاد
Landing Page ساده Utility / Atomic
پروژه تیمی بزرگ BEM یا SMACSS
React / Next.js CSS Modules + BEM or Tailwind
Design System OOCSS + Tokens
MVP سریع Tailwind

CSS Modules (React/Next.js)

ساختار:

  • Button.module.css
.button {
  background: blue;
}
  • نمایش کد
import styles from "./Button.module.css";

<button className={styles.button}>Click</button>;
  • خب Scope محلی ایجاد می‌کنه
  • تشابه نام های یکسان کلاس ها رو از بین میبره (Naming Conflict)
  • با SSR و RSC سازگاره

ترکیب خفن:

CSS Modules + BEM

.card {
}
.card__title {
}
.card--featured {
}
<div className={`${styles.card} ${styles["card--featured"]
}`}>
  <h2 className={styles.card__title}>Title</h2>
</div>

نتیجه؟

معماری CSS فقط اسم کلاس نیست، شامل:

  • Design Tokens (colors, spacing, font)
  • CSS Variables
  • Component-driven styling
  • Accessibility-aware styles
:root {
  --color-primary: #2563eb;
  --radius-md: 8px;
}

.button {
  background: var(--color-primary);
  border-radius: var(--radius-md);
}

جمع‌بندی

خب CSS Architecture یعنی:

  • باگ کمتر
  • ریفکتور بدون ترس
  • تیم خوشحال‌تر

هیچ معماری «بهترین مطلق» نیست.

  • بهترین معماری، اونیه که:

  • تیم بفهمتش

  • پروژه تحملش کنه

  • آینده رو خراب نکنه