Ներկայացրեք, թե ինչպես է բրաուզերը որոշում, թե որ տարրերին պետք է կիրառել CSS ոճերը։
sobes.tech AI
Պատասխան AI-ից
Բրաուզերը որոշում է, թե որ տարրերին պետք է կիրառել CSS-շերտերը՝ օգտագործելով որոնման և համապատասխանեցման մեխանիզմներ CSS սելեկտորների վրա հիմնված:
Ընթացքը տեղի է ունենում հետևյալ կերպ՝
- CSS-ի վերլուծություն: Բրաուզերը վերլուծում է CSS ֆայլերը և
<style>բլոկները HTML-ում՝ ստեղծելով ներքին ոճերի ներկայացում: - HTML-ի վերլուծություն: Բրաուզերը վերլուծում է HTML-ը՝ ստեղծելով DOM (Document Object Model) ծառ:
- Համապատասխանեցում (Matching): Ամեն մի հանգույց DOM-ում բրաուզերը փորձում է համապատասխանել այն CSS կանոններին։ Սա կատարվում է CSS կանոնների սելեկտորների ստուգմամբ։ Սովորաբար, աշխատում է առավել հատուկ սելեկտորից դեպի պակաս հատուկ (աջից դեպի ձախ): Օրինակ,
div article pսելեկտորի համար, նախ գտնում էp, ապա ստուգում՝ արդյոք այն ժառանգ էarticle-ից, որը իր հերթին ժառանգ էdiv-ից: - Կիրառում (Applying): Եթե DOM հանգույցը համապատասխանում է մեկ կամ մի քանի CSS կանոններին, բրաուզերը կիրառում է համապատասխան ոճերը այդ հանգույցին։ Եթե մի քանի կանոններ են կիրառելի, բրաուզերը որոշում է վերջնական ոճերի հավաքածուն՝ օգտագործելով հատուկության կանոնները, հայտարարությունների կարգը և ժառանգությունը:
Հատուկություն (Specificity):
Հատուկությունը՝ դա ալգորիթմ է, որը բրաուզերը օգտագործում է CSS սելեկտորների քաշը հաշվարկելու համար։ Ավելի հատուկ սելեկտորը ունի բարձր առաջնահերթություն։ Հատուկությունը հաշվարկվում է ID-ների, դասերի/պսևդո-դասերի/ատրիբուտների և տարրերի/պսևդո-տարրերի քանակով։
// Հաշվարկ հատուկության՝ (a, b, c)
// a = ID-ների քանակը
// b = դասերի, պսևդո-դասերի,ատրիբուտների քանակը
// c = տարրերի, պսևդո-տարրերի քանակը
// Inline ոճերը ունեն բարձրագույն առաջնահերթություն (1, 0, 0, 0)
// `*` սելեկտորը ունի հատուկություն (0, 0, 0)
Օրինակ՝ հատուկության հաշվարկ:
p: (0, 0, 1).class: (0, 1, 0)#id: (1, 0, 0)div p: (0, 0, 2)div .class: (0, 1, 1)
Հայտարարությունների կարգը:
Եթե երկու կանոն ունեն նույն հատուկությունը, ապա կիրառվում է վերջինը CSS կոդում:
Ներառումը (Inheritance):
Որոշ CSS հատկություններ ժառանգվում են ծնողական տարրերից դեպի երեխաներ (օրինակ՝ color, font-family)։ Եթե հատկության համար բացահայտ արժեք չի սահմանված, բրաուզերը որոնում է ժառանգված արժեքը վերևից դեպի ներքև DOM ծառում:
Այսպիսով, բրաուզերը որոշում է տարրերի ոճերը՝ համապատասխանեցնելով սելեկտորներին, լուծելով հակասությունները հատուկության և հայտարարությունների կարգի միջոցով, ինչպես նաև հաշվի առնելով ժառանգությունը։