آموزش مفهوم Specificity در CSS

Ratings
(0)

 

اگر دو یا چند دستور CSS داشته باشیم که به یک عنصر یکسان اعمال شده باشند، سلکتوری که اولویت یا specificity بیشتری داشته باشد، برنده خواهد شد و استایل آن به عنصر HTML مذکور اعمال می شود. specificity مانند یک سلسله مراتب(hierarchy) است که مشخص می کند کدام استایل در نهایت به یک عنصر اعمال می شود. به مثال های زیر توجه کنید:

مثال شماره 1

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

 <html>
<head>
  <style>
    p {color: red;}
  </style>
</head>
<body>

<p>سلام به شما</p>

</body>
</html> 
امتحان کنید

 حالا نگاهی به مثال 2 بیاندازید:

مثال شماره 2

در اینجا، ما یک سلکتور کلاس ( به نام "test") ایجاد کرده ایم و برای این کلاس، یک رنگ سبز(green ) تعیین کرده ایم. نتیجه: متن ما به رنگ سبز خواهد شد(با اینکه یک رنگ قرمز یا red را برای سلکتور عنصر p مشخص کرده ایم). علتش این است که سلکتور کلاس اولویت بیشتری(higher priority) دارد:

 <html>
<head>
  <style>
    .test {color: green;}
    p {color: red;}
  </style>
</head>
<body>

<p class="test">سلام بر شما</p>

</body>
</html> 
امتحان کنید

اکنون به مثال 3 توجه کنید:

مثال شماره 3

در اینجا، یک سلکتور id (به نام demo) اضافه کرده ایم. نتیجه: متن ما به رنگ آبی blue درمی آید؛ زیرا سلکتور id اولویت بیشتری دارد:

 <html>
<head>
  <style>
    #demo {color: blue;}
    .test {color: green;}
    p {color: red;}
  </style>
</head>
<body>

<p id="demo" class="test">سلام بر شما</p>

</body>
</html> 
امتحان کنید

 حالا به مثال 4 توجه کنید:

مثال شماره 4

در اینجا یک استایل درون خطی(inline) برای عنصر p اضافه کرده ایم. نتیجه: متن ما به رنگ صورتی(pink) در می آید، زیرا استایل درون خطی از بالاترین اولویت برخوردار است:

 <html>
<head>
  <style>
    #demo {color: blue;}
    .test {color: green;}
    p {color: red;}
  </style>
</head>
<body>

<p id="demo" class="test" style="color: pink;">سلام بر شما</p>

</body>
</html> 
امتحان کنید

سلسله مراتب specificity در CSS 

 

# اولویت مثال توضیح
1 استایل درون خطی(Inline) <h1 style="color: pink;">

 بیشترین اولویت را دارد و مستقیماً با استفاده از خصوصیت style اعمال می شود.

2 سلکتور id #navbar

 از دومین اولویت برخوردار است و با استفاده از یک خصوصیت id یکتا در یک عنصر شناسایی می شود.

3 کلاس ها و شبه کلاس ها(pseudo-classes) .test, :hover

 از سومین اولویت برخوردار است و با استفاده از نام کلاس ها، هدف قرار می گیرد.

4 خصوصیت ها(Attributes) [type="text"]

 اولویت کم؛ به خصوصیت ها اعمال می شود.

5 عناصر و شبه عناصر(pseudo-elements) h1, ::before, ::after

 کمترین اولویت؛ به عناصر HTML و شبه عناصر اعمال می شود.

 


مثال های بیشتر در مورد قواعد Specificity

اولویت برابر(Equal specificity): آخرین دستور اعمال می شود. اگر یک دستور یکسان، دو بار در یک برگه های استایل اکسترنال نوشته شده باشد، آخرین دستور برنده می شود و اعمال می شود:

مثال شماره 5

h1 {background-color: yellow;}
h1 {background-color: red;}
امتحان کنید

سلکتورهای id از اولویت بیشتری نسبت به سلکتورهای خصوصیت(attribute) برخوردار هستند. به سه خط کد زیر توجه کنید:

مثال شماره 6

div#myDiv {background-color: green;}
#myDiv {background-color: yellow;}
div[id=myDiv] {background-color: blue;}
امتحان کنید

 در مثال بالا، اولین دستور از اولویت بیشتری نسبت به دو دستور دیگر برخوردار است و بنابراین به کدها اعمال می شود.


سلکتورهای متنی(Contextual selectors) نسبت به سلکتور های عنصر تکی، خاص تر هستند. برگه های استایل اضافه شده(با استفاده از تگ <style>)، به عنصری که می خواهیم استایل دهی کنیم، نزدیکتر هستند(یعنی اولویت بیشتری دارند). مانند زیر:

/*ازفایل سی اس اس اکسترنال:*/
#content h1 {background-color: red;}

/*در فایل اچ تی ام ال:*/
<style>
#content h1 {background-color: yellow;}
</style> 

در کد بالا، آخرین دستور اعمال می شود.


یک سلکتور کلاس، هر تعداد سلکتور عنصر را کنار می زند. مثلا یک سلکتور class مانند intro. بر سلکتورهای h1 و p و  div و غیره غلبه می کند.

مثال شماره 7

.intro {background-color: yellow;}
h1 {background-color: red;}
امتحان کنید

سلکتور جهانی(*) و مقادیر به ارث برده شده

سلکتور جهانی(*) و مقادیر به ارث برده شده(inherited values) تاثیری بر اولویت یا specificity ندارند:

مثال شماره 8

* {background-color: yellow;}
h1 {background-color: red;}
امتحان کنید

 

  • بازدید: 146

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال