Chuyển mã hex sang HSL

Dán mã màu hex như #ff6347 hay #f00 để lấy ngay giá trị hsl() tương ứng, kèm luôn màu đó ở dạng RGB, HSV và CMYK nếu bạn cần.

File không bao giờ rời khỏi thiết bị của bạn
hslhsl(9, 100%, 64%)
hex#ff6347
rgbrgb(255, 99, 71)
hsvhsv(9, 72%, 100%)
cmykcmyk(0%, 61%, 72%, 0%)

Tông màu, độ bão hòa, độ sáng — vắn tắt

HSL mô tả một màu theo đúng cách người ta nói ngoài đời: màu gì, rực cỡ nào, sáng hay tối ra sao. Tông màu là số độ quanh một bánh xe màu — 0 là đỏ, 120 là xanh lá, 240 là xanh dương, và quay lại đỏ ở 360. Độ bão hòa là màu đó cách một màu xám trung tính bao xa ở cùng độ sáng, từ 0% (xám) đến 100% (rực rỡ hoàn toàn). Độ sáng chạy từ 0% (đen) qua 50% (bản thuần khiết của tông màu) đến 100% (trắng). Hex và RGB lưu cùng một thông tin dưới dạng ba cường độ kênh; HSL lưu nó dưới dạng ba ý niệm tách biệt, mỗi ý niệm chỉnh được độc lập. Chính sự tách biệt đó là lý do người ta đổi sang HSL: hex và RGB là thứ một color picker đưa cho bạn, còn HSL là thứ bạn cần khi việc cần làm chuyển từ "ghi lại màu này" sang "làm một phiên bản tối hơn của màu này" hoặc "chọn một màu cách 30 độ trên bánh xe so với màu này".

Đổi #ff6347 bằng tay

Hex sang HSL đi qua RGB trước. #ff6347rgb(255, 99, 71). Độ sáng là trung bình cộng của kênh lớn nhất và nhỏ nhất: lớn nhất là 255, nhỏ nhất là 71, (255 + 71) / 2 là 163, tính theo tỷ lệ của 255 là khoảng 64% — số l trong hsl(9, 100%, 64%). Độ bão hòa so sánh khoảng cách giữa các kênh (184, từ 71 đến 255) với độ sáng đó gần trung tâm ra sao; ở đây hai con số này khớp nhau vừa đủ, cho ra 100%. Tông màu nhìn vào kênh nào lớn nhất — ở đây là đỏ — rồi xem xanh lá cách xanh dương bao xa so với khoảng cách đó, ra 9 độ, ngay sát đỏ thuần, nghiêng nhẹ về cam.

Mẹo: Không cần tính tay lại mỗi ngày — công cụ phía trên làm việc đó cho bạn. Hiểu được hình dạng của phép tính giúp một giá trị HSL đọc được ngay từ cái nhìn đầu tiên thay vì là ba con số bí ẩn.

Vì sao nên dùng HSL thay vì hex

Lợi ích rõ nhất khi bạn cần chỉnh một màu chứ không chỉ lưu lại nó. Lấy hsl(9, 100%, 64%), màu đỏ cam ở trên, rồi chỉ đổi độ sáng:

Độ sángRa hexTrông như
20%#660f00Đỏ mận gần đen
40%#cc1f00Đỏ gạch đậm
64%#ff6347Màu gốc
80%#ffa899Hồng cam nhạt
95%#ffe9e5Trắng phớt hồng

Mọi dòng đều cùng tông màu, cùng độ bão hòa — chỉ độ sáng đổi. Muốn ra năm sắc độ y hệt từ hex thì phải tính lại cả ba kênh năm lần riêng biệt, vì hex không có kênh nào tách riêng được ý niệm "sáng hơn" khỏi "một màu hoàn toàn khác".

Mẹo: Đang làm trạng thái hover hay disabled cho một màu thương hiệu? Giữ nguyên tông màu và độ bão hòa, chỉ dịch độ sáng 10–15 điểm — nhìn vẫn là cùng một màu, chỉ tối hơn hay sáng hơn, thường đúng là hiệu ứng một trạng thái hover cần.

Một ví dụ khác, và khi độ bão hòa về 0

#2ecc71, một màu xanh lá hay gặp trong giao diện, đổi ra hsl(145, 63%, 49%) — tông màu nằm ở phần ba xanh lá của bánh xe, khá bão hòa, gần mức giữa nơi tông màu trông rực nhất. So với #333333, đổi ra hsl(0, 0%, 20%): độ bão hòa là 0%, vì đỏ, xanh lá, xanh dương bằng nhau (đều 51), nên chẳng có màu nào để tông màu trỏ tới. Công cụ này báo 0 cho tông màu trong trường hợp đó theo quy ước — số nào cũng được, vì ở 0% bão hòa thì kênh tông màu chẳng còn gì để ảnh hưởng nữa.

Câu hỏi thường gặp

Tông màu, độ bão hòa, độ sáng thật ra đo cái gì?
Tông màu là một vị trí trên bánh xe màu, từ 0 đến 360 độ, chạy qua đỏ, vàng, xanh lá, lục lam, xanh dương, hồng cánh sen rồi quay lại đỏ. Độ bão hòa là màu đó cách xa màu xám bao nhiêu ở cùng độ sáng đó, từ 0% đến 100%. Độ sáng là màu đó gần đen hay gần trắng cỡ nào, 0% là đen, 100% là trắng, 50% là bản thuần khiết nhất của tông màu.
Độ sáng được tính từ mã hex như thế nào?
Đổi hex sang RGB trước, rồi lấy trung bình cộng của kênh lớn nhất và kênh nhỏ nhất. Với #ff6347, ba kênh là 255, 99 và 71 — lớn nhất là 255, nhỏ nhất là 71, trung bình là 163, tính theo phần trăm của 255 là khoảng 64%. Đó là số l trong hsl(9, 100%, 64%).
Vì sao #ff6347 lại ra đúng 100% độ bão hòa?
Độ bão hòa phụ thuộc vào khoảng cách giữa kênh lớn nhất và kênh nhỏ nhất so với độ sáng. Ba kênh của #ff6347 trải từ 71 đến 255, một khoảng khá rộng so với độ sáng của nó — đó chính là hình ảnh của một màu không pha chút xám nào cả.
Tông màu có ý nghĩa gì với một màu xám như #333333 không?
Về mặt kỹ thuật thì không, và công cụ này báo 0 theo quy ước. #333333 có đỏ, xanh lá, xanh dương bằng nhau — đều là 51 — nên không có hướng nào trên bánh xe màu để trỏ tới. Độ bão hòa cũng là 0% vì cùng lý do, và ở 0% bão hòa thì con số tông màu không ảnh hưởng gì đến màu hiển thị.
Nếu chỉ đổi L trong hsl(9, 100%, 64%), tông màu có giữ nguyên không?
Có — đó chính là lý do HSL tồn tại. hsl(9, 100%, 20%) và hsl(9, 100%, 80%) là phiên bản tối hơn và sáng hơn của cùng một màu đỏ như hsl(9, 100%, 64%), vì chỉ số thứ ba đổi. Làm việc tương tự trên hex hay RGB sẽ phải tính lại cả ba kênh.
Độ sáng trong HSL có giống độ sáng (value) trong HSV không?
Không, và nhầm hai khái niệm này là chuyện thường gặp. Độ sáng trong HSL đạt 100% ở trắng tinh, nên một màu đã bão hòa và sáng hết cỡ lại nằm ở mức 50% độ sáng. Value trong HSV đạt 100% ngay tại chính màu sáng hết cỡ đó, không có khái niệm pha dần về trắng.