مطبات من خصائص CSS المخصصة

تحدث ستاس ميلنيكوف ، مؤلف دورة HTML HTML Layout ، عن الفروق الدقيقة التي يمكن أن تعقد العمل مع خصائص CSS المخصصة.

قواعد بناء اسم الخاصية المخصصة


لقد اعتدنا على حقيقة أن خصائص CSS المضمنة غير حساسة لحالة الأحرف. لذلك ، ستعطي الطرق التالية لإعلان خاصية border نفس النتيجة:

 button { BORDER: 2px solid #800080; } button { border: 2px solid #800080; } 

خصائص مخصصة ، على النقيض من ذلك ، حساسة لحالة الأحرف ، لذلك المثال التالي بإنشاء خاصيتين مخصصتين مختلفتين:

 button { --NETOLOGY-BRAND-COLOR: #800080; --netology-brand-color: #27ae60;   border: 2px solid var(--NETOLOGY-BRAND-COLOR); color: var(--netology-brand-color); } 



الآن أصبح الإطار # 800080 (أرجواني) ، وأصبح النص # 27ae60 (أخضر).

قيم صالحة للخصائص المخصصة


بالنسبة إلى خاصية CSS عادية ، يمكنك فقط تعيين القيم المسموح بها بواسطة المعيار. وفقًا لمعيار الخاصية المخصصة ، يمكن استخدام أي قيمة CSS صالحة كقيمة. على سبيل المثال ، كما هو الحال مع كافة الخصائص المخصصة التالية:

 .element::before { --color: rgba(0, 0, 0, 1); --hex: #000000; --value: 20px; --number: 3; --text: "Hey, what's up?"; --keyword: currentColor; } 

على سبيل المثال ، لنقم بتعيين الإطار بلون # 800080 للزر:

 button { --netologyBrandColor: #800080; border-width: 2px; border-style: solid; border-color: var(--netologyBrandColor); } 



بالإضافة إلى القيم القياسية ، يمكنك تعيين خاصية مخصصة واحدة كقيمة لآخر.

 button { --netologyBrandColor: #800080; --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); } 

لا تختلف النتيجة عن سابقتها ، ولا يزال للزر إطار ذو لون # 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; } 



كما ترى ، قام المتصفح بتطبيق القيمة رقم 800080 للإطار. في هذا المثال ، استخدمت بناء الجملة الكامل لضبط الإطار. ولكن يمكننا استخدام واحدة قصيرة ، وهي خاصية border .

 button { --netologyBrandColor: 18px;  --buttonBorderColor: var(--netologyBrandColor); border: 2px solid var(--buttonBorderColor); color: #800080; } 



نحن هنا في انتظار فارق بسيط آخر. يوجد قسم منفصل في المعيار يصف سلوك الخصائص المخصصة في مثل هذا الموقف. وفقًا له ، إذا كانت خاصية المستخدم تحتوي على قيمة غير صحيحة لخاصية مضمنة ، فإن خاصية المستخدم هذه غير صالحة ، لذلك سيتجاهل المستعرض الخاصية المضمنة.

في مثالنا ، تحتوي خاصية border المضمنة على إحدى القيم التي تم تعيينها إلى الخاصية المخصصة - --buttonBorderColor بقيمة غير صحيحة تبلغ 18 بكسل. وفقًا للخوارزمية الموصوفة ، تجاهل المستعرض ببساطة خاصية border ، وبالتالي فقد العنصر الحد.

القيمة الافتراضية للخصائص المخصصة


عندما نظرنا إلى مثال دالة var ، استخدمنا معلمة واحدة فقط - اسم الخاصية المخصصة.

 button { --netologyBrandColor: #800080; border: 2px solid var(--netologyBrandColor); color: var(--netologyBrandColor); } button:hover { --netologyBrandColor: #27ae60; } 

لكن إلى جانب ذلك ، يمكن أن تقبل الدالة var القيمة الثانية - القيمة الافتراضية. لإعلان قيمة افتراضية ، تحتاج إلى وضع فاصلة بعد اسم الخاصية المخصصة وكتابة القيمة نفسها.


عندما يدرك المستعرض أن المطور لم يعلن عن قيمة للخاصية المخصصة ، فإنه يستخدم القيمة الافتراضية. على سبيل المثال ، القيمة # 800080 (الأرجواني) لخاصية مخصصة هي --netologyBrandColor .

 button { border: 2px solid var(--netologyBrandColor, #800080); color: var(--netologyBrandColor, #800080); } button:hover { --netologyBrandColor: #27ae60; } 



نرى الإطار والنص يتحول إلى اللون الأرجواني. ولكن إذا قمت بتحريك الزر ، فسوف يتحول إلى اللون الأخضر. يشير هذا إلى أن المتصفح قام بتطبيق القيمة # 27ae60 على خاصية المستخدم ، وبالتالي استبدال القيمة الافتراضية.

ولكن هذا ليس كل الاحتمالات وظيفة var . في المثال السابق ، --netologyBrandColor استخدام الخاصية المخصصة --netologyBrandColor مرتين ، على التوالي ، لذلك قمت بتعيين القيمة الافتراضية مرتين.

ولكن يمكن القيام به بشكل مختلف. تسمح لك وظيفة var بتمرير وظيفة var أخرى ، بحيث يمكنك تعيين خاصية مخصصة أخرى كقيمة افتراضية. --defaultButtonColor كتابة المثال السابق باستخدام الخاصية المخصصة --defaultButtonColor :

 button { --defaultButtonColor: #800080; border: 2px solid var(--netologyBrandColor, var(--defaultButtonColor)); color: var(--netologyBrandColor, var(--defaultButtonColor)); } button:hover { --netologyBrandColor: #27ae60; } 

ظاهريا ، لن تتغير النتيجة. ولكن الآن لتغيير القيمة الافتراضية ، يجب عليك القيام بذلك فقط في مكان واحد ، وليس في عدة ، كما كان من قبل.

وراثة الخصائص المخصصة


يحتوي CSS على آلية وراثة تتيح للعناصر وراثة الخصائص من العناصر الأصل. في هذا الصدد ، الخصائص المخصصة لا تختلف عنها. على سبيل المثال ، سأكتب الكود الذي --netologyBrandColor الخاصية المخصصة - --netologyBrandColor من عنصر النص الأصلي.

 body { --netologyBrandColor: #800080; } button { border: 2px solid var(--netologyBrandColor); color: var(--netologyBrandColor); } </td></tr> 



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

 body { --netologyBrandColor: #800080; } button { --netologyBrandColor: #27ae60; border: 2px solid var(--netologyBrandColor); color: var(--netologyBrandColor); } 



يوضح المفتش أن الخاصية المخصصة - --netologyBrandColor لعنصر button تتخطى الخاصية --netologyBrandColor ، والتي حددناها للعنصر الأساسي.

القيم العالمية


في معيار CSS ، قدمت Custom Properties root زائفة root خاصة تسمح لك بتحديد الخصائص المخصصة التي تنطبق على العنصر الجذر للمستند. على سبيل المثال ، في مستند html لعنصر html .

 :root { --netologyBrandColor: #800080; } button { border: 2px solid var(--netologyBrandColor); color: var(--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: #ffcc00;           --iconStroke: #000000;           --iconStrokeWidth: 2px;       }   </style>   <path stroke="var(--iconStroke)"         stroke-width="var(--iconStrokeWidth)"         fill="var(--iconColor)"         d="M26 10.109c0 .281-.203.547-.406.75l-5.672 5.531 1.344 7.812c.016.109.016.203.016.313 0 .406-.187.781-.641.781a1.27 1.27 0 0 1-.625-.187L13 21.422l-7.016 3.687c-.203.109-.406.187-.625.187-.453 0-.656-.375-.656-.781 0-.109.016-.203.031-.313l1.344-7.812L.39 10.859c-.187-.203-.391-.469-.391-.75 0-.469.484-.656.875-.719l7.844-1.141 3.516-7.109c.141-.297.406-.641.766-.641s.625.344.766.641l3.516 7.109 7.844 1.141c.375.063.875.25.875.719z"/> </svg> 



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

الخاتمة


في هذه المقالة ، التقينا مع مطبات الخصائص المخصصة التي يمكن أن تكون مربكة. وفقا لذلك ، يمكننا أن نبدأ في استخدامها. لذلك ، في المقالة التالية سأتحدث عن الحيل العملية التي أستخدمها في مشاريعي.

من المحررين


دورات Netology حول الموضوع:

Source: https://habr.com/ru/post/ar435654/


All Articles