۸- اِلمنت معنایی و سِلکتور ترکیبی

مقدمه

در این فصل می‌خواهیم در مورد سِمنتیک المنت – Semantic Element یعنی اِلمنت‌های معنایی و کامبینیتور سلکتور – Combinators Selector یعنی سِلکتورهای ترکیبی نکاتی را بیان کنیم.
این فصل مفهومی است و نیاز به مطالعه دقیق و کامل دارد.

اِلمنت معناییSemantic Element

در دنیای وب زمانی که می گوییم اِلمنت Semantic (سِمنتیک) یعنی اِلمنت‌هایی که فقط ظاهری نیستند بلکه معنی خاصی را نیز با خودشان دارند.
این معنادار بودن تگ‌‌ها از یک طرف برای مرورگرها (browsers) و موتورهای جستجو (search engine) و از طرف دیگر برای توسعه دهندگان (developers) منظور برنامه نویسان وب سایت‌ها بسیار کاربرد دارد؛ یعنی شما ?

اِلمنت‌های غیرمعنایی یا non-semantic تگ‌هایی ‌مثل <div> و <span>
می‌باشند که معنا یا اطلاعاتی را در مورد محتوای خود به ما نمی‌دهند!

اما اِلمنت‌های معنایی یا semantic مانند:<h1> . . .<h6>، هر کدام بیانگر میزان اهمیت یک تیتر در صفحه می‌باشند.
لیست‌های ترتیبی و غیرترتیبی (<ol>, <ul>) نیز از همین دسته اند.

html5 (جدیدترین ورژن زبان نشانه‌گذاری می باشد) تگ‌های معنایی جدیدی را معرفی کرد. مانند :
<form> ،<table>، <video>، <audio>و. . .

همچنین از چهار تگ‌ sectioning (قسمت ساز) معرفی شدند. مانند:
<section> ،<article>، <aside>، <nav>
که تحول خاصی را در نحوه‌ی دسته‌بندی قسمت‌های سایت بوجود آوردند؛
پیش از اینها تمامی قسمت‌های سایت با اِلمنت div دسته‌بندی می‌شدند.

طرح کلی HTML5 معنا-محور

HTML5 Semantic Elements

چند نمونه از اِلمنت‌‌های معنایی در html5 

  • <header>
  • <footer>
  • <aside>
  • <main>
  • <article>
  • <section>
  • <nav>
  • <figure>
  • <figcaption>

برای درک بهتر نکات بالا اینجا کلیک کنید؛به جهت تمرین و چگونگی طراحی مثال بالا حتماً source آن را بررسی کرده و سعی کنید خودتان مشابه چنین صفحه‌ای با استفاده از تگ‌های معنایی (semantic) و css طراحی کنید!

 


CSS Combinators Selector

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

سِلکتور در واقع الگویی از عناصر و دیگر شرایط است که به مرورگر اعلام می‌کند کدام اِلمنت html باید انتخاب شوند تا مقادیر مشخصه CSS روی آنها اِعمال شود.
مثلاً در اواخر فصل ششم سِلکتور اَسْتِریکس (Asterisk) که با نماد * نمایش داده می‌شود را بیان کرده بودیم.
آیا کاربرد آن را به خاطر دارید؟ می‌توانید برای یادآوری به آن مراجعه کرده و مطالعه کنید.

در این قسمت می‌خواهیم در مورد چند سِلکتور ترکیبی پر کاربرد در CSS گفتگو کنیم.

برای درک بهتر مثال‌های این مبحث پیشنهاد می‌کنم، با توجه به تصاویر زیر ابتدا فایل html آن را آماده کنید. یعنی خودتان دست به کار شوید و بنویسید? سپس css را با توجه به آن اِعمال کرده تا نتیجه خروجی را ببینید؛
حتماً برای فهم بهتر آن را پیش خودتان تحلیل کنید.

در ادامه متن X و Y را تگ در نظر بگیرید؛

سِلکتور لیست  –  List

  • X , Y : Any element matching X and/or Y.

اگر ویژگی‌‌های  اِلمنت‌ها در نوشتن CSS با هم برابر بودند می‌توانید به جهت خلاصه‌نویسی بعد از نوشتن نام تگ اول علامت comma (,) گذاشته سپس تگ‌ بعدی را بنویسید.

article, section {
  border-color: blue;
}


سِلکتور  دیسَندِنتDescendent

  • X  Y : Any Y that is a descendant of the X.

به معنای نسل است، این نوع سِلکتور با توجه به اِلمنت پَرِنت (parent) خود کار می‌کند.

برای انتخاب همه تگ‌های Y که از نسل X هستند می‌توانید از این سِلکتور استفاده کنید.
یعنی بعد از نوشتن تگ اول فاصله (space) گذاشته و سپس تگ دوم را بنویسید.

main header {
  background-color: blue;
}

سِلکتور  دایرِکت چایلد – Direct Child

  • X > Y : Any Y that is a direct child of the X.

به معنای بچه یا فرزند مستقیم است،‌ این نوع سِلکتور با توجه به اِلمنت پَرِنت (parent) خود کار می‌کند.

برای انتخاب بچه مستقیم یعنی تگ Y بچه مستقیم تگ X می‌باشد؛
با استفاده از علامت < که اصلاحاً به آن angle bracket یا greater than می‌گویند.

main > header {
  background-color: pink;
}


سِلکتور عمومی سیبلینگ  – General Sibling

  • X ~ Y : Any Y that is one of the next siblings of the X.

به معنی خواهر و برادر است.

برای انتخاب تمامی المنت‌های که بعد از یک المنت مشخص آمده باشند با والد یکسان از این سلکتور استفاده می‌شود.
مهم نیست که المنت انتخابی کجا باشد یا چندین بار آمده باشد فقط باید پرنت‌شان یکی باشد. مثال زیر ببینید:

با استفاده از علامت تیلدا (Tilde) ~ در انتخابگر General Sibling می‌توان تمام اِلمنت‌های بعدی را هدف قرار داد.

در مثال زیر سه بار از لیست یعنی تگ ul استفاده شده است؛
می‌خواهیم رنگ نوشته‌های لیست‌هایی که بعد از المنت ‌پاراگراف (p) آمده‌اند و پرنت آنها یکی هستند را تغییر دهیم.



html
<p>این یک پاراگراف است</p>
<div>
<h3>لیست اول</h3>
<ul>
  <li>شیر</li>
  <li>چای</li>
  <li>قهوه</li>
</ul>
</div>
<a href="https://www.alavischool.ir">سایت موسسه فرهنگی علوی</a>
<h3>لیست دوم</h3>
<ul>
  <li>شیر</li>
  <li>چای</li>
  <li>قهوه</li>
</ul>
<h3>لیست سوم</h3>
<ul>
  <li>شیر</li>
  <li>چای</li>
  <li>قهوه</li>
</ul>
css
p ~ ul {
  color: red;
}

خروجی:

نکته:
همانطور که می‌بینید تمام ul های بعد از p که والد یکسان دارند انتخاب شده‌اند؛ در این مثال پرنت‌ آنها body است.

سؤال: لیست  ” نوشیدنی‌های گرم ” چرا انتخاب نشده‌ است؟
پاسخ: زیرا این لیست فرزند مستقیم body نیست!
یعنی فرزند div است به همین دلیل چون پرنت یکسانی با دیگر لیست‌ها ندارد انتخاب نشده است.


 

سِلکتور  اِجیْ‌سِنت سیبلینگ – Adjacent  Sibling

  • X + Y : Any Y that is the next sibling of the X.

به معنای خواهر و برادر مجاور است.

زمانیکه می‌خواهید اِلمنت‌های مجاور را انتخاب کنید بسیار مناسب است، از این طریق می‌توانید اِلمنتی که دقیقاً پس از قبلی وجود دارد را با استفاده از علامت پلاس (pulse) + در انتخابگر Adjacent Sibling هدف قرار داد.

header + article {
  background-color: pink;
}


تمرین

این فایل را دانلود کرده و از حالت فشرده خارج کنید (Extract) سپس css را برای هر مرحله به گونه‌ای بنویسید تا نتیجه مطلوب بدست آید.

۱) رنگ پس‌زمینه تگ header‌ داخل section نارنجی شود.
۲) رنگ پس‌زمینه تگ header‌ داخل articleها فیروزه‌ای شود.
۳) رنگ پس‌زمینه همه تگ‌های header زرد شود.
۴) رنگ پس‌زمینه تگ article خاکستری شود.
۵) رنگ پس‌زمینه تگ header‌ داخل main صورتی شود.
۶) رنگ پس‌زمینه اولین تگ article داخل main آبی شود.