
وقتی یک صفحه ی وب رو باز میکنیم، همه ی مراحل عکس بالا طی می شن تا صفحه لود شده و به ما نمایش داده بشه. اگه به شکل دقت کنین ابتدا سند HTML لود و بعد پارس شده و همزمان با پارس شدن سند HTML، سند (های) CSS هم لود و پارس میشن. در این پست در باره ی این مرحله بحث می کنیم.
پارس شدن سند(های) CSS شامل دو مرحله هست:
1-resolve conflicting CSS declaration
2-proccess final CSS value
در این پست درباره ی مرحله ی 1 یه سری نکات رو توضیح میدم.
قبل از این که مرحله یک رو شرح بدم باید دو تا نکته رو یادآوری کنم:
1- قانون نوشتاری CSS :

2- سه نوع سورس CSS داریم:
خب، با یک مثال بریم سراغ بحث اصلی:
برای Property رنگ تگ h1 چندین Declaration به صورت زیر نوشته شده ولی در نهایت h1 قرمز شده.
ولی سوال اینجاست که مرورگر با چه قانونی این Declaration ها رو اولویتبندی میکنه تا در نهایت رنگ تگ قرمز بشه؟

1- در مرحله اول، Declaration ها به ترتیب زیر وزندهی میشن:
1- User !important
2- Author !important
3- Author Declarations
4- User Declarations
5- Default Browser Declarations
پس Declarationهایی که important دارن بیشترین وزن رو هم دارن.بعد از این دو مورد Declarationهایی که به وسیله دولوپر(ها)، CSS های ایجاد شده به وسیله ی کاربر و کد های CSS موجود در سورس پیشفرض مرورگر هم به ترتیب دارای بیشترین وزن هستن.
اما اگه وزن دو Declaration باهم برابر باشه، یعنی به طور مثال هر دو Declaration در سورسی که دولوپرها نوشتن باشه مرورگر وارد مرحله دوم میشه.
2- در مرحله دوم Declaration ها به ترتیب زیر اولویتبندی میشن:
1-Inline Style
2- IDs
3- Classes, Pseudo-classes
4- Elements, Pseudo-elements
اعمال استایل به تگ باتوجه به اولویتبندی بالا و فرمول زیر هست:
(Inline Style, IDs, Classes Pseudo-classes attributes, Elements, Pseudo-elements)
به عنوان مثال به Selector زیر دقت کنین:
div p.title:hover #id .post .item:after
Inline Style : 0
ID : 1
Classes, Pseudo-classes, attributes : 4
Elements, Pseudo-elements : 3
پس امتیاز این Selector به صورت زیر هست:
(0 ,1 ,4 ,3)
و هر Selector که امتیازش بیشتر باشه از اولویت بیشتری هم برخوردار هست.
الان می تونیم امتیاز Selector هایی که در مثال بالا آوردم رو محاسبه کنیم و بفهمیم اولویت با کدوم هست:
h1{}
Inline Style : 0
ID : 0
Classes, Pseudo-classes, attributes : 0
Elements, Pseudo-elements : 1
(0, 0, 0, 1)
.container .h1{}
Inline Style : 0
ID : 0
Classes, Pseudo-classes, attributes : 1
Elements, Pseudo-elements : 1
(0, 0, 1, 1)
.container #header .h1{}
Inline Style : 0
ID : 1
Classes, Pseudo-classes, attributes : 1
Elements, Pseudo-elements : 1
(0, 1, 1, 1)
پس به همن دلیل رنگ تگ h1 قرمز شده.
3- در مرحله سوم و پایانی اگر اولویت Declaration ها هم برابر باشند، اولویت با آخرین Declaration هست.
با توجه به گفته های بالا باید به چند نکته توجه بشه: