Công Cụ Chuyển Đổi Màu

Chuyển đổi màu giữa các định dạng HEX, RGB, HSL và HSV với bộ chọn màu trực quan

Thử ví dụ

Nhấp vào ô màu để mở bộ chọn màu

Hoặc chỉnh sửa bất kỳ giá trị nào bên dưới

HEX
RGB
HSL
HSV

Chuyển Đổi Màu Là Gì?

Công cụ chuyển đổi màu dịch một giá trị màu từ ký hiệu này sang ký hiệu khác — ví dụ, từ chuỗi HEX (#6366F1) sang bộ ba RGB (99, 102, 241) hoặc bộ ba HSL (239, 84%, 67%). Cùng một màu cũng có thể được biểu diễn dưới dạng bộ ba HSV (239, 59%, 95%). Mỗi định dạng mã hóa cùng một màu hiển thị bằng một mô hình toán học khác nhau; các công cụ, ngôn ngữ và API khác nhau đều yêu cầu định dạng khác nhau tùy theo ngữ cảnh.

HEX và RGB đều mô tả màu sắc là sự kết hợp của ánh sáng đỏ, xanh lá và xanh dương. HEX là biểu diễn thập lục phân gọn gàng của ba giá trị kênh từ 0–255 mà RGB liệt kê dưới dạng thập phân. HSL (Hue, Saturation, Lightness) và HSV (Hue, Saturation, Value) sắp xếp lại thông tin đó trong hệ tọa độ trụ, trong đó sắc thái là một góc trên bánh xe màu (0–360 độ), còn độ bão hòa và độ sáng là các tỉ lệ phần trăm. Điều này làm cho HSL và HSV trực quan hơn cho các tác vụ như tạo tông màu sáng hoặc tối hơn từ cùng một sắc thái.

Việc chuyển đổi giữa các định dạng này đòi hỏi các phép tính được xác định rõ ràng. Đặc tả W3C CSS Color Module Level 4 ghi lại các thuật toán mà trình duyệt sử dụng để phân giải bất kỳ màu CSS nào thành một bộ ba sRGB. Các công thức này mang tính xác định: một đầu vào nhất định luôn tạo ra cùng một đầu ra, vì vậy các chuyển đổi không mất dữ liệu miễn là các giá trị không bị làm tròn hoặc cắt bớt. Hầu hết các bộ chọn màu và công cụ thiết kế đều dựa trên các công thức tương tự.

Tại Sao Sử Dụng Công Cụ Chuyển Đổi Màu Này?

Công cụ thiết kế xuất màu theo một định dạng, CSS của bạn cần một định dạng khác, và API bạn đang gọi lại yêu cầu định dạng thứ ba. Thay vì viết mã chuyển đổi hoặc tìm kiếm công thức đúng, hãy dán giá trị vào và nhận tất cả định dạng cùng một lúc.

Chuyển Đổi Trực Tiếp Tức Thì
Nhập hoặc chọn màu và xem HEX, RGB, HSL, và HSV cập nhật trong thời gian thực. Không có nút gửi, không cần kết nối tới máy chủ.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Toàn bộ phép tính chuyển đổi chạy trong trình duyệt của bạn. Không có giá trị màu, dữ liệu sử dụng hay cookie nào được gửi đi.
🔀
Bốn Định Dạng Cùng Lúc
Một đầu vào tạo ra HEX, RGB, HSL và HSV đồng thời. Sao chép bất kỳ định dạng nào bạn cần chỉ với một cú nhấp.
📋
Không Cần Tài Khoản
Mở trang và bắt đầu chuyển đổi ngay. Không cần đăng ký, không cần email, không có giới hạn tốc độ. Hoạt động ngoại tuyến sau khi tải.

Các Trường Hợp Sử Dụng

Phát Triển CSS
Nhà thiết kế đưa cho bạn một giá trị HEX từ Figma, nhưng thư viện thành phần của bạn sử dụng HSL cho chủ đề. Chuyển đổi giá trị và đưa vào thuộc tính tùy chỉnh CSS hoặc cấu hình Tailwind.
Tích Hợp API Backend
Endpoint của bạn chấp nhận màu dưới dạng mảng RGB để tạo biểu đồ. Chuyển đổi mã HEX thương hiệu từ style guide thành các bộ ba số nguyên mà API yêu cầu.
Duy Trì Design System
Khi lập tài liệu cho design system, bạn cần mỗi token màu được liệt kê dưới dạng HEX để tham khảo nhanh, RGB cho Canvas rendering, và HSL để tạo tông màu theo chương trình.
Kiểm Tra QA và Hình Ảnh
So sánh màu pixel của ảnh chụp màn hình (thường được báo cáo bằng RGB bởi DevTools trình duyệt) với giá trị HEX mong đợi từ thông số Figma. Chuyển đổi nhanh xác nhận hoặc phát hiện sự không khớp.
Trực Quan Hóa Dữ Liệu
Các thư viện biểu đồ như D3.js và Chart.js chấp nhận màu theo các định dạng khác nhau tùy theo phương thức. Chuyển đổi một lần và duy trì ký hiệu nhất quán trong toàn bộ cấu hình dataset.
Học Lý Thuyết Màu Sắc
Sinh viên học đồ họa máy tính hoặc thiết kế web có thể thấy cách cùng một màu ánh xạ qua HEX, RGB, HSL và HSV. Điều chỉnh một kênh và quan sát các kênh khác thay đổi giúp xây dựng trực giác về cách các mô hình màu liên quan.

Tham Chiếu Định Dạng Màu

Bảng dưới đây liệt kê năm định dạng màu phổ biến nhất, với cùng màu indigo (#6366F1) được hiển thị theo mỗi ký hiệu. HEX và RGB được hỗ trợ rộng rãi nhất trong CSS và JavaScript. HSL được ưu tiên cho chủ đề vì việc điều chỉnh độ sáng và độ bão hòa rất đơn giản. HSV là mô hình được hầu hết các bộ chọn màu trong phần mềm thiết kế đồ họa sử dụng.

Định dạngVí dụ (indigo)KênhSử dụng phổ biến
HEX#6366F16 (or 3/8)CSS, design tools, brand guides
RGBrgb(99, 102, 241)3 (0–255 each)CSS, Canvas API, image processing
HSLhsl(239, 84%, 67%)3 (deg, %, %)CSS, color theming, accessibility tuning
HSVhsv(239, 59%, 95%)3 (deg, %, %)Color pickers, Photoshop, Figma
CMYKcmyk(59%, 58%, 0%, 5%)4 (0–100% each)Print design, prepress workflows

HEX vs RGB vs HSL

Cả ba định dạng đều mô tả cùng không gian màu sRGB. Sự khác biệt là cách chúng trình bày dữ liệu, ảnh hưởng đến khả năng đọc và tính dễ thao tác trong các ngữ cảnh khác nhau.

HEX
Một chuỗi thập lục phân 6 chữ số (hoặc dạng viết tắt 3 chữ số). Gọn gàng và phổ biến trong CSS, công cụ thiết kế và hướng dẫn thương hiệu. Khó đọc ngay: #6366F1 không cho biết sắc thái. Hỗ trợ dạng 8 chữ số tùy chọn (#6366F180) cho độ trong suốt alpha.
RGB
Ba số nguyên từ 0 đến 255 cho các kênh đỏ, xanh lá và xanh dương. Định dạng gốc cho Canvas 2D, WebGL và hầu hết các thư viện xử lý hình ảnh. Dễ thao tác theo từng kênh, nhưng điều chỉnh độ sáng cảm nhận đòi hỏi thay đổi cả ba giá trị cùng lúc.
HSL
Sắc thái (0–360 độ), độ bão hòa (0–100%) và độ sáng (0–100%). Được thiết kế để dễ đọc đối với con người. Để làm sáng màu, tăng L. Để giảm bão hòa, giảm S. CSS hỗ trợ ký hiệu hsl() và cú pháp color-mix() và relative color hiện đại xây dựng trên nền tảng đó.

Ví Dụ Mã

Chuyển đổi màu giữa HEX, RGB và HSL trong các ngôn ngữ và môi trường phổ biến. Mỗi ví dụ sử dụng cùng màu indigo (#6366F1) để so sánh dễ dàng.

JavaScript
// HEX → RGB
function hexToRgb(hex) {
  const n = parseInt(hex.replace('#', ''), 16)
  return [(n >> 16) & 255, (n >> 8) & 255, n & 255]
}
hexToRgb('#6366f1') // → [99, 102, 241]

// RGB → HSL
function rgbToHsl(r, g, b) {
  r /= 255; g /= 255; b /= 255
  const max = Math.max(r, g, b), min = Math.min(r, g, b)
  const l = (max + min) / 2
  if (max === min) return [0, 0, Math.round(l * 100)]
  const d = max - min
  const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)
  let h = 0
  if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6
  else if (max === g) h = ((b - r) / d + 2) / 6
  else h = ((r - g) / d + 4) / 6
  return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)]
}
rgbToHsl(99, 102, 241) // → [239, 84, 67]
Python
import colorsys

# HEX → RGB
def hex_to_rgb(hex_str: str) -> tuple[int, int, int]:
    h = hex_str.lstrip('#')
    return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))

hex_to_rgb('#6366f1')  # → (99, 102, 241)

# RGB → HSL (colorsys uses HLS order)
r, g, b = 99 / 255, 102 / 255, 241 / 255
h, l, s = colorsys.rgb_to_hls(r, g, b)
print(f"hsl({h * 360:.0f}, {s * 100:.0f}%, {l * 100:.0f}%)")
# → hsl(239, 84%, 67%)

# RGB → HSV
h, s, v = colorsys.rgb_to_hsv(r, g, b)
print(f"hsv({h * 360:.0f}, {s * 100:.0f}%, {v * 100:.0f}%)")
# → hsv(239, 59%, 95%)
Go
package main

import (
	"fmt"
	"math"
)

func hexToRGB(hex string) (int, int, int) {
	var r, g, b int
	fmt.Sscanf(hex, "#%02x%02x%02x", &r, &g, &b)
	return r, g, b
}

func rgbToHSL(r, g, b int) (int, int, int) {
	rf, gf, bf := float64(r)/255, float64(g)/255, float64(b)/255
	max := math.Max(rf, math.Max(gf, bf))
	min := math.Min(rf, math.Min(gf, bf))
	l := (max + min) / 2
	if max == min {
		return 0, 0, int(math.Round(l * 100))
	}
	d := max - min
	s := d / (2 - max - min)
	if l <= 0.5 {
		s = d / (max + min)
	}
	var h float64
	switch max {
	case rf: h = (gf - bf) / d; if gf < bf { h += 6 }
	case gf: h = (bf - rf) / d + 2
	case bf: h = (rf - gf) / d + 4
	}
	return int(math.Round(h / 6 * 360)), int(math.Round(s * 100)), int(math.Round(l * 100))
}

func main() {
	r, g, b := hexToRGB("#6366f1")
	fmt.Println(r, g, b)         // → 99 102 241
	fmt.Println(rgbToHSL(r, g, b)) // → 239 84 67
}
CSS
/* Modern CSS supports multiple color formats natively */

/* HEX notation */
.button { color: #6366f1; }

/* RGB functional notation */
.button { color: rgb(99 102 241); }

/* HSL — easier to adjust lightness and saturation */
.button { color: hsl(239 84% 67%); }

/* CSS Color Level 4: relative color syntax (Chrome 119+) */
.button-light { color: hsl(from #6366f1 h s calc(l + 20%)); }

/* color-mix() for tinting without manual conversion */
.button-muted { color: color-mix(in srgb, #6366f1 70%, white); }

Câu Hỏi Thường Gặp

Sự khác biệt giữa HSL và HSV là gì?
Cả hai đều sử dụng sắc thái và độ bão hòa, nhưng chúng định nghĩa độ sáng khác nhau. HSL sử dụng lightness, trong đó 50% là màu thuần khiết, 0% là đen và 100% là trắng. HSV sử dụng value (hay brightness), trong đó 100% là màu thuần khiết và 0% là đen. HSV không có điểm trắng trực tiếp. Trong thực tế, HSL được sử dụng trong CSS và phát triển web, trong khi HSV là mô hình đằng sau hầu hết các bộ chọn màu trong phần mềm thiết kế như Photoshop và Figma.
Làm thế nào để chuyển đổi HEX sang RGB trong JavaScript?
Phân tích chuỗi hex thành số nguyên bằng parseInt(hex, 16), sau đó trích xuất từng kênh bằng phép dịch bit: (n >> 16) & 255 cho đỏ, (n >> 8) & 255 cho xanh lá, và n & 255 cho xanh dương. Cách này xử lý bất kỳ chuỗi hex 6 chữ số nào có hoặc không có dấu # đầu. Đối với dạng viết tắt 3 chữ số như #F0F, hãy mở rộng mỗi chữ số trước (FF00FF) trước khi phân tích.
Tôi có thể dùng HSL trực tiếp trong CSS không?
Có. Tất cả các trình duyệt hiện đại hỗ trợ hsl() và hsla() trong CSS. Kể từ CSS Color Level 4, cú pháp là hsl(239 84% 67%) với các giá trị phân cách bằng dấu cách (dấu phẩy vẫn được chấp nhận). Bạn cũng có thể thêm alpha làm tham số thứ tư: hsl(239 84% 67% / 0.5). Safari, Chrome, Firefox và Edge đều hỗ trợ cú pháp này.
Chuyển đổi màu có bị mất dữ liệu không?
Về mặt toán học, không. HEX, RGB, HSL và HSV đều mô tả cùng không gian màu sRGB và các chuyển đổi có thể đảo ngược. Trong thực tế, sự khác biệt làm tròn nhỏ có thể xuất hiện vì HEX bị giới hạn ở 256 bước mỗi kênh và các tỉ lệ phần trăm HSL thường được làm tròn thành số nguyên. Chuyển đổi qua lại nhiều lần có thể tích lũy sai số làm tròn từ 1–2 đơn vị.
Định dạng HEX 8 chữ số là gì?
Định dạng HEX 8 chữ số thêm hai chữ số alpha (độ trong suốt) vào màu HEX 6 chữ số chuẩn. Ví dụ, #6366F180 có nghĩa là cùng màu indigo ở độ mờ 50% (0x80 = 128, xấp xỉ 50% của 255). CSS hỗ trợ ký hiệu này trong tất cả các trình duyệt hiện đại. Dạng viết tắt là 4 chữ số, ví dụ #63F8.
Tại sao màu của tôi trông khác nhau trên màn hình khác?
Sự xuất hiện của màu sắc phụ thuộc vào cấu hình màu, độ sáng và hiệu chỉnh gamma của màn hình. Hai màn hình có thể hiển thị cùng một giá trị sRGB (#6366F1) khác nhau nếu cấu hình màu của chúng không đồng nhất. Các công cụ chuyển đổi màu hoạt động trong không gian màu được xác định (thường là sRGB) và tạo ra đầu ra chính xác về mặt toán học. Sự khác biệt cảm nhận là vấn đề hiệu chỉnh màn hình, không phải lỗi chuyển đổi.
Làm thế nào để chọn tông màu sáng hoặc tối hơn của một màu?
Chuyển đổi màu sang HSL và điều chỉnh kênh L (lightness). Tăng L về phía 100% tạo ra các tông sáng hơn; giảm về phía 0% tạo ra các tông tối hơn. Sắc thái và độ bão hòa không thay đổi. Trong CSS, bạn có thể làm điều này trực tiếp: hsl(239 84% 80%) là phiên bản sáng hơn của hsl(239 84% 67%). CSS hiện đại cũng cung cấp color-mix(in srgb, #6366F1, white 30%) cho hiệu ứng tương tự mà không cần chuyển đổi thủ công.