Menu

Font weight trong CSS: in đậm, thang 100 đến 900 và ví dụ

Thuộc tính font-weight làm chữ đậm, mảnh hoặc bất kỳ mức nào ở giữa. Tìm hiểu thang số từ 100 đến 900, normal và bold, hai giá trị tương đối bolder và lighter, và vì sao đôi khi đổi độ đậm mà không thấy gì thay đổ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ách in đậm chữ bằng CSS

font-weight quy định nét chữ dày hay mỏng. bold (tương đương 700) làm chữ đậm, còn normal (tương đương 400) là chữ thường.

Tiêu đề, <th>, <b> và <strong> mặc định in đậm do stylesheet riêng của trình duyệt, nên font-weight: normal là cách bỏ in đậm. Để biết khi nào dùng <b> hay <strong> ngay trong HTML, xem in đậm trong HTML.

Thang số: từ 100 đến 900

Các con số có tên chuẩn mà các họ font tuân theo:

Giá trịTên thường gọi
100Thin
200Extra Light
300Light
400Normal (Regular)
500Medium
600Semi Bold
700Bold
800Extra Bold
900Black (Heavy)

Mọi số từ 1 đến 1000 đều hợp lệ, nên 450 và 650 cũng được. Bạn có thấy khác biệt hay không tùy vào font: trình duyệt chỉ vẽ được những độ đậm mà font thực sự có.

system-ui là font giao diện của hệ điều hành, thường có nhiều độ đậm. Nếu mọi dòng ở trên trông như chỉ có hai mức, font hệ thống của bạn chỉ có chữ thường và chữ đậm.

Vì sao đổi độ đậm mà không thấy thay đổi

Một font là một bộ tệp, thường mỗi độ đậm một tệp. Khi thiếu đúng độ đậm cần dùng, trình duyệt chọn độ đậm gần nhất mà nó có:

  • Với 500, nó thử 500, rồi các mức mảnh hơn, rồi các mức đậm hơn.
  • Với 600 trở lên, nó thử các mức đậm hơn trước, rồi mới đến các mức mảnh hơn.
  • Nếu hoàn toàn không có tệp chữ đậm, phần lớn trình duyệt sẽ giả lập bằng cách làm dày nét chữ thường (synthetic bold).

So sánh một font có nhiều độ đậm với serif, font mà trên phần lớn hệ thống chỉ có chữ thường và chữ đậm:

Ở cột serif, 300 và 500 thường rơi về kiểu chữ thường còn 600 rơi về kiểu chữ đậm. Đó là câu trả lời cho phần lớn thắc mắc "font-weight không hoạt động": CSS không sai, chỉ là font thiếu độ đậm đó. Một variable font (một tệp duy nhất có trục độ đậm) vẽ mượt mọi giá trị trong khoảng độ đậm của nó.

bolder và lighter

bolder và lighter tính theo độ đậm mà phần tử kế thừa. Chúng nhảy sang nhóm độ đậm kế tiếp thay vì cộng thêm một lượng cố định:

Độ đậm của phần tử chabolder cho ralighter cho ra
100 đến 349400100
350 đến 549700100
550 đến 749900400
750 đến 900900700

Mẫu thực tế: thang độ đậm bằng biến

Chọn ba hoặc bốn độ đậm cho toàn bộ trang web và đặt tên cho chúng, thay vì rải các con số khắp nơi:

:root {
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-bold: 700;
}
body   { font-weight: var(--weight-regular); }
button { font-weight: var(--weight-medium); }
h1, h2 { font-weight: var(--weight-bold); }

Lỗi thường gặp

  • Mong mọi con số đều trông khác nhau. Chỉ những độ đậm có trong font mới hiển thị khác biệt.
  • Dùng <b> cho nhãn nút. Định dạng nút bằng font-weight; để dành <b> và <strong> cho văn bản.
  • Đặt con số trong dấu nháy. font-weight: "700" không hợp lệ và bị bỏ qua. Viết font-weight: 700.
  • In đậm để nhấn mạnh ở khắp nơi. Khi mọi thứ đều đậm, không có gì nổi bật. Giữ chữ thân trang ở 400.
  • Dùng độ đậm mảnh cho chữ nhỏ. Từ 100 đến 300 ở cỡ nhỏ rất khó đọc, nhất là trên nền có độ tương phản thấp.

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

Làm sao in đậm chữ bằng CSS?

Dùng font-weight: bold; hoặc con số tương đương font-weight: 700; cho phần tử. Để bỏ in đậm khỏi một tiêu đề hay thẻ <strong>, đặt font-weight: normal; (400).

font-weight có những giá trị nào?

Các số từ 1 đến 1000, thường viết theo hàng trăm: 100 thin, 200 extra light, 300 light, 400 normal, 500 medium, 600 semibold, 700 bold, 800 extra bold, 900 black. Từ khóa normal và bold là 400 và 700, còn bolder và lighter tính theo phần tử cha.

font-weight bold có giống 700 không?

Có. bold được tính thành 700 và normal được tính thành 400, nên hai cách viết hiển thị giống hệt nhau.

Vì sao font-weight 500 hoặc 600 trông giống normal hoặc bold?

Vì font không có độ đậm đó. Khi một font chỉ có 400 và 700, trình duyệt chọn tệp gần nhất có sẵn, nên 500 hiển thị như 400 và 600 như 700. Hãy tải font có nhiều độ đậm hơn hoặc một variable font.

Nên dùng font-weight trong CSS hay thẻ <b>?

Dùng <strong> khi nội dung quan trọng, <b> cho chữ chỉ cần trình bày khác đi, và font-weight cho thiết kế giao diện như nút, nhãn và tiêu đề. Các thẻ mang ý nghĩa; thuộc tính chỉ là vẻ ngoài.

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