رنگ color
رنگ در استاندارد رابط کاربری سلام: همهی نگارشهای رنگ به انگلیسی و فارسی با پیام خطای روشن، تبدیل میان فضاهای رنگ، آمیختن در oklab، جفت روشن و تیره، تضاد و CSS خروجی وب.
واردسازی رنگ
نام آرگومانها شناسهی خود کد است و معادل فارسی ندارد؛ گونهها، کلیدواژهها و نام بستهها با معادل فارسی نوشته میشوند.
رنگ بستهی رنگ در سلام است. هر رنگی را که یک صفحه به کار میبرد میخواند، با همان نگارش در کد صفحه، در یک رشته و در مقداری که هنگام اجرا ساخته میشود، و رنگ را به آنچه هر مقصد لازم دارد تبدیل میکند: یک طبیعی۳۲ فشرده برای نمایشگر بومی و متن CSS برای وب.
هر رنگ کانالهای sRGB از ۰ تا ۱ و یک آلفا دارد. رنگی از گسترهای پهنتر، مانند color(display p3, 1, 0, 0)، کانالهای کمتر از ۰ یا بیشتر از ۱ را نگه میدارد، پس تا هنگام کشیدن چیزی از دست نمیرود.
آنچه تجزیه میپذیرد:
- نامها: هر ۱۴۸ نام رنگ CSS به همراه
transparentوcurrent(رنگ متن)، با حروف کوچک یا بزرگ و با فاصله یا بیفاصله (alice blue)، و نامهای فارسی مانندقرمز،آبی،قهوه ای،شفافوکنونی. - هگز:
#rgb،#rgba،#rrggbbو#rrggbbaa. - تابعها:
rgb،rgba،hsl،hsla،hwb،lab،lch،oklab،oklch،cmyk(وdevice cmyk) وcolor(فضا, c1, c2, c3)با فضاهایsrgb،srgb linear،display p3،a98 rgb،prophoto rgb،rec2020،xyz،xyz d50وxyz d65. مقدارها با ویرگول جدا میشوند، مانندrgb(51, 102, 170)، یا مانند CSS با فاصله و/پیش از آلفا. نگارش خطتیرهدار CSS (display-p3) هم کار میکند. mix(a, b, مقدار, فضا)یاترکیب(...): مقدار سهمbاست، عددی از ۰ تا ۱ یا درصد، و اگر نیاید ۵۰٪؛ فضا اگر نیاید oklab است.light dark(a, b)یاروشن تیره(a، b): رنگی با یک گونهی روشن و یک گونهی تیره.- عددها: درصد با
%یا٪، رقمهای فارسی، ویرگول فارسی،، و زاویهی فام به صورت عدد خالی بر حسب درجه یا باdeg،rad،gradیاturn.
چند نکته:
- مقدارها بررسی میشوند، نه بریده.
rgb(300, 0, 0)خطاست، نه قرمز.خطامیگوید چه انتظار میرفت و مشکل از کدام ستون شروع میشود، و اگر نامی نزدیک باشد پیشنهادش میکند. سی اس اسچیزی مینویسد که همهی مرورگرهای امروزی یکسان میکشند:#rrggbbیا#rrggbbaaدرون sRGB،color(display-p3 ...)برای رنگ پهنگسترهای که در Display P3 جا میشود، و فراتر از آنoklch(...)،currentColorوlight-dark(a, b).ای آر جی بیهر کانال را به sRGB میبُرد، پس رنگ پهنگستره در مقصد بومی با نزدیکترین رنگ sRGB کشیده میشود.cmykهمان فرمول ساده است (قرمز برابر(1 - c) * (1 - k))، بدون نمایهی چاپگر.currentرا هنگام خواندن نمیتوان آمیخت، چون رنگ متن تنها هنگام نمایش صفحه معلوم میشود.
یک رنگبندی روشن و تیره
یک پوسته از یک رنگ نشان آغاز میشود. هر نقش یک جفت روشن تیره میگیرد، روشن تر و تیره تر روشنایی را در oklch جابهجا میکنند و درون sRGB میمانند، و آمیختن هر دو گونه را با هم میآمیزد. سپس نسبت تضاد هر جفت را با نسبت ۴٫۵ که WCAG برای متن اصلی میخواهد، در حالت روشن و تیره، میسنجد.
واردسازی رابط گرافیکی.رنگ
واردسازی ریاضی
تابع r2(v: اعشار۶۴): اعشار۶۴:
برگشت ریاضی.گردکردن(v * 100.0) / 100.0
پایان
تابع check(name: رشته، text: رنگ.رنگ، back: رنگ.رنگ):
light := رنگ.نسبت تضاد(رنگ.روشن(text)، رنگ.روشن(back))
dark := رنگ.نسبت تضاد(رنگ.تیره(text)، رنگ.تیره(back))
ناپایا verdict := "ok"
اگر light کوچکتر 4.5 یا dark کوچکتر 4.5:
verdict = "too low for body text"
پایان
سرچاپ name، "light"، r2(light)، "dark"، r2(dark)، verdict
پایان
تابع ریشه:
ناپایا brand := رنگ.رنگ {}
اگر وارونه رنگ.تجزیه("#3366aa"، brand):
برگشت 1
پایان
page := رنگ.روشن تیره(رنگ.هگز(0xffffff)، رنگ.هگز(0x121212))
text := رنگ.روشن تیره(رنگ.هگز(0x1a1a1a)، رنگ.هگز(0xeeeeee))
accent := رنگ.روشن تیره(brand، رنگ.روشن تر(brand، 0.2))
muted := رنگ.آمیختن(text، page، 0.45)
hover := رنگ.روشن تیره(رنگ.تیره تر(brand، 0.08)، رنگ.روشن تر(brand، 0.28))
سرچاپ "page "، رنگ.سی اس اس(page)
سرچاپ "text "، رنگ.سی اس اس(text)
سرچاپ "accent "، رنگ.سی اس اس(accent)
سرچاپ "muted "، رنگ.سی اس اس(muted)
سرچاپ "hover "، رنگ.سی اس اس(hover)
check("text on page "، text، page)
check("accent on page"، accent، page)
check("muted on page "، muted، page)
پایانبررسی رنگی که کاربر مینویسد
صفحهی تنظیماتی که رنگ را به صورت متن میگیرد باید بگوید چه چیزی نادرست است. خطا برای رنگی که تجزیه میپذیرد رشتهی خالی برمیگرداند و در غیر این صورت یک خط با شمارهی ستون و شکل مورد انتظار، که میتوان همان را زیر فیلد نشان داد.
واردسازی رابط گرافیکی.رنگ
تابع ریشه:
inputs := ["#3366aa"، "rgb(51 102 170 / 50%)"، "hsl(210, 50%, 40%)"، "mix(red, blue, 30%)"، "rgb(300, 0, 0)"، "hsl(210 50%)"، "darkgrey"، "dark grey"، "darkgray"، "lightgreem"، "rgb(51, 102 170)"، "#12345"]
ناپایا accepted := 0
هر text در inputs:
message := رنگ.خطا(text)
اگر message برابر "":
ناپایا c := رنگ.رنگ {}
رنگ.تجزیه(text، c)
سرچاپ "ok "، text، "=>"، رنگ.سی اس اس(c)
accepted++
وگرنه:
سرچاپ "refused"، text
سرچاپ " "، message
پایان
پایان
سرچاپ accepted، "of"، inputs.طول()، "accepted"
پایانگونهها
رنگ Color
ساختار رنگlight dark میسازد. برای رنگهای بیرون از sRGB کانالها میتوانند کمتر از ۰ یا بیشتر از ۱ باشند.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| قرمز | r | اعشار۶۴ = 0 | کانال قرمز، درون sRGB از ۰ تا ۱. |
| سبز | g | اعشار۶۴ = 0 | کانال سبز، درون sRGB از ۰ تا ۱. |
| آبی | b | اعشار۶۴ = 0 | کانال آبی، درون sRGB از ۰ تا ۱. |
| آلفا | a | اعشار۶۴ = 1 | آلفا، از ۰ (شفاف) تا ۱ (کدر)، بدون پیشضرب. |
| کنونی | current | منطقی = نادرست | برای current، یعنی رنگ متن عنصر، درست است؛ آنگاه کانالها به کار نمیآیند. |
| دارای تیره | has_dark | منطقی = نادرست | وقتی رنگ گونهی تیره دارد درست است، مانند رنگی که light dark(a, b) یا روشن تیره میسازد. |
| قرمز تیره | dark_r | اعشار۶۴ = 0 | کانال قرمز گونهی تیره. به جای این فیلدها گونهی تیره را با تیره بخوانید. |
| سبز تیره | dark_g | اعشار۶۴ = 0 | کانال سبز گونهی تیره. |
| آبی تیره | dark_b | اعشار۶۴ = 0 | کانال آبی گونهی تیره. |
| آلفای تیره | dark_a | اعشار۶۴ = 1 | آلفای گونهی تیره. |
| کنونی تیره | dark_current | منطقی = نادرست | وقتی گونهی تیره current است درست است. |
واردسازی رابط گرافیکی.رنگ
تابع ریشه:
c := رنگ.آر جی بی آلفا(51، 102، 170، 0.5)
سرچاپ "r"، c.قرمز، "g"، c.سبز، "b"، c.آبی، "a"، c.آلفا، "current"، c.کنونی
wide := رنگ.تازه(1.093، -0.227، -0.15، 1.0)
سرچاپ "wide gamut red keeps channels outside 0 to 1:"، wide.قرمز، wide.سبز
سرچاپ "argb"، رنگ.ای آر جی بی(c)، "back"، رنگ.سی اس اس(رنگ.از ای آر جی بی(رنگ.ای آر جی بی(c)))
سرچاپ "argb clamps"، رنگ.ای آر جی بی(wide)
پایانتابعها
تجزیه Parse
تابع تجزیه(text: رشته، out &: رنگ): منطقیout میخواند و درست برمیگرداند. در خطا نادرست برمیگرداند و out را دست نمیزند؛ پیام را خطا میدهد.واردسازی رابط گرافیکی.رنگ
تابع ریشه:
هر text در ["#3366aa"، "rgb(51, 102, 170)"، "hsl(210, 50%, 40%)"، "oklch(0.7 0.25 30)"، "light dark(white, #222)"، "قرمز"، "rgb(51, 102)"، "redd"]:
ناپایا c := رنگ.رنگ {}
اگر رنگ.تجزیه(text، c):
سرچاپ text، "=>"، رنگ.سی اس اس(c)
وگرنه:
سرچاپ text، "=>"، رنگ.خطا(text)
پایان
پایان
پایانخطا Error
تابع خطا(text: رشته): رشتهتجزیه متن را بپذیرد رشتهی خالی برمیگرداند و در غیر این صورت پیامی که با شمارهی ستون آغاز میشود و میگوید چه انتظار میرفت. رشته مال فراخواننده است.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Parse.salam
تازه New
تابع تازه(r: اعشار۶۴، g: اعشار۶۴، b: اعشار۶۴، a: اعشار۶۴): رنگواردسازی رابط گرافیکی.رنگ
تابع ریشه:
سرچاپ رنگ.سی اس اس(رنگ.آر جی بی(51، 102، 170))
سرچاپ رنگ.سی اس اس(رنگ.آر جی بی آلفا(51، 102، 170، 0.5))
سرچاپ رنگ.سی اس اس(رنگ.هگز(0x3366aa))
سرچاپ رنگ.سی اس اس(رنگ.تازه(0.2، 0.4، 0.6، 1.0))
سرچاپ رنگ.سی اس اس(رنگ.اچ اس ال(210.0، 0.5، 0.4))
سرچاپ رنگ.سی اس اس(رنگ.اچ دبلیو بی(194.0، 0.0، 0.0))
سرچاپ رنگ.سی اس اس(رنگ.ال ای بی(29.2345، 39.3825، 20.0664))
سرچاپ رنگ.سی اس اس(رنگ.ال سی اچ(52.2345، 72.2، 56.2))
سرچاپ رنگ.سی اس اس(رنگ.اوکی ال ای بی(0.40101، 0.1147، 0.0453))
سرچاپ رنگ.سی اس اس(رنگ.اوکی ال سی اچ(0.7، 0.25، 30.0))
سرچاپ رنگ.سی اس اس(رنگ.سی ام وای کی(0.0، 0.4، 0.6، 0.1))
سرچاپ رنگ.سی اس اس(رنگ.با آلفا(رنگ.هگز(0x3366aa)، 0.25))
سرچاپ رنگ.سی اس اس(رنگ.رنگ کنونی())
پایانآر جی بی Rgb
تابع آر جی بی(r: صحیح، g: صحیح، b: صحیح): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
آر جی بی آلفا Rgba
تابع آر جی بی آلفا(r: صحیح، g: صحیح، b: صحیح، a: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
هگز Hex
تابع هگز(v: صحیح): رنگ0xrrggbb میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
از ای آر جی بی FromArgb
تابع از ای آر جی بی(v: طبیعی۳۲): رنگ0xAARRGGBB با آلفای ساده (بدون پیشضرب) میسازد.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Fields.salam
ای آر جی بی Argb
تابع ای آر جی بی(c: رنگ): طبیعی۳۲0xAARRGGBB با آلفای ساده فشرده میکند و هر کانال را به sRGB میبُرد. برای رنگ روشن تیره گونهی روشن و برای current صفر میدهد.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Fields.salam
اچ اس ال Hsl
تابع اچ اس ال(h: اعشار۶۴، s: اعشار۶۴، l: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
اچ دبلیو بی Hwb
تابع اچ دبلیو بی(h: اعشار۶۴، w: اعشار۶۴، b: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
ال ای بی Lab
تابع ال ای بی(l: اعشار۶۴، a: اعشار۶۴، b: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
ال سی اچ Lch
تابع ال سی اچ(l: اعشار۶۴، c: اعشار۶۴، h: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
اوکی ال ای بی Oklab
تابع اوکی ال ای بی(l: اعشار۶۴، a: اعشار۶۴، b: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
اوکی ال سی اچ Oklch
تابع اوکی ال سی اچ(l: اعشار۶۴، c: اعشار۶۴، h: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
سی ام وای کی Cmyk
تابع سی ام وای کی(c: اعشار۶۴، m: اعشار۶۴، y: اعشار۶۴، k: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
با آلفا WithAlpha
تابع با آلفا(c: رنگ، a: اعشار۶۴): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
رنگ کنونی Current
تابع رنگ کنونی(): رنگcurrent را برمیگرداند، یعنی رنگ متن عنصر که نمایشگر آن را پر میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Build.salam
روشن تیره LightDark
تابع روشن تیره(light: رنگ، dark: رنگ): رنگواردسازی رابط گرافیکی.رنگ
تابع ریشه:
c := رنگ.روشن تیره(رنگ.هگز(0x3366aa)، رنگ.آر جی بی(200، 220، 255))
سرچاپ رنگ.سی اس اس(c)، رنگ.تیره دارد(c)، رنگ.تیره دارد(رنگ.هگز(0x3366aa))
سرچاپ "light"، رنگ.سی اس اس(رنگ.روشن(c))، "dark"، رنگ.سی اس اس(رنگ.تیره(c))
سرچاپ "fields"، c.دارای تیره، c.قرمز تیره، c.سبز تیره، c.آبی تیره، c.آلفای تیره، c.کنونی تیره
ناپایا t := رنگ.رنگ {}
اگر رنگ.تجزیه("light dark(current, white)"، t):
سرچاپ رنگ.سی اس اس(t)، t.کنونی، t.کنونی تیره
پایان
سرچاپ "mix keeps both"، رنگ.سی اس اس(رنگ.آمیختن(c، رنگ.هگز(0xffffff)، 0.5))
پایانروشن Light
تابع روشن(c: رنگ): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-LightDark.salam
تیره Dark
تابع تیره(c: رنگ): رنگنمونهی این مورد همراه با موارد بالاتر آمده است: color-LightDark.salam
تیره دارد HasDark
تابع تیره دارد(c: رنگ): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: color-LightDark.salam
سی اس اس Css
تابع سی اس اس(c: رنگ): رشته#rrggbb یا #rrggbbaa درون sRGB، color(display-p3 ...) یا oklch(...) بیرون از آن، currentColor یا light-dark(a, b). رشته مال فراخواننده است.واردسازی رابط گرافیکی.رنگ
تابع show(text: رشته):
ناپایا c := رنگ.رنگ {}
اگر رنگ.تجزیه(text، c):
سرچاپ text
سرچاپ " css "، رنگ.سی اس اس(c)
سرچاپ " source"، رنگ.کد سلام(c)
سرچاپ " in sRGB"، رنگ.درون گستره(c)، "same as #f00"، رنگ.یکسان(c، رنگ.هگز(0xff0000))
پایان
پایان
تابع ریشه:
show("red")
show("rgba(0, 0, 0, 0.25)")
show("color(display p3, 1, 0, 0)")
show("color(rec2020, 1, 0, 0)")
show("current")
پایانکد سلام Source
تابع کد سلام(c: رنگ): رشتهcolor.Rgb(51, 102, 170)، برمیگرداند که همان رنگ را بیتجزیه میسازد. رشته مال فراخواننده است.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Css.salam
آمیختن Mix
تابع آمیختن(a: رنگ، b: رنگ، amount: اعشار۶۴): رنگamount سهم b است و به ۰ تا ۱ بریده میشود. رنگهای روشن تیره هر گونه را جدا میآمیزند.واردسازی رابط گرافیکی.رنگ
تابع ریشه:
red := رنگ.هگز(0xff0000)
blue := رنگ.هگز(0x0000ff)
سرچاپ "Mix 30%"، رنگ.سی اس اس(رنگ.آمیختن(red، blue، 0.3))
هر space در ["oklab"، "oklch"، "srgb"، "hsl"]:
سرچاپ "MixIn"، space، رنگ.سی اس اس(رنگ.آمیختن با فضا(red، blue، 0.5، space))
پایان
clear := رنگ.آر جی بی آلفا(255، 0، 0، 0.0)
تکرار 5 در i:
t := i برگردان اعشار۶۴ / 4.0
سرچاپ "Lerp"، t، رنگ.سی اس اس(رنگ.درون یابی(clear، blue، t))
پایان
پایانآمیختن با فضا MixIn
تابع آمیختن با فضا(a: رنگ، b: رنگ، amount: اعشار۶۴، space: رشته): رنگآمیختن، در فضای رنگی که space نام میبرد (oklab، oklch، lab، lch، srgb، srgb linear، hsl، hwb، display p3، a98 rgb، prophoto rgb، rec2020، xyz، xyz d50، xyz d65). فامها کمان کوتاهتر را میروند. نام ناشناخته در oklab میآمیزد.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Mix.salam
درون یابی Lerp
تابع درون یابی(a: رنگ، b: رنگ، t: اعشار۶۴): رنگa به b در oklab با آلفای پیشضربشده درونیابی میکند. t بریده نمیشود، پس منحنی نرمش میتواند از اندازه بگذرد. با current در میانه عوض میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Mix.salam
درخشندگی Luminance
تابع درخشندگی(c: رنگ): اعشار۶۴واردسازی رابط گرافیکی.رنگ
واردسازی ریاضی
تابع r2(v: اعشار۶۴): اعشار۶۴:
برگشت ریاضی.گردکردن(v * 100.0) / 100.0
پایان
تابع ریشه:
white := رنگ.هگز(0xffffff)
هر hex در [0x777777، 0x3366aa، 0x1a1a1a]:
c := رنگ.هگز(hex)
سرچاپ رنگ.سی اس اس(c)، "luminance"، r2(رنگ.درخشندگی(c))، "contrast on white"، r2(رنگ.نسبت تضاد(c، white))
پایان
base := رنگ.هگز(0x3366aa)
سرچاپ "lighter"، رنگ.سی اس اس(رنگ.روشن تر(base، 0.1))، "darker"، رنگ.سی اس اس(رنگ.تیره تر(base، 0.1))
پایاننسبت تضاد Contrast
تابع نسبت تضاد(a: رنگ، b: رنگ): اعشار۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: color-Contrast.salam
روشن تر Lighten
تابع روشن تر(c: رنگ، amount: اعشار۶۴): رنگamount (۰ تا ۱) بالا میبرد. رنگی که درون sRGB است در صورت نیاز از کروما میکاهد تا درون آن بماند.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Contrast.salam
تیره تر Darken
تابع تیره تر(c: رنگ، amount: اعشار۶۴): رنگamount پایین میآورد، مانند روشن تر در جهت دیگر.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Contrast.salam
درون گستره InGamut
تابع درون گستره(c: رنگ): منطقیسی اس اس آن را به صورت هگز بنویسد.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Css.salam
یکسان Equal
تابع یکسان(a: رنگ، b: رنگ): منطقیcurrent و هر دو گونه.نمونهی این مورد همراه با موارد بالاتر آمده است: color-Css.salam