پرش به محتوا

درباره Grabient

Grabient گرادیان را از کی‌فریم‌ها می‌سازد: 2 تا 8 رنگ که با یک منحنی نرم به هم وصل می‌شوند.

1 · کی‌فریم‌ها

کی‌فریم رنگی است که شما انتخاب می‌کنید. مانند پویانمایی، چند کی‌فریم تعیین می‌کنید و رنگ‌های میان آن‌ها پر می‌شوند. هر پالت 2 تا 8 کی‌فریم دارد که با فاصله برابر در طول گرادیان قرار گرفته‌اند و گرادیان از تک‌تک آن‌ها می‌گذرد:


شروع روشنایی
پایان روشنایی
10

کروما
0.300

فام
پیمایش
90°-90°

نقطه‌ها کی‌فریم‌ها هستند. نمودار، روشنایی، کروما و فام را در طول گرادیان نشان می‌دهد. برای تغییر یک کی‌فریم، نقطه‌اش را بکشید.

هر کی‌فریم سه عدد در OKLCH است. روشنایی L از 0 (سیاه) تا 1 (سفید) است. کروما C میزان رنگینی آن است: 0 خاکستری است و زنده‌ترین رنگ‌های صفحه‌نمایش حدود 0.3 هستند. فام H زاویه روی چرخه رنگ است، بر حسب درجه.

2 · فرمول

روشنایی، کروما و فام هر کدام منحنی خود را دارند که در نمودار بالا رسم شده است. هر منحنی از کی‌فریم‌ها می‌گذرد و میان آن‌ها نرم خم می‌شود. رنگ هر نقطه، مقدار سه منحنی در همان نقطه است.

گرادیان‌های CSS و Figma نقطه‌های رنگ خود را با خط‌های راست به هم وصل می‌کنند، برای همین جایی که آهنگ ترکیب عوض می‌شود ممکن است لبه‌ای محو دیده شود.

در فرمول، t از 0 در آغاز گرادیان تا 1 در پایان آن پیش می‌رود. با K کی‌فریم، کی‌فریم i در t = i / (K − 1) قرار دارد، با شمارش از 0. هر منحنی یک اسپلاین Catmull–Rom است و gamut() رنگ را در محدوده صفحه‌نمایش جا می‌دهد (بخش 6):

color(t) = gamut( L(t), C(t), H(t) )

// one axis: a Catmull–Rom spline through K evenly spaced valuesconst { min, max, floor } = Math;function spline(v, t) {  const K = v.length, x = min(max(t, 0), 1) * (K - 1);  const i = min(K - 2, floor(x)), u = x - i;  const p0 = v[max(i - 1, 0)], p1 = v[i];  const p2 = v[i + 1], p3 = v[min(i + 2, K - 1)];  return p1 + 0.5 * u * (p2 - p0    + u * (2*p0 - 5*p1 + 4*p2 - p3    + u * (3*(p1 - p2) + p3 - p0)));}// the color at t from the keyframes' L, C and H. A spline can overshoot// between keyframes, so L is kept in 0..1 and C at 0 or more. The// browser fits an oklch() color to the screen (section 6).function color(L, C, H, t) {  const l = min(max(spline(L, t), 0), 1), c = max(spline(C, t), 0);  return `oklch(${l} ${c} ${spline(H, t)})`;}

3 · گام‌ها

Grabient برای رسم گرادیان، در نقطه‌هایی با فاصله برابر رنگ می‌گیرد که به آن‌ها گام می‌گویند. گام اول و آخر همان کی‌فریم اول و آخرند. سبک‌های گرادیان، گام‌ها را به‌عنوان نقطه رنگ به کار می‌برند. سبک‌های نواری هر گام را به‌صورت نواری از رنگ یکدست نشان می‌دهند. تعداد گام‌ها هرگز از تعداد کی‌فریم‌ها کمتر نیست:

همین پالت با 7 گام. نقطه‌ها کی‌فریم‌ها را نشان می‌دهند.
گام‌ها

4 · چرا OKLCH

RGB و HSL توصیف می‌کنند که صفحه‌نمایش چگونه نور را ترکیب می‌کند و عددهایشان اغلب با آنچه می‌بینیم جور درنمی‌آید. زرد خالص و آبی خالص در HSL هر دو روشنایی 50% دارند، اما زرد بسیار روشن‌تر به نظر می‌رسد. OKLCH به آن‌ها 0.97 و 0.45 می‌دهد. این فضا همان OKLab ساخته Björn Ottosson در مختصات قطبی است و طوری ساخته شده که تغییرهای برابر در عددهایش برابر دیده شوند. دو رنگ، ترکیب‌شده به هر دو روش:

سبز و سرخابی، ترکیب‌شده در RGB (بالا) و OKLCH (پایین). ترکیب RGB در میانه خاکستری می‌شود.

چون روشنایی، کروما و فام از هم جدا هستند، تغییر فام یک کی‌فریم روشنایی آن را حفظ می‌کند.

5 · فام فراتر از 360°

میان دو فام، گرادیان می‌تواند از هر دو طرف چرخه رنگ برود و بیشتر ابزارها راه کوتاه‌تر را می‌روند. در Grabient فام می‌تواند از 360° فراتر برود: 690° همان رنگ 330° است، یک دور بعد. گرادیان تمام راه را می‌رود:

هر دو نوار به یک رنگ ختم می‌شوند. بالا: فام 210° تا 330°. پایین: 210° تا 690°، یک دور بیشتر.

پیمایش فام یک پالت، فام آخر آن منهای فام اول است، با احتساب دورها؛ پس یک رنگین‌کمان کامل 360° می‌پیماید. کی‌فریم‌های کنار هم می‌توانند تا 540° با هم فاصله داشته باشند.

6 · رنگ‌هایی که صفحه‌نمایش نمی‌تواند نشان دهد

OKLCH می‌تواند رنگ‌هایی زنده‌تر از آنچه صفحه‌نمایش نشان می‌دهد توصیف کند. برای این رنگ‌ها، Grabient روشنایی و فام را نگه می‌دارد و کروما را آن‌قدر پایین می‌آورد تا رنگ جا شود: sRGB در صفحه‌نمایش معمولی و Display P3 در صفحه‌نمایش با گاموت گسترده. CSS Color 4 همین کار را برای رنگ‌های oklch() انجام می‌دهد:

کروما
0.350
خط نقطه‌چین: کرومای درخواستی. خط پیوسته: آنچه صفحه‌نمایش نشان می‌دهد. برای درخواست کرومای بیشتر یا کمتر، خط را بکشید.

7 · نمونه‌ها

چند پالت و منحنی‌هایی که آن‌ها را می‌سازند:

غروب: روشنایی از 0.86 به 0.32 پایین می‌آید، کروما در 0.19 به اوج می‌رسد و فام از زرد به زرشکی می‌چرخد.ویرایش
طیف: دو کی‌فریم با روشنایی و کرومای برابر، و فامی که 360° می‌پیماید.ویرایش
دوتون: دو کی‌فریم با فاصله زیاد در روشنایی (0.92 و 0.22) و 130° فاصله در فام.ویرایش
پاستل‌ها: روشنایی بالا (0.87 و بیشتر) و کرومای کم (0.06 و کمتر).ویرایش
خاکستری‌ها: کروما 0 در هر کی‌فریم.ویرایش

«وارونه» کی‌فریم‌ها را با ترتیب برعکس می‌چیند. «معکوس» یک نگاتیو می‌سازد: هر روشنایی L به 1 − L تبدیل می‌شود و هر فام 180° می‌چرخد.

8 · بذر

نشانی هر پالت بذر آن را در خود دارد، کدی کوتاه برای کی‌فریم‌هایش. بذر شکل اول ⁨kW6iw33i87sY6O2wq7rmZ07I⁩ است.

بذر با k شروع می‌شود و پس از آن کی‌فریم‌ها می‌آیند که در بیت‌ها فشرده شده‌اند: 8 بیت برای روشنایی، 8 برای کروما، 9 برای فام اول، سپس 10 برای هر فام بعدی که به‌صورت تغییر نسبت به فام قبلی ذخیره می‌شود:

دو کی‌فریم بذری 11 کاراکتری می‌سازند و هشت کی‌فریم بذری 37 کاراکتری. هر پالت دقیقاً یک بذر دارد.

کی‌فریمی که با یک رنگ hex تعیین شود، دقیقاً همان رنگ را در 24 بیت نگه می‌دارد. طول چنین بذری 9 تا 50 کاراکتر است.