تصویر شاخص نوشته: سلکتور (Selector) در CSS چیست و چطور کار می‌کند؟

سلکتور (Selector) در CSS چیست و چطور کار می‌کند؟

۲۷ مرداد ۱۴۰۵ مبانی وب

صفحه‌ای که ساخته‌ای هزار عنصر دارد: تیترها، پاراگراف‌ها، دکمه‌ها، لینک‌ها. حالا می‌خواهی فقط یکی‌شان قرمز شود. چطور به CSS بگویی «همان یکی، نه بقیه»؟

جوابِ این سؤال دقیقاً همان چیزی است که اسمش سلکتور است. سلکتور یعنی «انتخاب‌گر»: نیمهٔ اولِ هر قاعدهٔ CSS، که مشخص می‌کند نیمهٔ دوم — استایل‌ها — روی سرِ چه کسی خراب شود.

button { color: red; }

این قاعده دو تکه دارد. تکهٔ داخل آکولاد می‌گوید «چه بشود» (رنگ قرمز). و button که پشتِ در ایستاده، می‌گوید «برای چه کسی» — برای هر دکمه‌ای که در صفحه هست. آن تکهٔ پشتِ در، سلکتور است.

سلکتور نشانیِ عنصر است، نه اسمِ استایل. CSS هیچ‌وقت نمی‌پرسد «چه چیزی را عوض کنم؟» و بعد «چطور؟» — هر دو را با هم در یک قاعده می‌گیرد: نشانی + تغییر.

سه سلکتور پایه که ۹۰٪ کارها را انجام می‌دهند

۱. سلکتور تگ — اسمِ خودِ عنصر را می‌نویسی و همهٔ هم‌نوع‌هایش انتخاب می‌شوند:

p { line-height: 1.8; }

یعنی «همهٔ پاراگراف‌ها». ساده و پرزور — گاهی زیادی پرزور، چون شاید نخواهی همهٔ پاراگراف‌ها تغییر کنند.

۲. سلکتور کلاس — با نقطه شروع می‌شود و فقط عنصرهایی را می‌گیرد که آن کلاس را دارند:

.warning { color: orange; }

این یعنی «هر عنصری که در HTML نوشته باشد class="warning"». کلاس مثل برچسبی است که خودت روی عنصرها می‌چسبانی: به هر تعداد عنصر که بخواهی، از هر نوعی که باشند. برای همین کلاس پرکاربردترین سلکتور دنیای واقعی است — تقریباً همهٔ CSSهای حرفه‌ای با کلاس کار می‌کنند.

۳. سلکتور شناسه (id) — با # شروع می‌شود و فقط یک عنصرِ مشخص را می‌گیرد:

#site-logo { width: 120px; }

شناسه در هر صفحه باید یکتا باشد — یعنی این سلکتور همیشه حداکثر یک نفر را صدا می‌زند.

می‌خواهی… سلکتور مثال
همهٔ عنصرهای یک نوع تگ h2
گروهی که خودت برچسب زده‌ای کلاس .card
دقیقاً یک عنصر یکتا شناسه #menu

ترکیب‌کردن: سلکتورها جمله می‌سازند

قدرت واقعی از کنار هم گذاشتنِ همین‌هاست. یک فاصلهٔ ساده بین دو سلکتور یعنی «داخلِ»:

.card p { margin: 0; }

بخوانش از راست به چپِ معنا: «پاراگراف‌هایی که داخلِ عنصری با کلاس card هستند.» پاراگراف‌های بیرونِ کارت‌ها دست‌نخورده می‌مانند. به این می‌گویند سلکتور نسلی (descendant) و پرکاربردترین ترکیب است.

چند ترکیب آشنای دیگر:

سلکتور یعنی
button.primary دکمه‌ای که کلاس primary هم دارد (بدون فاصله!)
.menu a لینک‌های داخل منو
h2, h3 همهٔ h2ها و همهٔ h3ها (ویرگول یعنی «و»)

آن نکتهٔ بدونِ فاصله را جدی بگیر: button.primary با button .primary دو دنیای متفاوت‌اند. اولی یک عنصر است که هر دو شرط را دارد؛ دومی عنصری با کلاس primary که داخلِ یک دکمه است.

حالت‌ها: وقتی «کی» هم مهم می‌شود

گاهی سؤال فقط «کدام عنصر» نیست، «در چه حالتی» هم هست. شبه‌کلاس‌ها همین را می‌گویند و با دونقطه می‌آیند:

a:hover { text-decoration: underline; }

یعنی «لینک، وقتی موس رویش است.» چند تای پرکاربرد: :hover (موس روی عنصر)، :focus (عنصرِ فعالِ صفحه‌کلید — برای دسترس‌پذیری حیاتی است)، :first-child (اولین فرزند والدش).

وقتی دو قاعده با هم دعوا می‌کنند

دیر یا زود دو سلکتور به یک عنصر می‌رسند و دو رنگِ متفاوت می‌خواهند. برنده را قدرتِ سلکتور تعیین می‌کند — id از کلاس قوی‌تر است و کلاس از تگ. این ماجرا آن‌قدر مهم است که یک نوشتهٔ کامل دارد: چرا این CSS اعمال نمی‌شود؟ cascade و specificity. اگر تازه با سلکتورها آشنا شده‌ای، آن نوشته قدمِ منطقیِ بعدی است.

کجا تمرینش کنی

سلکتور چیزی نیست که با خواندن در ذهن بنشیند — باید ببینی که با تغییر یک نقطه، کدام عنصرها رنگ عوض می‌کنند. در آزمایشگاه یادستان می‌توانی HTML و CSS را کنار هم بنویسی و نتیجه را همان لحظه ببینی، و اگر می‌خواهی از پایه و مرتب جلو بروی، دورهٔ تاروپود از اولین تگ HTML تا ساخت صفحهٔ کامل همین مسیر را قدم‌به‌قدم می‌رود — از جمله یک فصل کامل دربارهٔ همین سلکتورها.

جمع‌بندی در یک خط: CSS بدون سلکتور فقط فهرستی از آرزوهاست؛ سلکتور است که می‌گوید هر آرزو مالِ کیست.