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ạng | Ví dụ | Phù hợp nhất cho |
|---|---|---|
| Tên màu | tomato, rebeccapurple | Thử nhanh và làm bản mẫu |
| Hex | #2563eb, #25e | Sao 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óa | transparent, currentColor | Xem 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#25elà#2255ee.#rrggbbaa: cặp cuối là alpha, nên#2563eb80có độ đụ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ớiwhitehoặcblacksẽ 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: 2563ebkhô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ế.
royalbluekhô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ữ.