هیچ محصولی در سبد خرید نیست.

زیبل

انتخاب‌های پیشرفته: استایل‌دهی به ‘بچه‌ها و خواهرها’!

انتخاب‌های پیشرفته: استایل‌دهی به ‘بچه‌ها و خواهرها’!

انتخاب‌های پیشرفته: استایل‌دهی به ‘بچه‌ها و خواهرها’!

انتخاب‌گرهای ترکیبی: وقتی CSS روابط رو می‌فهمه! 🤝

سلام به همه همراهان عزیز! تا اینجا انتخاب‌گرهای ساده رو یاد گرفتیم. اما دنیای HTML پر از روابط بین عناصره: یه عنصر می‌تونه والد یه عنصر دیگه باشه، یا اینکه چند تا عنصر خواهر و برادر باشن. CSS هم این روابط رو درک می‌کنه و با استفاده از انتخاب‌گرهای ترکیبی (Combinators)، به ما اجازه می‌ده استایل‌های خیلی دقیق‌تری رو اعمال کنیم. امروز می‌خوایم سه نوع مهم از این انتخاب‌گرها رو یاد بگیریم: Descendant، Child و Sibling!

1. انتخاب‌گر نواده (Descendant Selector): هر جایی زیرمجموعه باشه! 🌳

این انتخاب‌گر به شما اجازه می‌ده عنصری رو استایل بدین که در هر جای ساختار HTML، زیرمجموعه (نواده) یه عنصر دیگه باشه. برای این کار از یه فاصله (space) بین دو انتخاب‌گر استفاده می‌کنیم.

مثال: فرض کنیم می‌خوایم تمام پاراگراف‌هایی که داخل یه `div` خاص با کلاس `content` هستن رو استایل بدیم، حتی اگه داخل یه تگ دیگه مثل `span` یا `p` دیگه باشن.

فایل HTML:


<div class="content">
  <p>این پاراگراف باید آبی بشه.</p>
  <article>
    <p>این پاراگراف هم باید آبی بشه.</p>
  </article>
</div>
<p>این پاراگراف نباید آبی بشه.</p>

فایل CSS:


.content p { /* Selector: .content p (یعنی هر p که در هر سطحی زیر .content باشه) */
  color: blue;
}

انتخاب‌گر Descendant خیلی کاربردیه، چون به ما قدرت می‌ده روی بخش‌های خاصی از صفحه تمرکز کنیم بدون اینکه نگران لایه‌های میانی باشیم.

2. انتخاب‌گر فرزند مستقیم (Child Selector): فقط بچه‌های مستقیم! 👶

این انتخاب‌گر کمی دقیق‌تر از Descendant هست. انتخاب‌گر فرزند مستقیم (با علامت `>`) فقط عناصری رو انتخاب می‌کنه که مستقیماً فرزند (بچه اول) عنصر والد باشن. یعنی لایه‌های میانی دیگه رو در نظر نمی‌گیره.

مثال: فرض کنید می‌خوایم فقط پاراگراف‌هایی که مستقیماً داخل `div` با کلاس `content` هستن رو استایل بدیم، نه پاراگراف‌هایی که توی یه تگ دیگه (مثل `article`) داخل اون `div` باشن.

فایل HTML (همون قبلی):


<div class="content">
  <p>این پاراگراف باید قرمز بشه.</p> <!-- مستقیماً فرزند content هست -->
  <article>
    <p>این پاراگراف نباید قرمز بشه.</p> <!-- فرزند article هست، نه content -->
  </article>
</div>
<p>این پاراگراف هم نباید قرمز بشه.</p>

فایل CSS:


.content > p { /* Selector: .content > p (یعنی هر p که مستقیماً فرزند .content باشه) */
  color: red;
}

انتخاب‌گر Child خیلی مفیده وقتی می‌خواین دقیقاً مشخص کنین کدوم عناصر باید استایل خاصی بگیرن و از تأثیرگذاری روی عناصر لایه‌های عمیق‌تر جلوگیری کنین.

3. انتخاب‌گرهای هم‌خانواده (Sibling Selectors): روابط خواهر و برادری! 👯

این انتخاب‌گرها به ما اجازه می‌دن عناصری رو استایل بدیم که هم‌والد باشن (یعنی خواهر و برادر باشن). دو نوع اصلی داریم:

الف) انتخاب‌گر برادر عمومی (General Sibling Selector – `~`): عنصری رو انتخاب می‌کنه که بعد از یه عنصر خاص میاد و هم‌والد اون عنصر باشه.

ب) انتخاب‌گر برادر مجاور (Adjacent Sibling Selector – `+`): عنصری رو انتخاب می‌کنه که بلافاصله بعد از یه عنصر خاص میاد و هم‌والد اون عنصر باشه.

مثال: فرض کنیم می‌خوایم به پاراگراف‌هایی که بعد از یه تیتر `

` میان، یه حاشیه بالایی بدیم.

فایل HTML:


<h2>بخش اول</h2>
<p>این پاراگراف بعد از h2 اوله.</p>
<p>این پاراگراف هم بعد از h2 اوله.</p>

<h2>بخش دوم</h2>
<div>
  <p>این پاراگراف داخل div هست و نباید استایل بگیره.</p>
</div>
<p>این پاراگراف هم بعد از h2 دومه.</p>

فایل CSS:


/* استفاده از General Sibling Selector (~) */
h2 ~ p { /* یعنی هر p که بعد از h2 اومده و هم‌والد هستن */
  margin-top: 15px;
  border-top: 1px dashed #ccc;
  padding-top: 10px;
}

/* استفاده از Adjacent Sibling Selector (+) */
h2 + p { /* یعنی اولین p که بلافاصله بعد از h2 اومده */
  font-weight: bold; /* فقط اولین پاراگراف بعد از h2، پررنگ می‌شه */
}

انتخاب‌گرهای Sibling فوق‌العاده مفید هستن، مخصوصاً وقتی بخواید یه استایل رو به عنصر بعدی یه عنصر خاص اعمال کنین، بدون اینکه لازم باشه از جاوااسکریپت استفاده کنین.

با این انتخاب‌گرهای ترکیبی، شما می‌تونین ساختار پیچیده HTML رو درک کنین و استایل‌های خیلی دقیقی رو اعمال کنین. این‌ها ابزارهای قدرتمندی هستن که هر طراح وب باید بلد باشه! موفق باشین! 🌟

مقالات مرتبط

کدهای تمیز: با متغیرها، CSS را هوشمند کنید! 💡

متغیرهای CSS (Custom Properties): کد تمیزتر، مدیریت راحت‌تر! 🎨 سلام به همگی! توی پروژه‌های CSS، خیلی وقتا پیش میاد که یه رنگ، یه فونت، یا یه فاصله رو بارها و بارها توی جاهای مختلف استفاده می‌کنیم. مثلاً رنگ اصلی سایت‌مون...

ساخت انیمیشن‌های حرفه‌ای با @keyframes (گام به گام)

CSS Animations: خلق انیمیشن‌های پیچیده با @keyframes! 🎬 سلام به همگی! تا الان با Transitionها آشنا شدیم که تغییرات بین دو حالت رو نرم می‌کنن. اما اگه بخوایم انیمیشن‌های پیچیده‌تر، چند مرحله‌ای، یا حتی انیمیشن‌هایی که مدام تکرار می‌شن رو...

دگرگونی سایت با CSS: چرخش، تغییر اندازه و جابجایی

CSS Transforms: جابجایی، چرخش، تغییر اندازه و کج کردن عناصر! 🤸‍♀️ سلام دوستان! تا اینجا با انیمیشن‌های نرم و پیوسته (Transitions) آشنا شدیم. اما گاهی وقت‌ها نیاز داریم که عناصر HTML رو جابجا کنیم، بچرخونیم، اندازه‌شون رو عوض کنیم یا...

انتقال‌های نرم: عناصر خود را متحرک کنید!

CSS Transitions: جادوی حرکت نرم و روان! ✨ سلام به همه! تا حالا شده یه سایت رو ببینید که با هاور کردن روی یه دکمه، رنگش نرم و قشنگ عوض می‌شه؟ یا با تغییر اندازه یه عنصر، انیمیشن ظریفی رو...

آخرین مقالات

کدهای تمیز: با متغیرها، CSS را هوشمند کنید! 💡

متغیرهای CSS (Custom Properties): کد تمیزتر، مدیریت راحت‌تر! 🎨 سلام به همگی! توی پروژه‌های CSS، خیلی وقتا پیش میاد که یه رنگ، یه فونت، یا یه فاصله رو بارها و بارها توی جاهای مختلف استفاده می‌کنیم. مثلاً رنگ اصلی سایت‌مون...

ساخت انیمیشن‌های حرفه‌ای با @keyframes (گام به گام)

CSS Animations: خلق انیمیشن‌های پیچیده با @keyframes! 🎬 سلام به همگی! تا الان با Transitionها آشنا شدیم که تغییرات بین دو حالت رو نرم می‌کنن. اما اگه بخوایم انیمیشن‌های پیچیده‌تر، چند مرحله‌ای، یا حتی انیمیشن‌هایی که مدام تکرار می‌شن رو...

دگرگونی سایت با CSS: چرخش، تغییر اندازه و جابجایی

CSS Transforms: جابجایی، چرخش، تغییر اندازه و کج کردن عناصر! 🤸‍♀️ سلام دوستان! تا اینجا با انیمیشن‌های نرم و پیوسته (Transitions) آشنا شدیم. اما گاهی وقت‌ها نیاز داریم که عناصر HTML رو جابجا کنیم، بچرخونیم، اندازه‌شون رو عوض کنیم یا...

انتقال‌های نرم: عناصر خود را متحرک کنید!

CSS Transitions: جادوی حرکت نرم و روان! ✨ سلام به همه! تا حالا شده یه سایت رو ببینید که با هاور کردن روی یه دکمه، رنگش نرم و قشنگ عوض می‌شه؟ یا با تغییر اندازه یه عنصر، انیمیشن ظریفی رو...