Radial gradient
radial-gradient() chuyển màu từ một điểm tâm lan ra ngoài. Giống mọi gradient trong CSS, nó là một hình ảnh, nên đặt trong background-image (hoặc cách viết tắt background):
Cú pháp đầy đủ là radial-gradient(shape size at position, color stops). Mọi thứ đứng trước các màu đều không bắt buộc.
| Thành phần | Giá trị | Mặc định |
|---|---|---|
| Hình dạng | circle, ellipse | ellipse |
| Kích thước | closest-side, closest-corner, farthest-side, farthest-corner, hoặc độ dài | farthest-corner |
| Vị trí | at center, at top left, at 30% 70%, at 20px 40px | at center |
| Điểm dừng màu | Hai màu trở lên, mỗi màu có thể kèm một vị trí |
Từ khóa kích thước quyết định màu cuối cùng xuất hiện ở đâu: ở cạnh gần nhất của hộp, ở góc xa nhất, và tương tự. Đổi các giá trị ở đây và xem gradient được vẽ lại:
Thử circle farthest-corner at 30% 50%, #f59e0b, #2563eb, ellipse at bottom, white, #16a34a và circle 40px, #f59e0b 99%, transparent (một chấm tròn có viền sắc nét).
Linear gradient
linear-gradient() chuyển màu dọc theo một đường thẳng. Đặt hướng hoặc góc ở đầu, sau đó là các màu:
Góc bắt đầu từ 0deg hướng lên trên và quay theo chiều kim đồng hồ, nên 90deg là to right còn 180deg là giá trị mặc định to bottom. to right vẫn là hướng vật lý trên trang viết từ phải sang trái; bạn tự lật nó nếu gradient cần đi theo hướng đọc.
Điểm dừng màu và điểm dừng cứng
Mỗi màu có thể có một vị trí. Không có vị trí thì các màu được chia đều. Khi hai màu chung một vị trí, màu đổi ngay lập tức, và đó là cách vẽ sọc, lá cờ hay thanh tiến độ:
Một điểm dừng cũng có thể nhận hai vị trí, #111827 12px 24px, để vẽ một dải màu đặc từ 12px đến 24px.
Conic gradient
conic-gradient() quét màu quanh một điểm tâm, giống kim đồng hồ. Với điểm dừng cứng, nó vẽ được biểu đồ tròn mà không cần hình ảnh hay JavaScript:
Biểu đồ vẽ bằng CSS là vô hình với trình đọc màn hình, nên hãy ghi cả các con số bằng chữ.
Chữ gradient
Cắt nền gradient theo hình các chữ cái và làm cho bản thân chữ trong suốt:
.gradient-text {
background: linear-gradient(90deg, #2563eb, #db2777);
-webkit-background-clip: text; /* older browsers need the prefix */
background-clip: text;
color: transparent;
}
Nhớ tính đến một màu color thường làm dự phòng: nếu việc cắt không thành công, chữ sẽ biến mất. Chữ gradient cũng có độ tương phản không đều, nên chỉ dùng cho tiêu đề lớn.
Gradient có thể xếp chồng cùng hình ảnh và các gradient khác trong một danh sách background-image; trang background image trình bày về lớp, kích thước và vị trí.
Lỗi thường gặp
background-color: linear-gradient(...). Gradient là hình ảnh: dùngbackground-imagehoặcbackground.- Góc quay sai hướng. 0deg hướng lên trên, không phải sang phải.
90degmới hướng sang phải. - Gradient trên phần tử không có chiều cao. Không có gì hiện ra; hãy cho nó nội dung hoặc kích thước.
- Màu ở giữa bị đục. Chuyển giữa hai màu đậm đối lập, như đỏ và xanh lá, sẽ đi qua màu nâu xám trong sRGB. Thêm một điểm dừng ở giữa, hoặc chuyển màu trong một không gian màu khác:
linear-gradient(in oklch, red, green). - Gradient lớn, nhạt bị phân dải. Các màu quá gần nhau trên một vùng rộng sẽ lộ ra từng bậc; tăng độ tương phản giữa các điểm dừng một chút sẽ đỡ hơn.
Câu hỏi thường gặp
Làm sao tạo radial gradient trong CSS?
Dùng background-image: radial-gradient(#93c5fd, #1e3a8a);. Thêm hình dạng và vị trí trước các màu, chẳng hạn radial-gradient(circle at top left, #93c5fd, #1e3a8a).
circle và ellipse trong radial-gradient khác nhau thế nào?
ellipse (mặc định) giãn theo tỷ lệ của hộp, nên hộp rộng thì gradient cũng rộng. circle giữ gradient tròn bất kể hộp có hình dạng gì.
Làm sao đặt hướng cho linear gradient?
Đặt hướng hoặc góc ở đầu: linear-gradient(to right, red, blue) hoặc linear-gradient(45deg, red, blue). Mặc định là to bottom (180deg); 0deg hướng lên trên và góc quay theo chiều kim đồng hồ.
Làm sao tạo sọc rõ nét thay vì chuyển màu mượt?
Cho hai màu cùng một vị trí dừng: linear-gradient(90deg, #2563eb 50%, #f59e0b 50%) đổi màu ngay ở giữa mà không chuyển tiếp. repeating-linear-gradient lặp lại một mẫu gồm các điểm dừng như vậy.
Có dùng gradient cho background-color được không?
Không. Gradient là một hình ảnh, nên nó thuộc về background-image hoặc cách viết tắt background. background-color: linear-gradient(...) không hợp lệ và bị bỏ qua.