استيفاء الألوان في CSS: لماذا يفوز OKLCH
Embed This Widget
Add the script tag and a data attribute to embed this widget.
Embed via iframe for maximum compatibility.
<iframe src="https://colorfyi.com/iframe/entity//" width="420" height="400" frameborder="0" style="border:0;border-radius:10px;max-width:100%" loading="lazy"></iframe>
Paste this URL in WordPress, Medium, or any oEmbed-compatible platform.
https://colorfyi.com/entity//
Add a dynamic SVG badge to your README or docs.
[](https://colorfyi.com/entity//)
Use the native HTML custom element.
في كل مرة تمزج فيها CSS لونين — في تدرج، أو في color-mix()، أو في انتقال — تُجري استيفاء لوني: حساب القيم الوسيطة بين لون بداية ولون نهاية. مع CSS الحديث، يمكنك الآن اختيار فضاء الألوان للاستيفاء. والاختيار مهم جداً، وينتج OKLCH باستمرار أفضل النتائج.
مشكلة استيفاء RGB: نقاط وسط باهتة
عندما تكتب تدرجاً في CSS دون تحديد فضاء لوني، يستوفي المتصفح في sRGB.
/* الافتراضي: يستوفي في sRGB */
background: linear-gradient(to right, #FF0000, #00FF00);
نقطة منتصف هذا التدرج في sRGB هي #808000 — زيتوني باهت. المشكلة الجوهرية هي أن sRGB ليس متسقاً إدراكياً.
مشكلة جاما
background: linear-gradient(in srgb-linear, red, blue);
sRGB الخطي أفضل من sRGB المشفر بجاما، لكنه لا يحل مشاكل إزاحة الصبغة وانخفاض التشبع.
إزاحات صبغة HSL
تمتلك HSL وضع فشل مميزاً: إزاحات الصبغة. المشكلة الأعمق هي أن Lightness في HSL ليست متسقة إدراكياً.
/* تدرج HSL — سطوع إدراكي غير متساو عبر الصبغات */
background: linear-gradient(in hsl, hsl(60 100% 50%), hsl(240 100% 50%));
OKLCH: الاتساق والتسوية الإدراكية
صمّم Björn Ottosson نظام OKLCH عام 2020 تحديداً لمعالجة أوجه القصور في التسوية الإدراكية للفضاءات اللونية السابقة. قنواته الثلاثة — L (الإضاءة)، C (الكثافة)، وH (زاوية الصبغة) — مُعايَرة بحيث تُنتج الخطوات العددية المتساوية في L تغييرات متساوية في السطوع المُدرَك.
/* تدرج OKLCH — حيوي، متسق إدراكياً */
background: linear-gradient(in oklch, red, blue);
مقارنة جنباً إلى جنب
| التدرج | لون نقطة الوسط | الجودة الإدراكية |
|---|---|---|
in srgb من الأحمر إلى الأخضر |
#808000 — زيتوني باهت | وادٍ داكن وباهت |
in hsl من الأصفر إلى الأزرق |
قمة خضراء حيوية | سطوع غير متساوٍ |
in oklch من الأحمر إلى الأخضر |
أصفر دافئ حيوي | ناعم ومشبع ومتساوٍ |
دالة color-mix()
color: color-mix(in oklch, #FF5733 50%, #3498DB);
الاستخدامات العملية لـ color-mix()
إنشاء متغيرات شفافة:
:root {
--brand: #2563EB;
--brand-10: color-mix(in oklch, var(--brand) 10%, transparent);
--brand-50: color-mix(in oklch, var(--brand) 50%, transparent);
}
التظليل نحو الأبيض أو الأسود:
:root {
--brand: #2563EB;
--brand-light: color-mix(in oklch, var(--brand) 70%, white);
--brand-dark: color-mix(in oklch, var(--brand) 70%, black);
}
اشتقاق حالة التمرير:
.button:hover {
background: color-mix(in oklch, var(--brand) 80%, black);
}
فضاء الألوان للاستيفاء في التدرجات
/* sRGB (الافتراضي، غالباً باهت) */
background: linear-gradient(to right, red, blue);
/* OKLCH (موصى به: حيوي، متسق إدراكياً) */
background: linear-gradient(in oklch to right, red, blue);
اتجاه استيفاء الصبغة في OKLCH
/* القوس الأقصر (الافتراضي) */
background: linear-gradient(in oklch, hsl(30 100% 50%), hsl(270 100% 50%));
/* القوس الأطول — يمر عبر الأصفر والأخضر والسماوي */
background: linear-gradient(in oklch longer hue, hsl(30 100% 50%), hsl(270 100% 50%));
دعم المتصفحات
- Chrome/Edge: دعم كامل منذ الإصدار 111 (مارس 2023)
- Firefox: دعم كامل منذ الإصدار 113 (مايو 2023)
- Safari: دعم كامل منذ الإصدار 16.2 (ديسمبر 2022)
للمتصفحات الأقدم:
background: linear-gradient(to right, #FF5733, #3498DB);
@supports (background: linear-gradient(in oklch, red, blue)) {
background: linear-gradient(in oklch to right, #FF5733, #3498DB);
}
النقاط الرئيسية
- استيفاء sRGB (الافتراضي في CSS) يُنتج نقاط وسط باهتة وغير مشبعة.
- استيفاء HSL يُدخل سطوعاً إدراكياً غير متسق.
- استيفاء OKLCH يُنتج نقاط وسط حيوية ومتسقة إدراكياً.
- استخدم
in oklchفي أي تدرج. استخدمcolor-mix(in oklch, ...)للمزج البرمجي. - يتيح لك Color Converter تحويل قيم HEX أو RGB إلى OKLCH.
- يتيح لك Gradient Generator معاينة كيفية تأثير فضاءات الألوان المختلفة على مخرجات التدرج.