HSL color model
(hue, saturation, lightness) डेवलपर्स को CSS में रंगों के साथ काम करने का एक ऐसा तरीका देता है जो RGB की तुलना में कहीं अधिक समझने योग्य है। RGB में आपको अंदाज़ा लगाना पड़ता है कि red, green और blue के किस combination से मनचाहा रंग बनेगा, लेकिन HSL आपको रंग उसी तरह describe करने देता है जैसे आपका दिमाग सोचता है: पहले रंग चुनें, फिर तय करें कि वह कितना गहरा हो, और फिर यह कि वह कितना हल्का या गहरा दिखे। यही वजह है कि बहुत से डेवलपर्स अब
rgb()
छोड़कर
hsl()
की तरफ जा रहे हैं।
विषय सूची
RGB बनाम HSL - मूल अंतर
RGB तीन light channels को मिलाकर रंग बनाता है: red, green और blue, जिनमें से हर एक की value 0 से 255 के बीच होती है। समस्या यह है कि यह तरीका स्क्रीन के pixels रेंडर करने का तरीका है, न कि इंसान के रंग देखने का। अगर आपको RGB में थोड़ा हल्का नीला चाहिए, तो तीनों channels को सही अनुपात में बढ़ाना होगा - कोई एक अकेला नॉब नहीं है जिसे घुमाया जा सके।
HSL सीधे उस तरीके से मेल खाता है जिसमें लोग रंगों के बारे में बात करते हैं:
- Hue - असल रंग, जिसे 360-डिग्री के color wheel पर एक डिग्री के रूप में दर्शाया जाता है। Red 0 पर है, green 120 पर, और blue 240 पर।
- Saturation - रंग कितना गहरा या फीका है, 0% (शुद्ध ग्रे) से लेकर 100% (पूरी तरह गहरा) तक।
- Lightness - रंग कितना हल्का या गहरा है, 0% (काला) से 100% (सफेद) तक, जहाँ 50% "शुद्ध" रंग माना जाता है।
यहाँ एक ही medium blue को दोनों formats में देखें:
/* RGB - what do these numbers even mean at a glance? */
color: rgb(70, 130, 180);
/* HSL - instantly readable: blue hue, moderate saturation, medium lightness */
color: hsl(207, 44%, 49%);
दोनों steel blue रंग देते हैं। लेकिन केवल HSL वाला version एक नज़र में कुछ उपयोगी बताता है। Hue 207 है (नीला-सा), saturation 44% के साथ मध्यम है, और lightness 49% पर बीच में है। बिना color picker खोले भी आप इसे समझ सकते हैं।
| विशेषता | RGB | HSL |
|---|---|---|
| मनुष्य द्वारा पठनीय | शायद ही कभी | हाँ |
| रंग को हल्का/गहरा करना | तीनों values बदलें | केवल lightness बदलें |
| Saturation बदलना | तीनों फिर से कैलकुलेट करें | केवल saturation बदलें |
| Color palette बनाना | Trial और error | Hue को डिग्री में घुमाएं |
| CSS variables के साथ थीमिंग | जटिल और लंबा | साफ और अनुमानित |
CSS में HSL का सिंटैक्स
CSS का
hsl()
फ़ंक्शन CSS3 से सपोर्टेड है। आधुनिक सिंटैक्स (CSS Color Level 4) अब सीधे
hsl()
के अंदर चौथा alpha parameter भी देता है, जिससे
hsla()
अब काफी हद तक अनावश्यक हो गया है:
/* Classic syntax */
color: hsl(207, 44%, 49%);
/* With alpha (transparency) - old way */
color: hsla(207, 44%, 49%, 0.8);
/* Modern CSS Color Level 4 syntax - commas optional, alpha with slash */
color: hsl(207 44% 49%);
color: hsl(207 44% 49% / 0.8);
color: hsl(207 44% 49% / 80%);
सभी प्रमुख ब्राउज़र दोनों सिंटैक्स को सपोर्ट करते हैं। बिना comma वाला version CSS की आगे की दिशा है, लेकिन comma वाला version Internet Explorer 9+ सहित हर जगह काम करता है।
UI डेवलपमेंट में HSL क्यों बेहतर है
HSL की असली ताकत तब सामने आती है जब आपको किसी रंग के variations बनाने होते हैं - और UI काम में ऐसा बार-बार होता है।
कुछ ही सेकंड में color palette बनाएं
मान लीजिए आपका brand color
hsl(140, 70%, 45%)
पर एक गहरा हरा है। आपको hover state, disabled state और एक हल्की background tint चाहिए। HSL में आप हर बार केवल एक ही value बदलते हैं:
--color-base: hsl(140, 70%, 45%); /* base green */
--color-hover: hsl(140, 70%, 38%); /* darker - just lower lightness */
--color-disabled: hsl(140, 20%, 65%); /* washed out - lower saturation */
--color-tint: hsl(140, 70%, 92%); /* very light background tint */
RGB में color picker खोले बिना यह अनुमानित तरीके से करना सच में मुश्किल है, क्योंकि वहाँ कोई अलग axis नहीं होता जिसे adjust किया जा सके।
Analogous और complementary रंग
चूँकि hue color wheel पर एक डिग्री है, इसलिए harmonious palettes बनाना सिर्फ arithmetic है। Analogous रंग एक-दूसरे से 30 डिग्री के अंदर होते हैं। Complementary रंग 180 डिग्री दूर होते हैं:
--primary: hsl(210, 80%, 50%); /* blue */
--analogous-1: hsl(180, 80%, 50%); /* cyan - 30 degrees left */
--analogous-2: hsl(240, 80%, 50%); /* purple - 30 degrees right */
--complementary: hsl(30, 80%, 50%); /* orange - 180 degrees opposite */
Saturation और lightness एक जैसी रहती है, इसलिए रंग एक cohesive family जैसे लगते हैं। Tailwind CSS और Material Design जैसे design systems प्रोग्रामेटिक तरीके से अपने color scales बनाने के लिए ठीक यही तरीका अपनाते हैं।
व्यावहारिक CSS उदाहरण
HSL components के साथ CSS custom properties
HSL के सबसे शक्तिशाली patterns में से एक है तीनों values को अलग-अलग CSS custom properties में विभाजित करना। इससे आप उन्हें कहीं भी जोड़ सकते हैं और individual channels को मनचाहे वक्त पर बदल सकते हैं:
:root {
--brand-h: 210;
--brand-s: 80%;
--brand-l: 50%;
--brand-color: hsl(var(--brand-h), var(--brand-s), var(--brand-l));
}
.button {
background-color: var(--brand-color);
}
.button:hover {
/* Just override lightness - no need to redefine the whole color */
background-color: hsl(var(--brand-h), var(--brand-s), 40%);
}
.button:disabled {
background-color: hsl(var(--brand-h), 20%, 70%);
}
hsl()
के अंदर CSS custom properties उपयोग करें, तो commas ज़रूरी हैं:
hsl(var(--h), var(--s), var(--l))
। Comma-free आधुनिक सिंटैक्स अभी सभी ब्राउज़रों में
var()
के अंदर
hsl()
के साथ काम नहीं करता।
पूरा tonal scale बनाना
Design systems को अक्सर एक रंग के 9-10 shades चाहिए होते हैं (जैसे Tailwind का 50 से 950 scale)। HSL के साथ, hue और saturation को fixed रखते हुए lightness को नियमित अंतराल पर step करके पूरा scale बनाया जा सकता है:
:root {
--blue-50: hsl(210, 80%, 95%);
--blue-100: hsl(210, 80%, 87%);
--blue-200: hsl(210, 80%, 76%);
--blue-300: hsl(210, 80%, 65%);
--blue-400: hsl(210, 80%, 55%);
--blue-500: hsl(210, 80%, 50%); /* base */
--blue-600: hsl(210, 80%, 43%);
--blue-700: hsl(210, 80%, 36%);
--blue-800: hsl(210, 80%, 26%);
--blue-900: hsl(210, 80%, 16%);
}
Color formats आपस में कैसे संबंधित हैं, इसकी गहरी समझ के लिए HEX से RGB conversion गाइड CSS color formats की पूरी तस्वीर कवर करती है, जिसमें यह भी बताया गया है कि कौन सा format कब सही है।
Hover States, थीमिंग और डार्क मोड
Hover और focus states
HSL hover states को बेहद आसान बना देता है। पूरी तरह अलग रंग define करने की बजाय, बस lightness थोड़ी बदलें:
.btn-primary {
background: hsl(210, 80%, 50%);
transition: background 0.2s ease;
}
.btn-primary:hover { background: hsl(210, 80%, 43%); }
.btn-primary:active { background: hsl(210, 80%, 36%); }
.btn-primary:focus-visible {
outline: 3px solid hsl(210, 80%, 70%);
}
हर state base color से स्पष्ट रूप से जुड़ी है। इस कोड को पढ़ने वाला कोई भी साथी developer तुरंत states के बीच का संबंध समझ जाएगा।
HSL variables के साथ थीमिंग
HSL आधुनिक CSS थीमिंग की रीढ़ है। केवल hue को एक variable के रूप में expose करके, आप users या admins को एक ही number बदलकर पूरे app का color scheme बदलने की सुविधा दे सकते हैं:
/* Default theme: blue */
:root {
--theme-hue: 210;
}
/* Green theme - just swap the hue */
[data-theme="green"] {
--theme-hue: 140;
}
/* Purple theme */
[data-theme="purple"] {
--theme-hue: 270;
}
/* All components use the same hue variable */
.button { background: hsl(var(--theme-hue), 75%, 50%); }
.link { color: hsl(var(--theme-hue), 75%, 40%); }
.badge { background: hsl(var(--theme-hue), 75%, 92%); color: hsl(var(--theme-hue), 75%, 25%); }
.focus-ring { outline-color: hsl(var(--theme-hue), 75%, 65%); }
HSL के साथ डार्क मोड
डार्क मोड वह जगह है जहाँ HSL वाकई आगे निकल जाता है। दो अलग-अलग color palettes maintain करने की बजाय, आप उसी hue के अंदर lightness values पलट देते हैं:
:root {
--bg: hsl(210, 20%, 98%); /* near-white background */
--text: hsl(210, 20%, 15%); /* near-black text */
--card: hsl(210, 20%, 93%); /* slightly darker card */
}
@media (prefers-color-scheme: dark) {
:root {
--bg: hsl(210, 20%, 10%); /* flip: near-black background */
--text: hsl(210, 20%, 90%); /* flip: near-white text */
--card: hsl(210, 20%, 15%); /* slightly lighter card in dark */
}
}
ध्यान दें कि hue (210) और saturation (20%) कभी नहीं बदलते। केवल lightness पलटती है। इससे डार्क मोड उसी design जैसा लगता है, बस उल्टा - और यही अच्छे डार्क मोड की पहचान है।
ब्राउज़र सपोर्ट और संगतता
HSL का ब्राउज़र सपोर्ट बेहतरीन है।
hsl()
फ़ंक्शन इन versions से उपलब्ध है:
- Chrome 1 (2008)
- Firefox 1 (2004)
- Safari 3.1 (2008)
- Internet Explorer 9 (2011)
- Edge 12 (2015)
आधुनिक comma-free सिंटैक्स (
hsl(210 80% 50%)
) और slash-alpha सिंटैक्स (
hsl(210 80% 50% / 0.5)
)
CSS Color Level 4 specification
का हिस्सा हैं और 2023 से सभी आधुनिक ब्राउज़रों में सपोर्टेड हैं। अगर आपको IE11 सपोर्ट चाहिए (जो अब बहुत कम होता है), तो comma सिंटैक्स ही रखें।
hsl()
हर उस ब्राउज़र में काम करता है जो आपके users चला रहे हैं। आधुनिक space-separated सिंटैक्स Chrome 90+, Firefox 89+, और Safari 14.1+ में काम करता है, जो वैश्विक ब्राउज़र उपयोग के 95% से अधिक को कवर करता है।
जब आपको HSL, RGB और HEX formats के बीच cross-reference करना हो या किसी ऐसे tool को रंग देने हों जो केवल एक format स्वीकार करता है, तो आप हमेशा color picker का उपयोग कर सकते हैं।
HSL बनाम OKLCH - आगे क्या?
अगर आप HSL से आगे जाना चाहते हैं, तो OKLCH के बारे में जानना उचित है। यह एक perceptually uniform color space है, यानी lightness या chroma में बराबर numeric steps देखने में भी बराबर लगते हैं - जो HSL पूरी तरह गारंटी नहीं देता।
HSL की समस्या यह है कि एक ही lightness value वाले दो रंग perceived brightness में बहुत अलग लग सकते हैं। उदाहरण के लिए,
hsl(60, 100%, 50%)
(पीला) और
hsl(240, 100%, 50%)
(नीला) दोनों 50% lightness पर हैं, फिर भी पीला काफी ज्यादा चमकीला लगता है। OKLCH इसे ठीक करता है।
/* HSL - same lightness, different perceived brightness */
color: hsl(60, 100%, 50%); /* yellow - looks very bright */
color: hsl(240, 100%, 50%); /* blue - looks much darker */
/* OKLCH - same lightness, actually looks the same to the eye */
color: oklch(0.75 0.18 90); /* yellow-ish */
color: oklch(0.75 0.18 260); /* blue-ish - genuinely similar perceived brightness */
OKLCH
wide-gamut रंगों
(P3 display colors) को भी सपोर्ट करता है जो sRGB की सीमा से परे जाते हैं, जिस तक HSL सीमित है।
oklch()
का ब्राउज़र सपोर्ट 2024 में मजबूत है: Chrome 111+, Firefox 113+, Safari 15.4+।
अधिकांश projects के लिए अभी HSL एक व्यावहारिक विकल्प है: पठनीय, रखरखाव योग्य, सर्वत्र सपोर्टेड, और RGB की तुलना में एक बड़ा सुधार। OKLCH तब सही है जब आप कोई ऐसा design system बना रहे हों जिसे गणितीय रूप से सुसंगत contrast ratios चाहिए हों या आप wide-gamut displays को target करना चाहते हों।
अगर आप अपना palette बनाते समय color relationships को visually explore करना चाहते हैं, तो color explorer tool आपको HSL values के साथ experiment करने और real time में hue rotations, saturation shifts और lightness changes का प्रभाव देखने देता है।
बिना अनुमान लगाए HSL रंग चुनें
हमारा color picker आपको hue, saturation और lightness values को visually सेट करने देता है, फिर सटीक HSL color model आउटपुट सीधे आपके CSS में कॉपी करें - कोई mental math नहीं।
Color Picker आज़माएं →
पूरा rewrite करने की ज़रूरत नहीं है, लेकिन जो भी नई color definitions लिखें उनके लिए HSL अपनाना फायदेमंद है, खासकर जब CSS custom properties उपयोग कर रहे हों। सबसे बड़ा फायदा तब मिलता है जब आप कोई design system बना या maintain कर रहे हों, hover states बना रहे हों, या डार्क मोड implement कर रहे हों। एक ही project में RGB और HSL दोनों मिलाना बिल्कुल valid CSS है - ब्राउज़र दोनों को बिना किसी performance अंतर के handle करते हैं।
नहीं, कोई meaningful performance अंतर नहीं है। ब्राउज़र parse के समय सभी CSS color formats को एक internal representation में बदल देता है, इसलिए चाहे आप
hsl(207, 44%, 49%)
लिखें या
rgb(70, 130, 180)
, उस initial parse step के बाद rendering engine दोनों को एक जैसा ही treat करता है। यह चुनाव पूरी तरह developer experience और maintainability के बारे में है, न कि runtime performance के बारे में।
हाँ, और JavaScript में यह HSL का सबसे मजबूत use case है। आप hue, saturation और lightness को अलग-अलग numbers के रूप में store कर सकते हैं, फिर color string dynamically बना सकते हैं:
element.style.color = `hsl(${hue}, ${saturation}%, ${lightness}%)`
। इससे animations, theme switching और interactive color controls को implement करना RGB channels के साथ काम करने की तुलना में कहीं आसान हो जाता है, जहाँ समान प्रभाव के लिए conversion math की ज़रूरत पड़ती।
HSL (hue, saturation, lightness) और HSB/HSV (hue, saturation, brightness/value) अलग-अलग color models हैं, भले ही दोनों hue axis साझा करते हैं। HSL में 50% lightness आपको शुद्ध, पूरी तरह saturated रंग देती है। HSB में 100% brightness शुद्ध रंग देती है। दोनों models एक ही saturation और brightness/lightness values के लिए अलग परिणाम देते हैं। CSS विशेष रूप से HSL उपयोग करता है - HSB/HSV Photoshop और Figma जैसे design tools में आम है लेकिन यह native CSS format नहीं है।
HEX से HSL conversion एक intermediate RGB step से होती है: पहले HEX pairs को RGB values (0-255) में बदलें, उन्हें 0-1 पर normalize करें, फिर HSL conversion formula लागू करें। व्यवहार में अधिकांश developers हाथ से calculate करने की बजाय color picker tool, Figma जैसे design tool, या browser DevTools का color picker उपयोग करते हैं। Browser DevTools में किसी भी color swatch पर क्लिक करके HEX, RGB और HSL representations के बीच toggle किया जा सकता है।
हाँ, OKLCH accessibility काम के लिए अधिक विश्वसनीय है क्योंकि यह perceptually uniform है - इसके lightness channel में बराबर steps perceived brightness में भी बराबर बदलाव से मेल खाते हैं। इससे ऐसे color palettes बनाना आसान होता है जहाँ अलग-अलग hues में contrast ratios अनुमानित हों। HSL में 50% lightness पर पीला, 50% lightness पर नीले से काफी ज्यादा चमकीला लगता है, जो accessibility में अप्रत्याशित परिणाम दे सकता है। WCAG contrast compliance के लिए, OKLCH accessible color scales बनाते समय अधिक अनुमानित परिणाम देता है।