Cách đặt màu nền
background-color tô màu cho hộp của một phần tử, gồm cả padding và vùng nằm dưới đường viền. Thuộc tính này nhận mọi giá trị màu CSS.
Màu trang được đặt trên body, tấm thẻ và thông báo trên các div của chúng, còn phần tô sáng trên một phần tử inline. Phần tử inline chỉ có nền phía sau chữ, theo từng dòng.
Màu nền của cả trang
Đặt background-color cho body. Nếu phần tử <html> không có nền riêng, trình duyệt vẽ nền của body lên toàn bộ cửa sổ, kể cả chỗ nội dung của body đã hết:
body {
background-color: #111827;
color: #f9fafb; /* change the text color too, for contrast */
}
Cách cũ trong HTML là <body bgcolor="black">. Thuộc tính bgcolor đã lỗi thời trên mọi phần tử, nên hãy dùng CSS. Trình duyệt vẫn hỗ trợ nó cho các trang cũ, vì vậy có vẻ như nó vẫn hoạt động.
Nền trong suốt
Mọi phần tử đều bắt đầu với background-color: transparent, nên bạn nhìn thấy phần tử cha phía sau. Để phủ một lớp màu lên hộp mà vẫn nhìn xuyên qua được, dùng màu có kênh alpha:
opacity: 0.5 cũng để các sọc hiện qua, nhưng làm mờ luôn cả chữ. Muốn nền nhìn xuyên qua được mà chữ vẫn rõ, hãy dùng màu alpha. Trang màu sắc liệt kê mọi cách viết màu.
Màu được tô đến đâu
Theo mặc định, nền phủ đến mép ngoài của đường viền (nên nó hiện qua đường viền nét đứt hoặc bán trong suốt). background-clip thay đổi điều đó:
Ở hộp thứ nhất, màu hổ phách hiện giữa các nét đứt. Ở hộp thứ hai, màu dừng ở mép trong của đường viền, còn ở hộp thứ ba chỉ vùng nội dung được tô màu. Margin không bao giờ được tô: nó luôn trong suốt.
Bảng có hàng sọc
Tô nền cho các hàng xen kẽ giúp bảng rộng dễ dò hơn:
background-color và cách viết rút gọn background
background đặt mọi thuộc tính nền cùng lúc. Phần nào bạn bỏ trống sẽ quay về giá trị mặc định, và điều này hay làm người ta bất ngờ:
.hero {
background-image: linear-gradient(#2563eb, #1e40af);
background: #111827; /* also resets background-image to none */
}
.hero {
background-image: linear-gradient(#2563eb, #1e40af);
background-color: #111827; /* only the color; the gradient stays */
}
Dùng background-color khi bạn chỉ muốn đặt màu. Dùng background khi bạn đặt toàn bộ nền ở một chỗ, thường là màu kèm ảnh; xem background-image.
Trợ năng: luôn đi cùng màu chữ
Màu nền chỉ dễ đọc khi đặt cạnh màu chữ phù hợp. Mỗi khi đặt một màu, hãy kiểm tra màu còn lại: WCAG yêu cầu tỷ lệ tương phản tối thiểu 4,5:1 cho chữ nội dung. Nền tối cần đặt rõ màu chữ sáng, vì chữ vẫn giữ màu tối được kế thừa.
Lỗi thường gặp
- Dùng
bgcolor. Thuộc tính này đã lỗi thời. Hãy dùngbackground-color. - Dùng
opacityđể làm nền trong suốt. Nó làm mờ cả nội dung. Hãy dùng màu alpha. - Viết
backgroundrút gọn saubackground-image. Nó đặt lại ảnh nền. Hãy viếtbackground-color. - Mong margin hiện màu nền. Margin nằm ngoài vùng nền. Dùng padding nếu cần khoảng trống có màu.
- Nền tối với chữ mặc định. Hãy đặt thêm
colorsáng.
Câu hỏi thường gặp
Làm sao đổi màu nền trong HTML?
Dùng thuộc tính CSS background-color. Cho cả trang: body { background-color: #f3f4f6; }. Cho một phần tử: <div style="background-color: #fef3c7;">.
bgcolor còn dùng được trong HTML không?
Không. Thuộc tính bgcolor trên <body>, <table> và <td> đã lỗi thời trong HTML5. Trình duyệt vẫn vẽ nó cho các trang cũ, nhưng cách đúng là background-color trong CSS.
Làm sao tạo màu nền trong suốt?
Dùng màu có kênh alpha, ví dụ background-color: rgb(37 99 235 / 20%);. Khác với opacity, cách này giữ chữ bên trong hiện rõ hoàn toàn.
background và background-color khác nhau thế nào?
background-color chỉ đặt màu. background là cách viết rút gọn cho mọi thuộc tính nền (màu, ảnh, vị trí, kích thước, lặp, attachment, origin và clip), nên background: red; cũng đặt lại ảnh nền về none.
Vì sao màu nền của body phủ kín cả cửa sổ?
Khi phần tử <html> không có nền riêng, trình duyệt vẽ nền của body lên toàn bộ canvas, kể cả ngoài hộp của body. Hãy đặt nền cho html nếu bạn cần hai màu khác nhau.