يمكن تخصيص معظم واجهات المستخدم التي ينشئها المتصفّح إلى حدٍّ ما باستخدام CSS. وحتى إذا كان يتطلّب ميزات حديثة، فإنّه يتكيّف مع الإصدارات الأقدم من المتصفّحات، وبالتالي لا يتطلّب غالبًا استخدام polyfill أو إجراء احتياطي.
قبل إعادة إنشاء واجهة مستخدم المتصفّح (عناصر التحكّم في النماذج وأشرطة التمرير والاختيارات ورسائل الخطأ وما إلى ذلك)، تأكَّد أولاً مما يلي:
- لا يمكن تخصيص واجهة مستخدم المتصفّح بما يكفي لتلبية احتياجاتك، حتى مع استخدام CSS الحديثة
- التخصيص المطلوب مهم بما يكفي لتبرير المفاضلات لإعادة إنشاء واجهة المستخدم المضمنة - وأبرزها فقدان دلالات تسهيل الاستخدام، والتعامل مع لوحة المفاتيح، وأداة IME، وتكامل AT الذي توفره واجهة المستخدم الأصلية مجانًا.
في ما يلي أمثلة على عمليات التخصيص الممكنة:
- استخدِم
::selectionلتخصيص ألوان النص المميَّز. - لا تطبّق السمة
user-select: noneعلى نص المحتوى، لأنّ ذلك يؤدي إلى تعطيل ميزة النسخ واللصق وأدوات الترجمة وإيماءات "القراءة من هنا" في التكنولوجيا المساعدة. يجب أن يقتصر ذلك على Chrome (مقابض السحب وأشرطة الأدوات وتصنيفات الأزرار المكرّرة). - استخدِم
accent-colorلتطبيق لون التمييز الخاص بالصفحة على أي واجهة مستخدم ينشئها المتصفّح. - استخدِم
color-schemeلتتكيّف واجهة مستخدم المتصفّح مع الوضع الفاتح أو الداكن. - استخدِم
scrollbar-colorلتخصيص ألوان شريط التمرير وscrollbar-widthللتحكّم في سُمك شريط التمرير، مع الحفاظ على تمييز شريط التمرير بشكل واضح عن المسار (بنسبة ≥3:1)، ولا تضبطscrollbar-width: noneعلى المناطق القابلة للتمرير (استخدِمها فقط عندما يتم استبدال التمرير بالكامل بإمكانية أخرى). - استخدِم
:user-invalid/:user-validلتنسيق الصلاحية، وليس:invalid/:valid، لأنّها لا تتطابق إلا بعد تفاعل المستخدم مع الحقل، ما يتجنّب الإعداد التلقائي غير المناسب الذي يضع علامة على الحقول الفارغة المطلوبة كأخطاء عند تحميل الصفحة. استبعِد أشرطة تمرير النطاق عند استهدافinputبشكل عام (مثلinput:not(input[type="range"]):user-valid) كي لا يؤدي تعديل شريط التمرير إلى تطبيق حدود أو خلفيات صلاحية الحقل عليه. - يمكن بشكل عام تصميم الأزرار وحقول النص (بما في ذلك
<textarea>) كعناصر عادية. - استخدِم
font-sizeلتغيير الحجم وسمات نصية أخرى للتحكّم في أسلوب الخطوط
تنسيق الحقول النصية (<input> و<textarea>)
بالنسبة إلى معظم أغراض التنسيق (مثل الألوان والحدود والخلفيات وأسلوب الخط وما إلى ذلك)، يمكنك التعامل مع هذه العناصر كحاويات نصية عادية.
- استخدِم
:placeholder-shownو::placeholderلتنسيق العناصر النائبة للإدخال. - استخدِم
field-sizing: contentلضبط حجم الحقول النصية بما يتناسب مع المحتوى. - بالنسبة إلى عناصر
<textarea>، استخدِمresize: verticalلإيقاف تغيير الحجم أفقيًا أوresize: noneلإيقاف تغيير الحجم بالكامل.
عناصر تحكّم الخيارات المتعدّدة (القوائم المنسدلة وأزرار الاختيار ومربّعات الاختيار)
- لتحديد خيار واحد من بين خيارات متعددة في قائمة منسدلة: استخدِم
<select>+appearance: base-select+::picker(select). لمزيد من المعلومات، يُرجى الاطّلاع على Branded Select Styling. - تحديد خيار واحد أو أكثر من بين خيارات متعددة معروضة في الصفحة: استخدِم
<input type=checkbox>أو<input type=radio>داخل<label>لكل خيار. يمكنك اختيار النمط من خلال "label:has(:checked)". - يمكنك تصميم مربّعات الاختيار وأزرار الاختيار ومفاتيح التبديل من خلال
appearance: noneوالمحتوى الذي يتم إنشاؤه (::before/::after) أو صور الخلفية لرسم الحالة التي تم وضع علامة عليها.
<input> غير نصية (أزرار وأشرطة تمرير وإدخالات ملفات وما إلى ذلك)
- إدخالات الملفات: استخدِم
::file-selector-buttonلتنسيق الزر. - لا تستخدِم السمة
<input>مع السمةtypeالتي تحمل القيمةbuttonأوsubmitأوreset. استخدِم<button>بدلاً من ذلك وصمِّمه كعنصر عادي. - أشرطة التمرير: استخدِم
appearance: noneمع العناصر الزائفة الخاصة بمؤشر شريط التمرير (::-webkit-slider-thumbو::-moz-range-thumbوما إلى ذلك) والعناصر الزائفة الخاصة بمسار شريط التمرير (::-webkit-slider-runnable-trackو::-moz-range-trackوما إلى ذلك) لمزيد من التحكّم الدقيق.