چطور با OKLCH و color-mix در CSS، کدهای رنگی هوشمندتر بنویسیم و حجم پروژه رو کم کنیم؟
سلام به همه کادولوپریهای عزیز!
به عنوان یک فرانتاند دولوپر، حتماً برای شما هم پیش اومده که در پروژههای بزرگ با انبوهی از متغیرهای رنگی برای حالتهای مختلف مثل Hover، Active یا Disabled سردرگم شید. تعریف کردن دهها کد Hex یا HSL نه تنها فایلهای CSS ما رو شلوغ و شلخته میکنه، بلکه مدیریت اونها در آینده رو هم سخت میکنه.
امروز میخوایم با هم بررسی کنیم که چطور فضای رنگی مدرن OKLCH به همراه تابع فوقالعاده کاربردی color-mix در CSS، میتونن این مشکل رو به راحتی حل کنن و حتی حجم باندل (Bundle Size) پروژههای بزرگمون رو پایین بیارن.
خب، اول بریم بررسی کنیم OKLCH چیه؟
فضای رنگی OKLCH یک روش جدید و بهشدت جذاب برای تعریف رنگ در CSS هستش که دقیقاً بر اساس درک چشم انسان از رنگها طراحی شده. این متد از ۴ مؤلفه تشکیل شده:
-
Lightness (L): میزان روشنایی رنگ رو مشخص میکنه (از 0% تا 100%).
-
Chroma (C): میزان خلوص، زنده بودن یا شدت رنگ هستش. مثلاً رنگ قرمزِ جیغ Chroma بالایی داره. هرچی Chroma رو کمتر کنیم، رنگمون کدرتر و به خاکستری نزدیکتر میشه.
-
Hue (H): زاویه رنگ روی چرخه رنگ میشه؛ یک عدد بین 0 تا 360 درجه که خودِ رنگ (قرمز، آبی، سبز و...) رو تعیین میکنه.
-
Alpha (A): همون میزان شفافیت یا transparency هستش (بین 0 تا 1 یا به صورت درصد).
یک نکته خیلی جالب: در OKLCH، این مؤلفهها به شکل هوشمندانهای به هم متصل هستن؛ یعنی با تغییر یکی، بقیه هم طوری تغییر میکنن که رنگ در دنیای واقعی کاملاً طبیعی و چشمنواز به نظر برسن. پیشنهاد میکنم حتماً به سایت oklch.com سر بزنید و خودتون اهرمهای مختلف رو جا به جا کنید تا بیشتر این مبحث رو درک کنید!
داستان واقعی: از طرح دیزاینر تا دکمههای Hover
تصور کنید طراح پروژه، یک رنگ اصلی (Primary Color) به شما داده که قراره در دکمهها و لینکها ازش استفاده کنید. خب، این المانها قطعاً به حالت Hover (وقتی موس روی اونها میره) نیاز دارن.
یک راه این هستش که رنگ اصلی رو در سایت oklch.com وارد کنید و فقط با کم و زیاد کردن بخش Lightness (روشنایی)، خیلی راحت نسخههای تاریکتر یا روشنترِ همون رنگ رو برای Hover بسازید.
راه دوم که پیشنهاد میشه افزونه OKLChanger در VS Code هست:
برای اینکه مدام بین مرورگر و ادیتور جابجا نشید:
۱. افزونه OKLChanger رو در VS Code نصب کنید.
۲. در فایل استایل خود (مثلاً global.css در پروژههای Next.js) رنگ Hex خودتون رو بنویسید:
:root {
--color-primary: #3b82f6;
}
۳. کد رنگ رو با موس انتخاب کنید و کلیدهای Ctrl+Shift+P (در مک Cmd+Shift+P) رو بزنید.
۴. عبارت OKLChanger رو سرچ و اینتر کنید تا رنگ شما به فرمت OKLCH تبدیل بشه. به همین راحتی!
قسمت اصلی: ترکیب OKLCH با تابع color-mix
حالا چطور با این کار حجم باندل پروژه رو کم کنیم؟ جواب ساده است: با کمک تابع color-mix در CSS. با این فانکشن دیگه نیازی نیست برای هر حالت Hover یک متغیر رنگی جدید تعریف کنید؛ بلکه همهچیز رو به صورت داینامیک در خودِ مرورگر ترکیب میکنید!
به این کد نگاه کنید:
:root {
--color-primary: oklch(0.63 0.25 258.2); /* رنگ اصلی */
/* ساخت رنگ به صورت داینامیک */
--primary-hover: color-mix(in oklch, var(--color-primary), black 7%);
}
فرمولش خیلی ساده است: color-mix(فضای رنگی, رنگ اصلی شما, رنگی که میخواهید با آن مخلوط شود + درصد آن)
در مثال بالا، ما به مرورگر گفتیم: «در فضای رنگی oklch، رنگ اصلی ما رو با ۷٪ رنگ مشکی ترکیب کن». نتیجه؟ یک رنگ تیره تر و اصولی برای حالت Hover، بدون اینکه خط کد اضافی بنویسیم یا کلی متغیر جدید بسازیم. این یعنی کد کمتر، فایل خلوتتر و در نتیجه کاهش حجم باندل!
یک ایده برای خلاقیت: شما مجبور نیستید فقط از سیاه و سفید برای ترکیب استفاده کنید! در پروژههای شخصی یا کارهای خلاقانه میتونید رنگ اصلیتون رو با رنگهای دیگر (مثلاً کمی زرد یا آبی) ترکیب کنید تا افکتهای جدیدی خلق کنید؛ البته در پروژههای رسمی شرکتی بهتره خیلی ریسک نکنید و به همون تیره و روشن کردن بسنده کنید.
خبر خوب: سازگاری کامل با Tailwind CSS!
خبر خوب اینه که این روش کاملاً با Tailwind سازگاره!
بهخصوص در نسخههای جدید تیلوند، شما میتونید خیلی راحت این متغیرها رو توی دایرکتیو @theme معرفی کنید تا کلاسهای داینامیکی مثل bg-primary و hover:bg-primary-hover رو در اختیارتون بذاره:
@theme {
--color-primary: var(--color-primary);
--color-primary-hover: var(--primary-hover);
}
با این کار، تیلوند به طور خودکار متغیرهای بومی CSS شما رو میشناسه و بدون هیچ پکیج یا ابزار اضافی، قدرت OKLCH و color-mix رو مستقیم وارد کامپوننتهاتون میکنه.
جمعبندی
استفاده از OKLCH و color-mix دست شما رو برای نوشتن کدهای CSS تمیزتر، هوشمندتر و بهینهتر باز میذاره. با این روش، تغییر تم (Theme) سایت در آینده هم خیلی راحت میشه و دیگه نیازی به تعریف کردن چندین رنگ تکراری ندارید.
شما تا حالا از این قابلیتهای مدرن CSS در پروژههاتون استفاده کردید؟ تجربه یا سوالی دارید؟ در بخش کامنتها منتظرتون هستیم!