كيف تعمل خوارزمية التتابع (Cascade) بشكل عام؟
نظريتُعد "خوارزمية التتابع" (Cascade Algorithm) العملية التي يستخدمها المتصفح لتحديد قواعد CSS الواجب تطبيقها عند وجود أنماط متعددة (multiple styles) تستهدف العنصر نفسه؛ فهي تضمن استخدام الأنماط الأكثر ملاءمةً استناداً إلى مجموعة من القواعد (rules) المحددة بوضوح.
تبدأ العملية بمبدأ الصلة أو الملاءمة؛ إذ يقوم المتصفح أولاً بتصفية جميع قواعد CSS لتحديد تلك التي تنطبق فعلياً على العنصر المعني. ويشمل ذلك مطابقة المُحدِّدات (selectors) ومراعاة استعلامات الوسائط (media queries) التي قد تكون سارية المفعول.
استعلام الوسائط (Media Query) هو تقنية في CSS تُستخدم لتطبيق أنماط بناءً على خصائص الجهاز أو منطقة العرض (viewport)، مثل العرض (width) أو الارتفاع (height) أو الاتجاه (orientation).
بعد ذلك، تأخذ الخوارزمية (algorithm) في الاعتبار المصدر والأهمية؛ إذ يمكن أن تأتي أنماط CSS من مصادر مختلفة: الأنماط الافتراضية للمتصفح (user-agent)، والأنماط التي يحددها المستخدم (user)، والأنماط التي يكتبها المؤلف (أنت).
بعد النظر في المصدر، تُقيِّم الخوارزمية (algorithm) أهمية كل قاعدة، مانحةً الأولوية (priority) للقواعد المحددة بالوسم !important ؛ إذ تتفوق هذه القواعد على غيرها بغض النظر عن مصدرها.
بعد التصفية (filtering) بناءً على المصدر والأهمية، ينظر الخوارزمي (algorithm) في مستوى التحديد (أو الخصوصية). وعندما تنطبق قاعدتان لهما المصدر ومستوى الأهمية ذاتهما، يتم تطبيق القاعدة الأكثر تحديداً.
تُعد "الخصوصية" (Specificity) مقياساً لمدى تحديد المُحدِّد (selector) لعنصر معين، حيث تحظى المُحدِّدات الأكثر تخصيصاً بالأولوية على تلك الأكثر عمومية.
وأخيراً، عند تساوي جميع العوامل الأخرى، يلعب ترتيب (order) الظهور دوراً في الأمر؛ فعندما تتساوى قاعدتان في درجة التحديد، يتم تطبيق القاعدة التي تظهر في النهاية ضمن ملف CSS.
ولهذا السبب، قد يؤثر أحياناً الترتيب الذي تكتب به أنماطك (your styles) على النتيجة.
لنلقِ نظرةً على مثال.
يحتوي ملف HTML على عنصر فقرة واحد، بينما توجد في ملف CSS قاعدتان تستهدف كل منهما عنصر الفقرة هذا.
index.html
<link rel="stylesheet" href="styles.css">
<p>فقرة نموذجية</p>
styles.css
p {
color: blue;
}
p {
color: green;
}
معاينة:
فقرة نموذجية
تُعيّن القاعدة الأولى لون نص جميع عناصر الفقرة باللون الأزرق، بينما تُعيّن القاعدة الثانية لون نص جميع عناصر الفقرة باللون الأخضر.
إذن، أي لون سيتم تطبيقه؟ سيتم تطبيق اللون الأخضر على عناصر الفقرة.
من خلال مراعاة عوامل الأولوية (relevance)، والمصدر والأهمية، والتخصيص، وترتيب الظهور، تضمن "خوارزمية التتابع" (Cascade Algorithm) أن تتصرف شيفرة CSS الخاصة بك بطريقة يمكن التنبؤ بها، مما يتيح لك تصميم صفحات ويب أكثر تعقيداً وتفصيلاً.
أسئلة :
ما هي الخطوة الأولى التي تتخذها خوارزمية التتابع (Cascade Algorithm) عند تحديد الأنماط التي سيتم تطبيقها؟
1. يتحقق من مدى خصوصية القواعد (the specificity of the rules). ❌
2. يُصنِّف (filters) القواعد بناءً على مدى صلتها بالعنصر. ✅
3. يبحث عن التصريحات (declarations) التي تحمل الوسم !important. ❌
4. يطبِّق القاعدة الأخيرة (last rule) الواردة في ملف CSS. ❌
ماذا سيحدث إذا حاولت تطبيق مجموعة متعارضة من الأنماط (styles) على قاعدتي فقرة؟
1. سيتم تطبيق أجزاء من الأنماط (styles) الخاصة بكل قاعدة. ❌
2. سيتوقف البرنامج عن العمل (crash). ❌
3. سيتم تطبيق الأنماط الأخيرة (last styles). ✅
4. لن يتم تطبيق أي من الأنماط (styles). ❌
أي من العوامل التالية لا يؤثر على قرار "خوارزمية التتابع" (Cascade Algorithm) بشأن قاعدة CSS التي سيتم تطبيقها؟
1. خصوصية المُحدِّدات (Selectors). ❌
2. ترتيب (order) ورود القواعد. ❌
3. ما إذا كانت الكلمة المفتاحية !important مستخدمة. ❌
4. خاصية اللون color في قاعدة CSS. ✅