
خلاصه سریع: آیا میدانستید که پالت رنگی انتخابی شما میتواند بر میزان مصرف انرژی وبسایت شما تأثیر بگذارد؟ حتی انتخاب رنگهای سازگارتر با محیط، میتواند میزان تأثیر روی عمر باتری دستگاههای تلفن همراه را کاهش دهد. در این مقاله، میشل بارکر (Michelle Barker) در مورد چیزهای نه چندان واضحی که امروزه هنگام استفاده از رنگها در CSS باید در نظر داشته باشید، توصیههایی را به اشتراک میگذارد.
رنگها در وب، بیشتر از آن هستند که به نظر میرسد و قرار است بسیار جالبتر شود! در این مقاله، به بهترین روشهای استفاده از رنگها در یک سیستم طراحی، و آنچه میتوانیم از رنگهای خود در آینده انتظار داشته باشیم، نگاهی میاندازیم.
ارزشهای رنگ شناخته شده
راههای مختلفی برای تعریف رنگها در CSS وجود دارد. رنگهای دارای نام در CSS، یکی از سادهترین راهها برای دادن رنگ به یک المان هستند:
این رنگها بسیار محدود هستند و به ندرت با طرحهایی که میسازیم مطابقت دارند! همچنین میتوانیم از مقادیر هگزادسیمال (hexadecimal) استفاده کنیم. کد زیر به المان مورد نظر ما (المان با کلاس my-element)، پسزمینه قرمز میدهد:
شما باید یک متخصص رنگ باشید، در غیر این صورت، خواندن مقادیر هگز بسیار دشوار است. بعید است که بتوانید رنگ یک المان را با خواندن مقدار هگزادسیمال حدس بزنید. هنگام ساخت یک وبسایت، ممکن است یک مقدار رنگ هگزادسیمال توسط طراح به ما داده شود. اما اگر از ما بخواهند که آن را با تنظیم مقدار هگزادسیمال، 20 درصد تیرهتر کنیم، بدون راهنمای تصویری یا کالرپیکر (انتخابگر رنگ)، بهسختی این کار را انجام خواهیم داد.
RGB
نمادگذاری RGB (قرمز، سبز، آبی) روشی جایگزین برای نوشتن رنگها است، که به ما امکان دسترسی به همان محدوده رنگها را با مقادیر هگزا، به شکلی بسیار خواناتر میدهد. ما یک تابع rgb()
در CSS برای این کارداریم. رنگها در وب اضافی یا ادیتیو هستند، به این معنی که هر چه نسبت قرمز، سبز و آبی بیشتر باشد، رنگ حاصل روشنتر خواهد بود. اگر فقط از کانال قرمز استفاده کنیم، نتیجه قرمز است:
با تنظیم کانالهای قرمز، سبز و آبی روی بالاترین مقدار، رنگ سفید ایجاد میشود:
همچنین میتوانیم با استفاده از فانکشن rgba()
، یک کانال آلفا (برای شفافیت) اضافه کنیم:
فانکشنهای rgb()
و rgba()
به ما این امکان را میدهند که رنگها را در کد ترکیب کنیم، اما نتایج میتواند تا حدودی غیرقابلپیشبینی باشد.
HSL
اخیراً، توانایی استفاده از مقادیر HSL (رنگ یا hue، اشباع یا saturation، روشنایی یا lightness) با فانکشن رنگی hsl()
و hsla()
را داریم. بهعنوان یک توسعهدهنده، وقتی صحبت از تنظیم مقادیر رنگ به میان میآید، این موارد بسیار شهودیتر هستند. برای مثال، میتوانیم با تنظیم پارامتر روشنایی، انواع تیرهتر و روشنتر از یک رنگ را دریافت کنیم:

پارامتر hue موقعیت روی یک چرخ رنگ را نشان میدهد و میتواند هر مقداری بین 0 تا 360 درجه باشد. همچنین این فانکشن واحدهای چرخشی (بهعنوانمثال 0.5 دور) و مقادیر بدون واحد را میپذیرد.
موارد زیر، همگی معتبر هستند:
نکته: نگهداشتن SHIFT و کلیک کردن روی نمونه رنگ در اینسپکتر کروم و ابزار توسعه فایرفاکس، مقدار رنگ را بین هگز، RGB و HSL تغییر میدهد!
همانطور که بهزودی خواهیم دید، hsl() و hsla() به خوبی با ویژگیهای سفارشی دستکاری میشوند.
currentColor
کلمه کلیدی currentColor برای تنظیم یک رنگ روی المنتی که وجود داشته است، به کار میرود. به ما این امکان را میدهد تا از رنگ فعلی متن یک المنت، بهعنوان یک متغیر استفاده کنیم. در مقایسه با ویژگیهای سفارشی بسیار محدود است، اما اغلب برای تنظیم پرکردن رنگ آیکونهای SVG استفاده میشود، تا اطمینان یابیم که با رنگ متن اصلی خود، مطابقت دارند.
سینتکس رنگ مدرن
ماژول رنگی CSS لول 4، سینتکس راحتتری را برای فانکشنهای رنگی در اختیار ما قرار میدهد، که بهطور گسترده در مرورگرها پشتیبانی میشود. ما دیگر نیازی به جدا کردن مقادیر با کاما نداریم و فانکشنهای rgb()
و hsl()
میتوانند یک پارامتر آلفای اختیاری داشته باشند، که با یک فوروارد اسلش از هم جدا شوند:
توابع رنگی جدید CSS
HWB
HWB مخفف رنگ (hue)، سفیدی (whiteness) و سیاهی (blackness) است. مانند HSL، رنگ میتواند هرجایی در محدوده 0 تا 360 باشد. دو آرگومان دیگر، میزان رنگ سفید یا سیاه را تا 100٪ کنترل میکنند (که منجر به یک رنگ کاملاً سفید یا کاملاً سیاه میشود). اگر مقادیر مساوی سفید و سیاه باهم میکس شوند، رنگ حاصل، خاکستری است. ما میتوانیم این را شبیه به ترکیب کردن رنگ در نظر بگیریم، که برای ایجاد پالتهای رنگی تکرنگ، مفید است.

با این نسخهی نمایشی، آن را امتحان کنید (فقط در سافاری کار میکند):
کد HTML:
کد SCSS:
کد JS:
LAB
LAB و LCH بهعنوان رنگهای مستقل از دستگاه تعریف شدهاند. LAB یک فضای رنگی است که در نرمافزارهایی مانند فتوشاپ قابلدسترسی است، و هنگامی توصیه میشود که میخواهید یک رنگ، روی صفحه همان رنگی باشد. LAB از سه محور استفاده میکند: روشنایی (lightness) که به دنبال آن محور a (سبز به قرمز) و محور b (آبی به زرد) میآید.
روشنایی مانند HSL، بهعنوان یک درصد بیان میشود، اما زمانی که با فانکشن رنگ ()lab استفاده میشود، میتواند از 100٪ فراتر رود. سفیدهای بسیار روشن میتوانند تا 400 درصد استفاده کنند. مقادیر برای محورهای a و b میتوانند از مثبت تا منفی متغیر باشند. دو مقدار منفی منجر به طیف رنگی سبز/آبی طیف میشوند، درحالیکه دو مقدار مثبت میتوانند رنگ نارنجی/قرمز بیشتری ایجاد کنند.

کد HTML:
کد SCSS:
کد JS:
LCH
LCH مخفف lightness، chroma و hue است. مانند LAB، درصد روشنایی میتواند بیش از 100 باشد. مشابه HSL، رنگ یا hue میتواند محدودهای بین 0 تا 360 باشد. کروما میزان رنگ را نشان میدهد، و ما میتوانیم آن را شبیه به اشباع در HSL در نظر بگیریم. اما chroma میتواند از 100 تجاوز کند و درواقع، از نظر تئوری نامحدود است. مثال استفاده:
بااینحال، محدودیتی در تعداد رنگهایی که مرورگرها و مانیتورهای امروزی میتوانند نمایش دهند وجود دارد (بهزودی در مورد آن بیشتر توضیح خواهیم داد)، بنابراین بعید است مقادیر بالای 230، تفاوتی ایجاد کنند و Chroma تا زمانی که در رنج قرار نگیرد، کاهش مییابد.

چرا باوجود HSL، به LAB و LCH نیاز داریم؟ یک دلیل این است که استفاده از LAB یا LCH به ما امکان دسترسی به طیف وسیعتری از رنگها را میدهد. LCH و LAB طوری طراحی شدهاند که به ما امکان دسترسی بهکل طیف بینایی انسان را میدهند. علاوه بر این، HSL و RGB دارای چند کاستی هستند: آنها از نظر ادراکی یکنواخت نیستند و در HSL، افزایش یا کاهش روشنایی، بسته به رنگ، تأثیر کاملاً متفاوتی دارد.
با استفاده از کد زیر، میتوانیم با زدن کلید سیاه و سفید، تضاد فاحشی بین LCH و HSL مشاهده کنیم. برای رنگ HSL و نوارهای اشباع، تفاوتهای واضحی در روشنایی هر مربع وجود دارد، حتی اگر مؤلفه روشنایی یا لایتنس فانکشن HSL یکسان باشد! در همین حال، نوارهای رنگی کروما در سمت LCH، دارای روشنایی ادراکی تقریباً یکنواختی هستند.
کد HTML:
کد SCSS:
کد JS:

همچنین میتوانیم تفاوت بزرگی را هنگام استفاده از رنگ LCH برای گرادیان مشاهده کنیم. هردوی این گرادیانها با یک رنگ شروع و پایان مییابند (با استفاده از این مبدل مقادیر LCH به معادلهای HSL تبدیل میشوند). اما گرادیان LCH از میان سایههای آبی و بنفش عبور میکند، درحالیکه گرادیان HSL، گلآلودتر به نظر میرسد.
کد HTML:
کد CSS:

با آنکه LAB و LCH شاید از لحاظ سینتکسی، وضوح کمتری داشته باشند، بهگونهای رفتار میکنند که برای چشم انسان منطقیتر باشد. مانند سایر فانکشنهای رنگی، hwb() و lab() و lch() نیز میتوانند یک پارامتر آلفا اختیاری داشته باشند.
پشتیبانی مرورگر و فضاهای رنگی
hwb()
و lab()
و lch()
فقط در سافاری پشتیبانی میشوند، اما میتوان با تعریف یک فالبک برای مرورگرهای غیر پشتیبانی، از آنها استفاده کرد. مرورگرهایی که از فانکشن رنگ پشتیبانی نمیکنند، قانون دوم را نادیده میگیرند:
اگر استایل های دیگر به پشتیبانی از فانکشن های رنگ جدیدتر بستگی داشته باشند، میتوانیم از یک فیچر کوئری استفاده کنیم:
اگرچه صفحه نمایشهای مدرن قادر به نمایش رنگهایی فراتر از RGB هستند، اکثر مرورگرها در حال حاضر فقط از رنگها در فضای رنگی sRGB پشتیبانی میکنند. در نسخهی نمایشی رنگ LAB ممکن است متوجه شوید که حرکت دادن اسلایدرها فراتر از یک نقطه خاص، تأثیری روی رنگ نمیگذارد. استفاده از مقادیر خارج از محدوده sRGB تنها زمانی تأثیر خواهد داشت که سختافزار و مرورگرها بهاندازه کافی پیشرفت کنند.
اکنون سافاری از فانکشن color()
پشتیبانی میکند، که ما را قادر میسازد رنگها را در فضای P3 نمایش دهیم، اما در حال حاضر به رنگهای RGB محدود شدهاند و همه مزایای LAB و LCH را به ما نمیدهند.
دسترسیپذیری
هنگامیکه آنها بهطور گسترده پشتیبانی میشوند، شاید LAB و LCH بتوانند به ما در انتخاب ترکیبهای رنگی در دسترستر، کمک کنند. تا زمانی که مقدار روشنایی آنها ثابت بماند، متن پیشزمینه (فورگراند) باید نسبت کنتراست یکسانی با رنگهای پسزمینه (بکگراند)، مقادیر متفاوت کروم یا hue داشته باشد.
مدیریت رنگ
طیف وسیعتری از فانکشنهای رنگ، به این معنی است که ما گزینههای بیشتری در مورد مدیریت رنگها در برنامه خود داریم. ما به چندین نوع از یک رنگ معین، از تیره تا روشن، در سیستم طراحی خود نیاز داریم.
ویژگیهای سفارشی
ویژگیهای سفارشی CSS به ما امکان میدهد مقادیر را برای استفاده مجدد در شیوهنامههای خود ذخیره کنیم. ازآنجاییکه آنها مقادیر جزئی ویژگی را مجاز میکنند، میتوانند برای مدیریت و دستکاری مقادیر رنگ، مفید باشند. HSL به دلیل شهودی بودن یعنی وضوع بالا، مناسب ویژگیهای سفارشی است. در کد قبلی، از آنها برای تنظیم رنگ در هر بخش از نوار رنگ، با محاسبه یک مقدار hue بر اساس شاخص المنت، استفاده کردیم.
همچنین میتوانیم کارهایی مانند محاسبه رنگهای مکمل (رنگها از دو طرف چرخه رنگ) انجام دهیم. مطالب زیادی در این مورد نوشتهشده است، بنابراین در اینجا به موضوعات قدیمی نمیپردازیم، اما اگر کنجکاو هستید، مقاله سارا سویدان در مورد مدیریت رنگ با HSL، برای شروع عالی است.
مهاجرت از HEX/RGB به HSL
رنگهای RGB ممکن است تا حدی نیازهای شما را برآورده کنند، اما اگر به انعطافپذیری نیاز دارید تا بتوانید سایههای جدیدی را از پالت رنگ پایه خود استخراج کنید، بهتر است به HSL (یا LCH، پس از پشتیبانی) سوئیچ کنید. توصیه میکنیم برای این کار از ویژگیهای سفارشی استفاده کنید.
شاید شما رنگهایی را به عنوان متغیرهای Sass ذخیره کرده باشید:
هنگام تبدیل به HSL، میتوانیم ویژگیهای سفارشی را برای مقادیر رنگ، اشباع و روشنایی اختصاص دهیم. این باعث میشود که بهراحتی بتوان انواع تیره یا روشنتر و پررنگی رنگ اصلی را ایجاد کرد.
همانطور که آدام آرگیل در مقاله ساخت طرح رنگی توضیح داده است، HSL میتواند برای ایجاد طرحهای رنگی، فوقالعاده مفید باشد. او در مقاله خود، طرحهای رنگی روشن، تیره و کمنور را ایجاد میکند و از یک رنگ برند بهعنوان پایه استفاده میکند. روش دوست داشتنی است، زیرا امکان کنترل دقیق بر روی نوع رنگ را فراهم میکند (بهعنوانمثال، کاهش اشباع رنگها در طرح تاریک)، اما همچنان مزیت بزرگ ویژگیهای سفارشی را حفظ میکند: بهروزرسانی رنگ برند تنها در یک مکان، برای همه طرحهای رنگی انجام میشود، بنابراین میتواند باعث صرفهجویی در کار شود.
فانکشن های رنگ Sass
وقتی صحبت از ترکیب و تنظیم رنگها به میان میآید، Sass، فانکشنهای رنگی را ارائه میدهد تا بتوانیم این کار را سالها انجام دهیم. میتوانیم رنگها را اشباع یا غیراشباع، روشن یا تیره و حتی دو رنگ را باهم ترکیب کنیم. اینها در برخی موارد عالی عمل میکنند، اما محدودیتهایی نیز دارند: اولاً، فقط میتوانیم از آنها در زمان کامپایل استفاده کنیم، و برای دستکاری رنگهای زنده در مرورگر، کاربردی ندارد. ثانیاً، آنها به RGB و HSL محدود میشوند، بنابراین از همان مسائل یکنواختی ادراکی رنج میبرند. همانطور که در این نسخه نمایشی میبینیم، جایی که یک رنگ بهطور فزایندهای غیراشباع شده، وقتی به مقیاس خاکستری تبدیل میشود، روشنتر به نظر میرسد.

برای اطمینان از اینکه روشنایی، یکنواخت باقی میماند، میتوانیم از ویژگیهای سفارشی با LCH به روشی مشابه HSL بالا استفاده کنیم.
ترکیب و تغییر رنگ
ترکیب رنگ
CSS هنوز به ما اجازه نمیدهد که رنگها را در مرورگر ترکیب کنیم. همهچیز در حال تغییر است: مشخصات رنگ لول 5 CSS (درافت کاری)، حاوی پیشنهادانی برای فانکشن های ترکیب رنگ است، که نسبتاً امیدوارکننده به نظر میرسد. اولین مورد، فانکشن color-mix()
است که دو رنگ را بسیار شبیه فانکشن mix()
سَس ترکیب میکند. اما color-mix()
در CSS به ما امکان میدهد یک فضای رنگی را مشخص کنیم، و بهطور پیشفرض از LCH استفاده میکند، که درنتیجه میکس بهتری دارد.
فانکشنهای color-mix()
و color-contrast()
در حال حاضر بوسیله یک فلگ در سافاری 15 پشتیبانی میشوند.
زمانی که رنگها بهعنوان آرگومان ارسال میشود، نباید LCH باشند، اما تناسب (interpolation) از فضای رنگی مشخصشده استفاده میکند. میتوانیم مشخص کنیم که چه مقدار از هر رنگ باید شبیه به استاپهای گرادیان، ترکیب شوند:
کنتراست رنگ و دسترسیپذیری
color-contrast()، یکی دیگر از فانکشنهای پیشنهادی است که واقعاً پیامدهای زیادی برای انتخاب رنگهای در دسترس دارد. درواقع، با در نظر گرفتن قابلیت دسترسیپذیری، طراحیشده است. این فانکشن به مرورگر اجازه میدهد تا با مقایسه آن با رنگ دیگر، مناسبترین مقدار را از فهرست انتخاب کند. ما حتی میتوانیم نسبت کنتراست موردنظر را مشخص کنیم، تا مطمئن شویم که طرحهای رنگی ما مطابق دستورالعملهای WCAG هستند. رنگها از چپ به راست ارزیابی میشوند و مرورگر اولین رنگی را از لیست انتخاب میکند که نسبت موردنظر را برآورده میکند. اگر هیچ رنگی با این نسبت مطابقت نداشته باشد، رنگ انتخابی، رنگی خواهد بود که بیشترین کنتراست را دارد.
از آنجایی که در حال حاضر در هیچ مرورگر پشتیبانی نمیشود، این مثال را مستقیماً از مشخصات قرض گرفتیم. هنگامیکه مرورگر عبارت را ارزیابی میکند، رنگ حاصل سبز تیره خواهد بود، زیرا اولین رنگی است که نسبت کنتراست AA را در مقایسه با رنگ متن، برآورده میکند.
پشتیبانی مرورگر
مشخصات رنگ لول 5 در حال حاضر در پیشنویس کار است، به این معنی که هیچ مرورگری هنوز ازفانکشنهای color-contrast()
و color-mix()
پشتیبانی نمیکند و سینتکس آنها در معرض تغییر است. اما مطمئناً آینده روشنی برای رنگ در وب، به نظر میرسد!
تأثیر رنگها بر محیط
آیا میدانستید که پالت رنگی انتخابی شما میتواند بر میزان مصرف انرژی وبسایت شما تأثیر بگذارد؟ در صفحهنمایشهای OLED (که بیشتر تلویزیونها و لپتاپهای مدرن را تشکیل میدهند)، رنگهای تیرهتر انرژی کمتری نسبت به رنگهای روشن مصرف میکنند. رنگ سفید، بیشترین مصرف انرژی و رنگ سیاه، کمترین میزان مصرف را دارد. به گفته تام گرینوود، نویسنده Sustainable Web Design، آبی نیز انرژی بیشتری نسبت به رنگهای قرمز و سبز دارد. برای کاهش اثرات زیستمحیطی اپلیکیشنهای خود، رنگ تیرهتر را در نظر بگیرید، از آبی کمتر استفاده کنید، یا گزینه حالت تاریک را برای کاربران خود فعال کنید. بهعنوان یک امتیاز اضافی، انتخاب رنگهای سازگار با محیطزیست نیز میتواند میزان تأثیر روی عمر باتری دستگاههای تلفن همراه را، کاهش دهد.

دیدگاهها
ثبت دیدگاه