تحدث ستاس ميلنيكوف ، مؤلف دورة HTML HTML Layout ، عن الفروق الدقيقة التي يمكن أن تعقد العمل مع خصائص CSS المخصصة.قواعد بناء اسم الخاصية المخصصة
لقد اعتدنا على حقيقة أن خصائص CSS المضمنة غير حساسة لحالة الأحرف. لذلك ، ستعطي الطرق التالية لإعلان خاصية
border
نفس النتيجة:
button { BORDER: 2px solid
خصائص مخصصة ، على النقيض من ذلك ، حساسة لحالة الأحرف ، لذلك المثال التالي بإنشاء خاصيتين مخصصتين مختلفتين:
button { --NETOLOGY-BRAND-COLOR:

الآن أصبح الإطار # 800080 (أرجواني) ، وأصبح النص # 27ae60 (أخضر).
قيم صالحة للخصائص المخصصة
بالنسبة إلى خاصية CSS عادية ، يمكنك فقط تعيين القيم المسموح بها بواسطة المعيار. وفقًا لمعيار الخاصية المخصصة ، يمكن استخدام أي قيمة CSS صالحة كقيمة. على سبيل المثال ، كما هو الحال مع كافة الخصائص المخصصة التالية:
.element::before { --color: rgba(0, 0, 0, 1); --hex:
على سبيل المثال ، لنقم بتعيين الإطار بلون # 800080 للزر:
button { --netologyBrandColor:

بالإضافة إلى القيم القياسية ، يمكنك تعيين خاصية مخصصة واحدة كقيمة لآخر.
button { --netologyBrandColor:
لا تختلف النتيجة عن سابقتها ، ولا يزال للزر إطار ذو لون # 800080.
إذا كانت خاصية المستخدم
--netologyBrandColor
تحتوي على قيمة غير صحيحة لخاصية
border-color
، على سبيل المثال 18px ، فسوف يتحول الإطار إلى اللون الأسود.
button { --netologyBrandColor: 18px; --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); }

الحقيقة هي أنه قبل أن يطبق المستعرض قيمة خاصية المستخدم للخاصية المدمجة ، فإنه سيفحصها للتأكد من صحتها. إذا كانت القيمة متوفرة للخاصية المضمنة ، فسيطبقها المتصفح. إذا لم يكن كذلك ، فستقوم بتعيين القيمة الافتراضية للخاصية المضمنة.
في حالتنا ، يعد 18px قيمة غير صحيحة للخاصية
border-color
المدمجة ، وبالتالي فإن المتصفح سوف يقوم بتعيين القيمة الافتراضية ، أي
currentColor
. هذا سهل جدًا للتحقق من خلال تعيين خاصية
color
على # 800080:
button { --netologyBrandColor: 18px; --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); color:

كما ترى ، قام المتصفح بتطبيق القيمة رقم 800080 للإطار. في هذا المثال ، استخدمت بناء الجملة الكامل لضبط الإطار. ولكن يمكننا استخدام واحدة قصيرة ، وهي خاصية
border
.
button { --netologyBrandColor: 18px; --buttonBorderColor: var(--netologyBrandColor); border: 2px solid var(--buttonBorderColor); color:

نحن هنا في انتظار فارق بسيط آخر. يوجد قسم منفصل في المعيار يصف سلوك الخصائص المخصصة في مثل هذا الموقف. وفقًا له ، إذا كانت خاصية المستخدم تحتوي على قيمة غير صحيحة لخاصية مضمنة ، فإن خاصية المستخدم هذه غير صالحة ، لذلك سيتجاهل المستعرض الخاصية المضمنة.
في مثالنا ، تحتوي خاصية
border
المضمنة على إحدى القيم التي تم تعيينها إلى الخاصية المخصصة -
--buttonBorderColor
بقيمة غير صحيحة تبلغ 18 بكسل. وفقًا للخوارزمية الموصوفة ، تجاهل المستعرض ببساطة خاصية
border
، وبالتالي فقد العنصر الحد.
القيمة الافتراضية للخصائص المخصصة
عندما نظرنا إلى مثال دالة
var
، استخدمنا معلمة واحدة فقط - اسم الخاصية المخصصة.
button { --netologyBrandColor:
لكن إلى جانب ذلك ، يمكن أن تقبل الدالة
var
القيمة الثانية - القيمة الافتراضية. لإعلان قيمة افتراضية ، تحتاج إلى وضع فاصلة بعد اسم الخاصية المخصصة وكتابة القيمة نفسها.

عندما يدرك المستعرض أن المطور لم يعلن عن قيمة للخاصية المخصصة ، فإنه يستخدم القيمة الافتراضية. على سبيل المثال ، القيمة # 800080 (الأرجواني) لخاصية مخصصة هي
--netologyBrandColor
.
button { border: 2px solid var(--netologyBrandColor,


نرى الإطار والنص يتحول إلى اللون الأرجواني. ولكن إذا قمت بتحريك الزر ، فسوف يتحول إلى اللون الأخضر. يشير هذا إلى أن المتصفح قام بتطبيق القيمة # 27ae60 على خاصية المستخدم ، وبالتالي استبدال القيمة الافتراضية.
ولكن هذا ليس كل الاحتمالات وظيفة
var
. في المثال السابق ،
--netologyBrandColor
استخدام الخاصية المخصصة
--netologyBrandColor
مرتين ، على التوالي ، لذلك قمت بتعيين القيمة الافتراضية مرتين.
ولكن يمكن القيام به بشكل مختلف. تسمح لك وظيفة
var
بتمرير وظيفة
var
أخرى ، بحيث يمكنك تعيين خاصية مخصصة أخرى كقيمة افتراضية.
--defaultButtonColor
كتابة المثال السابق باستخدام الخاصية المخصصة
--defaultButtonColor
:
button { --defaultButtonColor:
ظاهريا ، لن تتغير النتيجة. ولكن الآن لتغيير القيمة الافتراضية ، يجب عليك القيام بذلك فقط في مكان واحد ، وليس في عدة ، كما كان من قبل.
وراثة الخصائص المخصصة
يحتوي CSS على آلية وراثة تتيح للعناصر وراثة الخصائص من العناصر الأصل. في هذا الصدد ، الخصائص المخصصة لا تختلف عنها. على سبيل المثال ، سأكتب الكود الذي
--netologyBrandColor
الخاصية المخصصة -
--netologyBrandColor
من عنصر النص الأصلي.
body { --netologyBrandColor:

عند النظر إلى المفتش ، يمكنك أن تلاحظ النقش "موروثة من الجسم" ، والذي يوضح لنا أن الخاصية المخصصة مأخوذة من العنصر الأساسي. ولكن إذا أضفنا الخاصية المخصصة
--netologyBrandColor
لعنصر
button
، فإنه يتجاوز الخاصية بالفعل من العنصر الأساسي.
body { --netologyBrandColor:

يوضح المفتش أن الخاصية المخصصة -
--netologyBrandColor
لعنصر
button
تتخطى الخاصية
--netologyBrandColor
، والتي حددناها للعنصر الأساسي.
القيم العالمية
في معيار CSS ، قدمت Custom Properties
root
زائفة
root
خاصة تسمح لك بتحديد الخصائص المخصصة التي تنطبق على العنصر الجذر للمستند. على سبيل المثال ، في مستند
html
لعنصر
html
.
:root { --netologyBrandColor:

في المفتش ، يمكننا أن نرى أن الخاصية المخصصة المعلنة يتم تطبيقها على عنصر html. ولكن ، بالإضافة إلى مستند HTML ، تعمل
root
المزيف في مستندات SVG. على سبيل المثال ، سأعلن عن الخصائص المخصصة في علامة
style
.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28" width="50" height="50"> <style> :root{ --iconColor:

وهنا نرى أنه
root
إضافة
root
الجذر الزائفة إلى عنصر الجذر SVG. وفقًا لذلك ، هذا يثبت أن فئة الجذر الزائفة تنطبق ليس فقط على علامة
html
، ولكن أيضًا على أي عنصر الجذر.
الخاتمة
في هذه المقالة ، التقينا مع مطبات الخصائص المخصصة التي يمكن أن تكون مربكة. وفقا لذلك ، يمكننا أن نبدأ في استخدامها. لذلك ، في المقالة التالية سأتحدث عن الحيل العملية التي أستخدمها في مشاريعي.
من المحررين
دورات Netology حول الموضوع: