• صفحه اصلی
  • مهارت‌ها
  • پروژه‌ها
  • بلاگ
  • مشاوره
  • تماس با من
مشاورهرزومه
Naser Rasouli

نویسنده

Naser Rasouli

توسعه‌دهنده فرانت‌اند؛ اینجا تجربه‌ها و یادداشت‌های واقعی‌ام از پروژه‌ها را می‌نویسم.

GitHubLinkedIn

آخرین نوشته‌ها

بررسی نحوه به‌روزرسانی state در React
2026-02-11•1 دقیقه مطالعه

بررسی نحوه به‌روزرسانی state در React

setState بلافاصله state را عوض نمی‌کند؛ همین باعث می‌شود console.log مقدار قبلی را لاگ کند. این راهنما توضیح می‌دهد چرا و چطور مقدار جدید را درست دریافت کنیم.

تابع Cleanup در useEffect: از باگ‌های پنهان تا الگوهای درست
2026-02-04•1 دقیقه مطالعه

تابع Cleanup در useEffect: از باگ‌های پنهان تا الگوهای درست

راهنمای عملی نوشتن cleanup در useEffect تا از memory leak، لیسنرهای تکراری و setState روی کامپوننت unmounted جلوگیری کنید.

مسیر مصاحبه فرانت‌اند: مراحل، انتظارها و آماده‌سازی
2026-01-17•1 دقیقه مطالعه

مسیر مصاحبه فرانت‌اند: مراحل، انتظارها و آماده‌سازی

مصاحبه فرانت‌اند فقط چند سؤال دربارهٔ HTML و JavaScript نیست؛ مسیری است برای سنجش فهم وب، حل مسئله و توان همکاری. این راهنما مراحل رایج و انتظارات هر بخش را خلاصه می‌کند.

متدولوژی BEM در CSS: نام‌گذاری استاندارد برای کدهای تمیز

متدولوژی BEM در CSS: نام‌گذاری استاندارد برای کدهای تمیز

2026-02-18
cssbemnamingfrontendarchitecture

چرا BEM؟

با بزرگ‌تر شدن پروژه‌های فرانت‌اند، مدیریت کدهای CSS به چالشی جدی تبدیل می‌شود؛ کلاس‌های نامناسب به تداخل استایل‌ها، سختی دیباگ و سرعت پایین تغییرات منجر می‌شود. BEM یک الگوی نام‌گذاری استاندارد است که با ساختار شفاف، نگهداری و توسعه را ساده می‌کند.

BEM چیست؟

BEM مخفف Block، Element، Modifier است و هر کلاس را بر اساس نقش و حالتش نام‌گذاری می‌کند.

اجزای اصلی

  • Block (بلاک): یک بخش مستقل رابط کاربری که معنا و استایل مخصوص به خودش را دارد (card، navbar).
  • Element (المنت): جزئی از بلاک که بدون آن معنا ندارد و با __ جدا می‌شود (card__title).
  • Modifier (مودیفایر): حالت یا نسخه متفاوت بلاک/المنت که با -- مشخص می‌شود (card--featured، card__button--active).

فرمت نام‌گذاری

block
block__element
block--modifier
block__element--modifier

مثال عملی

<div class="card card--featured">
  <h2 class="card__title">عنوان کارت</h2>
  <p class="card__description">توضیحات کوتاه</p>
  <button class="card__button card__button--active">مشاهده</button>
</div>
.card {
  display: grid;
  gap: 12px;
  padding: 16px;
  border: 1px solid #e0e0e0;
  border-radius: 10px;
}

.card--featured {
  border-color: #2563eb;
  box-shadow: 0 8px 24px rgba(37, 99, 235, 0.12);
}

.card__title {
  font-size: 1.1rem;
  margin: 0;
}

.card__description {
  margin: 0;
  color: #4b5563;
}

.card__button {
  justify-self: start;
  padding: 10px 14px;
  border-radius: 8px;
  background: #111827;
  color: #fff;
}

.card__button--active {
  background: #2563eb;
}

مزایای استفاده از BEM

  • خوانایی بالا و فهم سریع نقش هر کلاس
  • جلوگیری از تداخل استایل‌ها و وابستگی ناخواسته
  • مقیاس‌پذیری بهتر در پروژه‌های بزرگ و تیمی
  • دیباگ و ردیابی آسان‌تر رفتار اجزا
  • امکان تکرارپذیری و ساخت الگوهای UI پایدار

معایب و محدودیت‌ها

  • طولانی‌تر شدن نام کلاس‌ها
  • ظاهر شلوغ‌تر HTML در پروژه‌های کوچک
  • نیاز به پایبندی تیمی؛ در غیر این صورت مزایا از بین می‌رود

چه زمانی از BEM استفاده کنیم؟

  • پروژه‌های متوسط و بزرگ با اجزای مشترک زیاد
  • تیم‌های چندنفره یا کدبیس‌هایی که در آینده رشد می‌کنند
  • معماری کامپوننت‌محور (React، Vue، Angular یا Design System)
  • زمانی که نگهداری و توسعه بلندمدت اهمیت دارد

نکات استفاده سریع

  • نام بلاک را معنادار و مستقل انتخاب کنید، نه وابسته به مکان (card بهتر از sidebar-card).
  • از تو در تویی عمیق در CSS پرهیز کنید؛ نام‌گذاری BEM نیاز به nesting زیاد ندارد.
  • مودیفایرها باید فقط حالت را عوض کنند، نه ساختار کلی بلاک را.

جمع‌بندی

BEM با نام‌گذاری شفاف و پیش‌بینی‌پذیر، جلوی تداخل استایل‌ها را می‌گیرد و نگهداری CSS را ساده می‌کند. اگر به کد تمیز و توسعه‌پذیر در پروژه‌های تیمی یا بلندمدت نیاز دارید، BEM یک الگوی مطمئن و امتحان‌شده است.