(the "c" in css)


#1

THE CASCADE

.red {
  color: red;
}
.blue {
  color: blue;
}

ما اللون الذي ستظهر به هذه العناصر :face_with_monocle: ؟؟؟

<div class="red blue">
<div class="blue red">

الاجابه الصحيحه هي ان العنصران سيظران باللون الازرق ولكن كيف ولماذا ؟

تابع معي …

من المعروف لدينا ان احرف “CSS” هي اختصار ل “Cascading Style Sheets” والترجمه الحرفيه لها
"ورقه الانماط (التنسيقات) المتتاليه " :joy:

اذا ما هو التتالي ؟

Cascade

process of combining different stylesheets and resolving conflicts between different css rules declarations,when more than one applies to a certain element.

بكلمات بسيطه هو مسؤول عن تطبيق تنسيق على عنصر من خلال حل التعارضات عندما يكون هناك اكثر من قاعده مطبقه على هذا العنصر . وما اعنيه بكلمه قاعده
هنا هو قواعد الاستايل المعروفه مثلا

font-size: 16;
color: #00F;
width: 500px;

طريقه عمل التتالي في ال CSS:

يقوم التتالي بالنظر الى ثلاثه أمور لتحديد القاعده التي ستتطبق حسب اهميتها :

  1. IMPORTANCE
  2. SPECIFICITY
  3. SOURCE ORDER

1. IMPORTANCE

يقوم ال التتالي باعطاء القواعد المتعارضه أهميات مختلفه حسب المكان الذي تم الاعلان عنها فيه من الاهم الى الاقل اهميه :

1.User !important declarations :

وهي القواعد التي تأتي من المستخدم مثلا ان قام بتغير خط المتصفح او ادخل تنسيقات عبر ال dev tools

2.Author !important declarations:

وهي القواعد التي تحتوي على الكلمه المحجوزه !important التي يقوم بكتابتها المبرمج او كاتب الشفره المصدريه

3.Author declaration :

وهي القواعد العاديه التي لا تحتوي على الكلمه المحجوزه !important

4.User declaration

5.Default browser declaration :

وهي القواعد الاقل اهميه حيث هي قواعد المتصفح الافتراضيه مثل اللون الازرق للروابط والهوامش في ال h1 وغيرها

يقوم التتالي بالنظر الى القواعد وتصنيفها حسب الاهميه والقواعد معimportant ! تفوز دائما من ناحيه والاولويه
لناخذ مثال:

.btn {
background-color: blue !important;
}
 
#nav .list-item .btn {
background-color: green;
}

في هذه القواعد المتعارضه ستم تطبيق القاعده الاكثر اهميه وهي التي تحتوي على الكلمه !important

كلتا القاعدتين عباره عن Author declaration

2.specificity

ولكن في اغلب الحالات لا نستعمل ! important وتكون القواعد بنفس الاهميه … هذه الحاله ما يفعله التتالي هو ان يقوم بالمقارنه بحسب ال specificity حيث هي دقه تحديد العنصر

حيث classes اكثر تخصيصا من ال element selectors وال ID’s اكثر تخصيصا من الclasses وال inline styles اكثر تحديدا من ال ID

inline styles

ID

classes , pseudo-classes , attribute

tag selectors

يقوم التتالي بحساب ال specificity ويطبق القواعد الاعلى تخصيصا اذا لنرى كيف يتم حساب ال specificity

.btn {
background-color: blue;
}
#nav .list-item .btn{
background-color: blue;
}
a{
# THE CASCADE 

```css
.red {
  color: red;
}
.blue {
  color: blue;
}

ما اللون الذي ستظهر به هذه العناصر :face_with_monocle: ؟؟؟

<div class="red blue">
<div class="blue red">

الاجابه الصحيحه هي ان العنصران سيظران باللون الازرق ولكن كيف ولماذا ؟

تابع معي …

من المعروف لدينا ان احرف “CSS” هي اختصار ل “Cascading Style Sheets” والترجمه الحرفيه لها
"ورقه الانماط (التنسيقات) المتتاليه " :joy:

اذا ما هو التتالي ؟

Cascade

process of combining different stylesheets and resolving conflicts between different css rules declarations,when more than one applies to a certain element.

بكلمات بسيطه هو مسؤول عن تطبيق تنسيق على عنصر من خلال حل التعارضات عندما يكون هناك اكثر من قاعده مطبقه على هذا العنصر . وما اعنيه بكلمه قاعده
هنا هو قواعد الاستايل المعروفه مثلا

font-size: 16;
color: #00F;
width: 500px;

طريقه عمل التتالي في ال CSS:

يقوم التتالي بالنظر الى ثلاثه أمور لتحديد القاعده التي ستتطبق حسب اهميتها :

  1. IMPORTANCE
  2. SPECIFICITY
  3. SOURCE ORDER

1. IMPORTANCE

يقوم ال التتالي باعطاء القواعد المتعارضه أهميات مختلفه حسب المكان الذي تم الاعلان عنها فيه من الاهم الى الاقل اهميه :

1.User !important declarations :

وهي القواعد التي تأتي من المستخدم مثلا ان قام بتغير خط المتصفح او ادخل تنسيقات عبر ال dev tools

2.Author !important declarations:

وهي القواعد التي تحتوي على الكلمه المحجوزه !important التي يقوم بكتابتها المبرمج او كاتب الشفره المصدريه

3.Author declaration :

وهي القواعد العاديه التي لا تحتوي على الكلمه المحجوزه !important

4.User declaration

5.Default browser declaration :

وهي القواعد الاقل اهميه حيث هي قواعد المتصفح الافتراضيه مثل اللون الازرق للروابط والهوامش في ال h1 وغيرها

يقوم التتالي بالنظر الى القواعد وتصنيفها حسب الاهميه والقواعد معimportant ! تفوز دائما من ناحيه والاولويه
لناخذ مثال:

.btn {
background-color: blue !important;
}
 
#nav .list-item .btn {
background-color: green;
}

في هذه القواعد المتعارضه ستم تطبيق القاعده الاكثر اهميه وهي التي تحتوي على الكلمه !important

كلتا القاعدتين عباره عن Author declaration

2.specificity

ولكن في اغلب الحالات لا نستعمل ! important وتكون القواعد بنفس الاهميه … هذه الحاله ما يفعله التتالي هو ان يقوم بالمقارنه بحسب ال specificity حيث هي دقه تحديد العنصر

حيث classes اكثر تخصيصا من ال element selectors وال ID’s اكثر تخصيصا من الclasses وال inline styles اكثر تحديدا من ال ID

inline styles

ID

classes , pseudo-classes , attribute

tag selectors

يقوم التتالي بحساب ال specificity ويطبق القواعد الاعلى تخصيصا اذا لنرى كيف يتم حساب ال specificity

.btn {                                            //A
background-color: blue;
}
ul#nav li.list-item .btn{                             //B
background-color: red;
}
a{                                                //c
background-color: green;
}
#nav a.btn:hover {                                //D
background-color: gray;
}

جميع هذه القواعد عباره عن Author declaration هذا يعني انها تتساوى في الاهميه اذا لنحسب ال specificity الخاصه بها ، في الواقع ال specificity هي عباره عن عدد من الارقام :

image
(0, 0, 0, 0)

حيث كل خانه تمثل عدد مرات ظهور ال selector
القاعده A// من المثال ال specificity فيها تساوي (0,0,1,0) | كلاس واحد فقط وهو btn.
القاعده B// من المثال ال specificity فيها تساوي (0,1,2,2) | كلاسين وid , و اثنين element selector
القاعده C// من المثال ال specificity فيها تساوي (0,0,0,1) | فقط element selector
القاعده D// من المثال ال specificity فيها تساوي (0,1,2,1) | _id و class ومعه pseudo class و element selector

اذا في رأيك اي قاعده ستفوز؟ نعم القاعده B// لان لديها اعلى specificity :sunglasses:


resources: css_specificity


source order

في اخر الامر اذا تساوت دقه تحديد العنصر للقواعد وايضا كانت بنفس الاهميه يلجاء التتالي الى تطبيق اخر قاعده في ترتيب القواعد

a{
color:red;
}

a{
color:green;
}

a{
color:blue;
]

سيكون اللون ازرق هنا وهكذا .


اتمنى ان تكون استفدت من هذا الطرح المتواضع وشكرا :heart:


the c in css
specificity
cascade W3C
cascade


#2

مشكور جدا على هذه المعلومات القيمة ، جزاك الله خيرا :smiley:


#3

مقالة رائعة أمجد، تسلم على مجهودك


#4

وجزاك اختي


#5

مشكوووور استاذي


#6

:heart_eyes: مقال في القمة أمجد… ابداع حقيقة
شكرا و بالتوفيق صديقي