Menu

Màu trong CSS: tên màu, hex, RGB, RGBA, HSL và độ trong suốt

Mọi cách viết màu trong CSS: tên màu, mã hex, rgb() và rgba(), hsl(), độ trong suốt với kênh alpha, currentColor, cùng oklch() và color-mix() mới hơn. Mỗi cách đều có ví dụ chạy trực tiếp và một công cụ chuyển đổi.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Các cách viết màu trong CSS

Mọi thuộc tính nhận màu (color, background-color, border-color, bóng đổ, fill của SVG) đều chấp nhận cùng các định dạng. Bốn ô màu đầu tiên là cùng một màu xanh viết theo bốn cách, còn ô thứ năm là một tên màu gần giống:

Định dạngVí dụPhù hợp nhất cho
Tên màutomato, rebeccapurpleThử nhanh và làm bản mẫu
Hex#2563eb, #25eSao chép từ công cụ thiết kế
rgb()rgb(37 99 235)Thêm độ trong suốt, làm việc với giá trị RGB
hsl()hsl(221 83% 53%)Tạo các sắc độ đậm nhạt của một màu
oklch()oklch(55% 0.2 262)Bảng màu có độ sáng cảm nhận đồng đều
Từ khóatransparent, currentColorXem các phần bên dưới

Màu hex

Màu hex là # theo sau là đỏ, xanh lá và xanh dương, mỗi màu hai chữ số thập lục phân, từ 00 đến ff. Có ba dạng rút gọn hoặc mở rộng:

  • #rgb: mỗi chữ số được nhân đôi, nên #25e là #2255ee.
  • #rrggbbaa: cặp cuối là alpha, nên #2563eb80 có độ đục khoảng 50%.
  • #rgba: dạng rút gọn có alpha.

Hex không phân biệt chữ hoa chữ thường: #2563EB và #2563eb là cùng một màu.

rgb() và rgba()

rgb() nhận đỏ, xanh lá và xanh dương từ 0 đến 255 (hoặc từ 0% đến 100%). Giá trị thứ tư không bắt buộc, đặt sau dấu gạch chéo, là alpha, từ 0 (vô hình) đến 1 hoặc từ 0% đến 100%.

color: rgb(37 99 235);          /* modern space syntax */
color: rgb(37 99 235 / 50%);    /* half transparent */
color: rgba(37, 99, 235, 0.5);  /* older comma syntax, same result */

rgba() và rgb() giờ là cùng một hàm: cả hai đều nhận cả hai cú pháp và một alpha không bắt buộc. Code cũ dùng rgba() khi cần độ trong suốt, và nó vẫn chạy bình thường.

hsl(): định dạng dễ điều chỉnh nhất

hsl() mô tả màu theo cách con người nghĩ về màu: một sắc độ trên bánh xe màu, một độ bão hòa và một độ sáng. Giữ nguyên sắc độ và đổi độ sáng là có cả một dải màu:

Hàng thứ nhất giữ sắc độ 221 và độ bão hòa 83%, chỉ thay đổi độ sáng. Hàng thứ hai đi vòng quanh bánh xe màu với cùng độ bão hòa và độ sáng.

Độ trong suốt: alpha và opacity

Kênh alpha làm một màu trở nên trong suốt. opacity làm cả phần tử trong suốt, bao gồm cả chữ và các phần tử con:

transparent là từ khóa cho màu đen hoàn toàn trong suốt, rgb(0 0 0 / 0). Đây là nền mặc định của hầu hết phần tử.

currentColor

currentColor bằng đúng color của chính phần tử. Một nút có viền, biểu tượng và chữ đều dùng nó sẽ đổi tất cả chỉ với một khai báo:

.button {
  color: #16a34a;
  border: 2px solid currentColor;
}
.button svg { fill: currentColor; }

Viền vốn đã mặc định là currentColor, đó là lý do border: 2px solid không ghi màu vẫn khớp với màu chữ.

Thử bất kỳ màu nào

Nhập một màu ở bất kỳ định dạng nào. Trình duyệt phân tích nó và hiển thị giá trị đã tính; màu không hợp lệ sẽ để ô màu giữ nguyên.

Thử tomato, #0f0, #2563eb80, rgb(0 0 0 / 25%), oklch(70% 0.15 150) và color-mix(in srgb, #2563eb, white 50%).

Các hàm màu mới hơn

  • oklch(L C H): độ sáng, độ đậm màu (chroma) và sắc độ trong một không gian màu được thiết kế để độ sáng bằng nhau thì trông sáng như nhau. Bảng màu dựng bằng nó ít có những bước giữa bị đục hơn so với bảng màu HSL.
  • color-mix(in srgb, A, B 30%): trộn hai màu. Trộn với white hoặc black sẽ tạo các sắc độ nhạt và đậm từ một màu thương hiệu duy nhất, và nó chạy được với biến CSS: color-mix(in srgb, var(--brand), white 80%).

Cả hai đều chạy trên Chrome, Firefox và Safari hiện tại. Hãy giữ màu thương hiệu trong biến CSS để các định dạng bạn chọn nằm ở một chỗ.

Lỗi thường gặp

  • Thiếu # trong màu hex. color: 2563eb không hợp lệ và bị bỏ qua.
  • Dùng opacity để làm nền trong suốt. Nó làm mờ cả chữ. Hãy dùng một màu có alpha.
  • Trộn lẫn dấu phân cách trong cú pháp mới. rgb(37 99, 235) không hợp lệ: dùng toàn dấu cách hoặc toàn dấu phẩy.
  • Cho rằng một tên màu khớp với thiết kế. royalblue không phải #2563eb. Hãy sao chép đúng mã màu.
  • Đánh giá độ tương phản bằng mắt. Kiểm tra màu chữ so với nền bằng một công cụ kiểm tra độ tương phản; 4.5:1 là mức tối thiểu cho chữ nội dung.

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

CSS hỗ trợ những định dạng màu nào?

Tên màu (red), hex (#ff0000), rgb(), hsl(), hwb(), lab(), lch(), oklab(), oklch() và color(), cùng các từ khóa transparent và currentColor. Hex, rgb và hsl đáp ứng gần như mọi nhu cầu hằng ngày.

rgb và rgba khác nhau thế nào?

Giờ thì không khác gì. rgba() là tên gọi cũ: CSS hiện tại cho phép rgb() nhận giá trị alpha (rgb(37 99 235 / 50%)), và cả hai hàm nhận cùng các đối số trên mọi trình duyệt hiện tại.

Làm sao làm một màu trong suốt trong CSS?

Thêm kênh alpha: rgb(0 0 0 / 50%), hsl(221 83% 53% / 0.5), hoặc mã hex 8 chữ số như #2563eb80. Khác với opacity, cách này chỉ làm mờ đúng màu đó, không làm mờ cả phần tử.

HSL trong CSS là gì?

Hue, saturation, lightness: sắc độ, độ bão hòa và độ sáng. Hue là một góc trên bánh xe màu (0 là đỏ, 120 là xanh lá, 240 là xanh dương), saturation là độ rực của màu, còn lightness đi từ 0% là đen đến 100% là trắng. Nhờ vậy tạo các sắc độ sáng hơn hay tối hơn rất dễ: chỉ cần đổi số cuối cùng.

currentColor nghĩa là gì?

Đó là giá trị của thuộc tính color của phần tử. Dùng nó cho viền hoặc màu tô SVG sẽ khiến chúng tự động theo màu chữ.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu