بودكاست CSS - 004: The Cascade
الاختصار CSS يعني أوراق الأنماط المتتالية. التتابع هو خوارزمية لحل التعارضات حيث تنطبق قواعد CSS متعددة على عنصر HTML. وهذا هو السبب في أن نص الزر المصمّم باستخدام CSS التالية سيظهر باللون الأزرق.
button {
color: red;
}
button {
color: blue;
}
ويساعدك فهم خوارزمية التتابع في فهم كيفية حل المتصفح لهذه التعارضات. تنقسم خوارزمية التتابع إلى 4 مراحل منفصلة.
- الموضع وترتيب الظهور: ترتيب ظهور قواعد CSS
- الدقة: خوارزمية تحدِّد أداة اختيار لغة CSS التي لها أقوى مطابقة
- المصدر: ترتيب ظهور CSS ومصدره، سواء كان نمط متصفّح CSS من إضافة متصفّح أو CSS التي أنشأتها
- الأهمية: يتم ترجيح بعض قواعد CSS بشكل أكبر من غيرها،
خاصةً مع نوع القاعدة
!important
الموضع وترتيب الظهور
ويؤخذ التتابع بعين الاعتبار الترتيب الذي تظهر به قواعد CSS وطريقة ظهورها. بينما يحسب حل الخلاف.
إن العرض التوضيحي في بداية هذا الدرس هو المثال الأكثر وضوحًا للموضع. هناك قاعدتان لهما محددات بنفس الدقة، لذلك فإن آخر سيتم إعلانه فاز.
يمكن أن تأتي الأنماط من مصادر مختلفة في صفحة HTML،
مثل علامة <link>
مع علامة <style>
مضمّنة
ومضمنة CSS كما هو موضح في سمة style
للعنصر.
إذا كان لديك <link>
يتضمن CSS أعلى صفحة HTML،
ثم عنصر <link>
آخر يتضمن CSS في أسفل الصفحة: سيكون لـ <link>
السفلي الأكثر دقة.
ويحدث الأمر نفسه مع عناصر <style>
المضمّنة أيضًا.
تكون أكثر تحديدًا، كلما انتقلنا إلى أسفل الصفحة.
ينطبق هذا الترتيب أيضًا على عناصر <style>
المضمّنة.
إذا تم الإعلان عنها قبل <link>
،
فإن لغة CSS لورقة الأنماط المرتبطة ستكون أكثر خصوصية.
إنّ سمة style
المضمَّنة التي تتضمّن بيانات CSS ستلغي جميع خدمات CSS الأخرى،
بغض النظر عن موضعه، ما لم يتم تحديد !important
في البيان.
ينطبق الموضع أيضًا بترتيب قاعدة CSS.
في هذا المثال، سيحتوي العنصر على خلفية أرجوانية لأنّه تم تحديد background: purple
في النهاية.
بما أنّه تم تحديد الخلفية الخضراء قبل الخلفية الأرجوانية، يتجاهلها المتصفح الآن.
.my-element {
background: green;
background: purple;
}
القدرة على تحديد قيمتين لنفس الموقع
طريقة بسيطة لإنشاء عناصر احتياطية للمتصفّحات التي لا تتيح قيمة معيّنة.
في هذا المثال التالي، يتم تعريف font-size
مرتين.
إذا كان clamp()
متوافقًا مع المتصفح،
سيتم تجاهل بيان font-size
السابق.
إذا لم يكن clamp()
متوافقًا مع المتصفّح،
سيتم الالتزام بالبيان الأولي، وسيكون حجم الخط 1.5rem
.my-element {
font-size: 1.5rem;
font-size: clamp(1.5rem, 1rem + 3vw, 2rem);
}
التحقق من فهمك
اختبر معلوماتك حول الشلال
إذا كان لديك رمز HTML التالي على صفحتك:
<!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="/styles.css" /> </head> <body> <button>I am a button</button> <style> button { background: pink; } </style> </body> </html>
داخل styles.css
، توجد قاعدة CSS التالية:
button { background: yellow; }
ما لون خلفية الزر؟
<style>
المضمّن أسفل الصفحة أكثر من
<link>
، وفي حين أن خصوصية button
هي نفسها،
الموضع في قاعدة النمط يجعله فائزًا.
الدقة
الدقة هي خوارزمية تحدّد أداة اختيار لغة CSS الأكثر تحديدًا، باستخدام نظام ترجيح أو نظام تسجيل النقاط لإجراء تلك العمليات الحسابية. ومن خلال جعل القاعدة أكثر تحديدًا، يمكنك تطبيق ذلك حتى إذا ظهرت لاحقًا في CSS بعض صفحات CSS الأخرى التي تتطابق مع المحدّد.
في الدرس التالي، يمكنك التعرّف على تفاصيل حول طريقة احتساب الدقة ولكن وضع بعض الأشياء في الاعتبار سيساعدك على تجنب الكثير من مشكلات الخصوصية.
فإن استهداف CSS لفئة ما على عنصر ما سيجعل هذه القاعدة أكثر تحديدًا،
وبالتالي يُعتبر تطبيقها أكثر أهمية،
من CSS التي تستهدف العنصر وحده.
وهذا يعني أنه باستخدام CSS التالية،
سيتم تلوين h1
باللون الأحمر على الرغم من تطابق القاعدتين وظهور قاعدة أداة الاختيار h1
لاحقًا في ورقة الأنماط.
<h1 class="my-element">Heading</h1>
.my-element {
color: red;
}
h1 {
color: blue;
}
تجعل السمة id
خدمة مقارنة الأسعار (CSS) أكثر تحديدًا،
ولذلك فإن الأنماط المطبقة على المعرف ستلغي تلك المطبقة بعدة طرق أخرى.
وهذا هو أحد الأسباب التي تجعل من غير المفيد بشكل عام إرفاق الأنماط بـ id
.
حيث قد يصعب استبدال هذا النمط بنمط آخر.
الدقة تراكمية
كما يمكنك اكتشافه في الدرس التالي،
يُمنح لكل نوع من أنواع المحدد نقاطًا تشير إلى مدى تحديدها،
يتم جمع النقاط لجميع المحددات التي استخدمتها لاستهداف عنصر معًا.
وهذا يعني أنك إذا استهدفت عنصرًا به قائمة محددات مثل
a.my-class.another-class[href]:hover
تحصل على محتوى يصعب استبداله بخدمة CSS أخرى.
لهذا السبب، وللمساهمة في جعل خدمة CSS أكثر قابلية لإعادة الاستخدام،
ننصحك بإبقاء محددات الاختيار بسيطة قدر الإمكان.
استخدم الخصوصية كأداة للوصول إلى العناصر عندما تحتاج إليها،
ولكن ننصحك دائمًا بإعادة بناء قوائم المحددات الطويلة والمحددة، إن أمكن.
الأصل
إنّ خدمة CSS التي تكتبها ليست هي خدمة CSS الوحيدة التي يتم تطبيقها على الصفحة. يأخذ التتابع في الاعتبار أصل CSS. يتضمن هذا المصدر ورقة الأنماط الداخلية للمتصفح، الأنماط المضافة بواسطة إضافات المتصفح أو نظام التشغيل، وCSS المكتوب. في ما يلي ترتيب خصوصية هذه المصادر، من الأقل تحديدًا إلى الأكثر تحديدًا:
- أنماط قاعدة وكيل المستخدم: هذه هي الأنماط التي يطبقها متصفّحك على عناصر HTML تلقائيًا.
- أنماط المستخدمين على الجهاز: يمكن أن تأتي هذه من مستوى نظام التشغيل، مثل حجم الخط الأساسي، أو تفضيل الحركة المنخفضة. يمكن أن تأتي أيضًا من إضافات المتصفح، مثل امتداد المتصفح الذي يتيح للمستخدم كتابة CSS مخصصة لصفحة الويب.
- محتوى CSS التأليف: تمثّل هذه السمة لغة CSS التي تؤلفها.
- تاريخ التأليف:
!important
أي سمة!important
تضيفها إلى البيانات التي أنشأتَها - أنماط المستخدم المحلي
!important
: أي!important
تأتي من مستوى نظام التشغيل، أو CSS على مستوى إضافة المتصفح. - وكيل المستخدم
!important
أي!important
يتم تحديدها في خدمة CSS التلقائية. المقدمة من المتصفح.
إذا كان لديك نوع قاعدة "!important
" في خدمة مقارنة الأسعار (CSS) التي كتبتها
وكان المستخدم يملك نوع قاعدة !important
في لغة CSS المخصّصة، لمن تكون CSS هي الجهة الفائزة؟
التحقق من فهمك
اختبِر معلوماتك حول أصول الشلال
اختبر معلوماتك حول أصول الشلالات، مع استخدام النمط التالي قواعد من مصادر مختلفة وهي:
نمط وكيل المستخدم
h1 { margin-block-start: 0.83em; }
فتحة سفلية واسعة
h1 { margin-block-start: 20px; }
أنماط مؤلف الصفحة
h1 { margin-block-start: 2ch; } @media (max-width: 480px) { h1 { margin-block-start: 1ch; } }
نمط مخصص للمستخدم
h1 { margin-block-start: 2rem !important; }
بعد ذلك، باستخدام HTML التالي:
<h1>Lorem ipsum</h1>
ما هو margin-block-start
الأخير من h1
؟
!important
" على المصدر الأكثر تحديدًا.الأهمية
لا يتم احتساب جميع قواعد CSS بالطريقة نفسها المتّبعة، أو إعطاء نفس مستوى الخصوصية مثل بعضهم البعض.
يشير ترتيب الأهمية، من الأقل أهمية، الأكثر أهمية هو على النحو التالي:
- نوع القاعدة العادي، مثل
font-size
أوbackground
أوcolor
- نوع قاعدة واحد (
animation
) - نوع قاعدة واحدة (
!important
) (باتّباع الترتيب نفسه المستخدَم في المصدر) - نوع قاعدة واحد (
transition
)
تكون لأنواع قواعد الانتقال والرسوم المتحركة النشطة أهمية أكبر من القواعد العادية.
في حالة الانتقالات، تكون الأهمية أكبر من أنواع القواعد !important
.
هذا لأنه عندما تصبح الرسوم المتحركة أو الانتقال نشط،
سلوكه المتوقع هو تغيير الحالة المرئية.
استخدام أدوات مطوري البرامج لمعرفة سبب عدم تطبيق بعض صفحات CSS
تعرض "أدوات مطوري البرامج في المتصفح" عادةً كل محتوى CSS الذي يمكن أن يطابق أحد العناصر، مع علامات التبويب التي لا يتم استخدامها.
إذا لم تظهر خدمة CSS التي توقّعت تطبيقها، فإنها لم تطابق العنصر. في هذه الحالة، عليك البحث في مكان آخر، ربما بسبب خطأ إملائي في اسم الفئة أو العنصر أو بعض رموز CSS غير الصالحة.
التحقق من فهمك
اختبر معلوماتك حول الشلال
يمكن استخدام التتالي في...