Kiểu chữ

Nếu bạn không chỉ định kiểu nào cho văn bản của mình, thì trình duyệt sẽ áp dụng kiểu mặc định riêng. Đây được gọi là biểu định kiểu Tác nhân người dùng và có thể khác nhau tuỳ theo trình duyệt. Người dùng cũng có thể thiết lập các lựa chọn ưu tiên về việc hiển thị văn bản.

Nếu bạn không chỉ định độ dài dòng, trình duyệt sẽ ngắt dòng văn bản ở cạnh màn hình. Vì vậy, theo mặc định, văn bản trên web sẽ phản hồi để phù hợp với khung nhìn của người dùng.

Tuy nhiên, chỉ vì văn bản vừa với màn hình không có nghĩa là sẽ đọc thoải mái. Kiểu chữ tốt là việc trình bày văn bản của bạn theo cách phù hợp. Có nhiều yếu tố liên quan đến kiểu chữ hơn là chọn phông chữ phù hợp để sử dụng. Bạn cần xem xét sở thích của người dùng, kích thước văn bản, độ dài dòng và khoảng cách giữa các dòng văn bản.

Cỡ chữ

Thật khó để biết nên đặt kích thước văn bản trên web.

Nếu ai đó đang sử dụng màn hình nhỏ, thì có thể tin rằng màn hình sẽ khá gần với mắt, cách một bàn tay.

Nhưng khi màn hình ngày càng lớn hơn, sẽ khó tạo ra kết nối đó hơn. Màn hình máy tính xách tay có thể sẽ khá gần người xem, nhưng màn hình máy tính để bàn có kích thước tương đương với màn hình TV. Mọi người ngồi cách màn hình máy tính một cánh tay nhưng lại ngồi xa TV hơn nhiều.

Tuy nhiên, mặc dù bạn không thể biết chắc chắn một người đang cách màn hình bao xa, bạn có thể thử sử dụng kích thước văn bản với hy vọng là phù hợp. Sử dụng kích thước văn bản nhỏ hơn cho màn hình nhỏ hơn và kích thước văn bản lớn hơn cho màn hình lớn hơn.

Bạn có thể sử dụng truy vấn đa phương tiện để thay đổi thuộc tính font-size khi kích thước màn hình trở nên rộng hơn.

@media (min-width: 30em) {
  html {
    font-size: 125%;
  }
}

@media (min-width: 40em) {
  html {
    font-size: 150%;
  }
}

@media (min-width: 50em) {
  html {
    font-size: 175%;
  }
}

@media (min-width: 60em) {
  html {
    font-size: 200%;
  }
}

Chuyển tỷ lệ văn bản

Việc chuyển đổi giữa các kích thước văn bản cố định tại các điểm ngắt cụ thể khá linh hoạt. Một phương pháp thích ứng hơn là cho phép chiều rộng thiết bị của người dùng tác động đến kích thước văn bản.

Đơn vị vw trong CSS là viết tắt của "chiều rộng khung nhìn". Kết nối kích thước phông chữ với chiều rộng của khung nhìn có nghĩa là văn bản sẽ tăng lên và thu nhỏ tương ứng với chiều rộng của trình duyệt. Điều này gây khó khăn cho việc dự đoán kích thước văn bản sẽ là bao nhiêu ở một chiều rộng cụ thể bất kỳ, nhưng bạn biết rằng kích thước văn bản sẽ phù hợp với chiều rộng trình duyệt của người dùng.

Quan trọng là bạn không được sử dụng chính vw trong phần khai báo kích thước phông chữ.

Không nên
html {
  font-size: 2.5vw;
}

Nếu bạn làm như vậy, người dùng sẽ không đổi kích thước được văn bản. Văn bản này có thể đổi kích thước nếu bạn kết hợp trong một đơn vị tương đối – như em, rem hoặc ch. Hàm CSS calc() là lựa chọn hoàn hảo cho việc này.

Nên
html {
  font-size: calc(0.75rem + 1.5vw);
}

Hãy để trình duyệt thực hiện phép toán. Điều này gây khó khăn cho việc dự đoán chính xác kích thước văn bản sẽ là bao nhiêu ở bất kỳ chiều rộng cụ thể nào, nhưng bạn biết rằng kích thước văn bản sẽ nằm trong phạm vi phù hợp. Trình duyệt của người dùng sẽ đảm nhận việc tính toán chính xác kích thước văn bản.

Nhưng giờ đây, có khả năng văn bản sẽ quá nhỏ trên màn hình hẹp và quá lớn trên màn hình rộng.

Ghim văn bản

Có thể bạn không muốn văn bản của mình bị thu nhỏ và phát triển quá mức. Bạn có thể kiểm soát nơi bắt đầu và kết thúc việc điều chỉnh tỷ lệ bằng cách sử dụng hàm clamp() CSS. Điều này sẽ "kẹp" tỷ lệ theo tỷ lệ trong một phạm vi cụ thể.

Hàm clamp() giống như hàm calc() nhưng có 3 giá trị. Giá trị ở giữa giống với giá trị bạn truyền đến calc(). Giá trị mở chỉ định kích thước tối thiểu, trong trường hợp này là 1rem để không nhỏ hơn kích thước phông chữ mà người dùng mong muốn. Giá trị đóng chỉ định kích thước tối đa.

html {
  font-size: clamp(1rem, 0.75rem + 1.5vw, 2rem);
}

Giờ đây, kích thước văn bản sẽ thu nhỏ và tăng theo tỷ lệ với màn hình của người dùng, nhưng kích thước văn bản sẽ không bao giờ thấp hơn 1rem hoặc lớn hơn 2rem.

Độ dài của đường kẻ

Web không phải là báo in nhưng chúng ta có thể học được bài học từ thế giới báo in và áp dụng chúng trên web.

Trong cuốn sách kinh điển Các yếu tố của phong cách sắp chữ, Robert Bringhurst đã nói về độ dài dòng (hay đo lường):

Bất cứ giá trị nào từ 45 đến 75 ký tự được coi là độ dài dòng vừa ý cho trang một cột, sử dụng kiểu văn bản serif ở cỡ chữ. Dòng 66 ký tự (đếm cả chữ cái và khoảng trắng) được coi là lý tưởng. Đối với nhiều tác vụ cột, giá trị trung bình tốt hơn nên chứa 40 đến 50 ký tự.

Bạn không thể đặt độ dài dòng trực tiếp trong CSS. Không có thuộc tính line-length nào. Tuy nhiên, bạn có thể ngăn văn bản trở nên quá rộng bằng cách giới hạn chiều rộng của vùng chứa. Thuộc tính max-inline-size là lựa chọn hoàn hảo cho việc này.

Đừng đặt độ dài dòng bằng đơn vị cố định như px. Người dùng có thể tăng hoặc giảm cỡ chữ cũng như điều chỉnh độ dài dòng tương ứng. Sử dụng đơn vị tương đối như rem hoặc ch.

Không nên
article {
  max-inline-size: 700px;
}
Nên
article {
  max-inline-size: 66ch;
}

Việc sử dụng đơn vị ch cho chiều rộng sẽ khiến các dòng mới gói ở ký tự thứ 66 ở cỡ chữ đó.

Khoảng cách giữa các dòng

Mặc dù không có thuộc tính line-length trong CSS, nhưng có thuộc tính line-height.

Các dòng văn bản ngắn hơn có thể có giá trị line-height lớn hơn. Tuy nhiên, nếu bạn sử dụng các giá trị line-height lớn cho các dòng văn bản dài, thì người đọc sẽ khó di chuyển từ cuối dòng này sang đầu dòng tiếp theo.

article {
  max-inline-size: 66ch;
  line-height: 1.65;
}
blockquote {
  max-inline-size: 45ch;
  line-height: 2;
}

Sử dụng các giá trị không đơn vị cho phần khai báo line-height. Điều này đảm bảo rằng chiều cao dòng tương ứng với font-size.

Không nên
line-height: 24px;
Nên
line-height: 1.5;

Kết hợp và quy mô

Hãy nhớ ưu tiên hệ thống phân cấp khi bạn xây dựng giao diện người dùng để tăng cường tính rõ ràng và luồng trang. Một cách hiệu quả để làm việc này là sử dụng tỷ lệ kiểu chữ được tích hợp sẵn trong hệ thống thiết kế của bạn.

Phông chữ trên web

Kiểu chữ giống như giọng nói của lời nói. Trong thời gian dài nhất trên web, có rất ít lựa chọn phông chữ. Phông chữ hệ thống là lựa chọn duy nhất. Nhưng giờ đây, bạn có thể chọn phông chữ trên web phù hợp với nội dung của mình.

Dùng @font-face để cho trình duyệt biết nơi tìm các tệp phông chữ trên web. Bạn có thể dùng woff2 làm định dạng phông chữ trên web. được hỗ trợ tốt và mang lại hiệu suất tốt nhất.

@font-face {
  font-family: Roboto;
  src: url('/fonts/roboto-regular.woff2') format('woff2');
}
body {
  font-family: Roboto, sans-serif;
}

Tuy nhiên, mỗi tệp phông chữ trên web mà bạn thêm vào có thể làm giảm trải nghiệm người dùng vì tệp này làm tăng thời gian tải trang. Hãy nhớ rằng thiết kế không chỉ là giao diện của các pixel cuối cùng. Tốc độ vẽ các pixel đó là một phần quan trọng trong trải nghiệm người dùng. Một trải nghiệm nhanh là trải nghiệm tốt cho người dùng.

Đang tải phông chữ

Bạn có thể yêu cầu trình duyệt bắt đầu tải tệp phông chữ xuống càng sớm càng tốt. Thêm một phần tử link vào head của tài liệu tham chiếu đến tệp phông chữ trên web. Thuộc tính rel có giá trị preload sẽ yêu cầu trình duyệt ưu tiên tệp đó. Thuộc tính as có giá trị font cho trình duyệt biết đây là loại tệp nào. Thuộc tính type cho phép bạn cung cấp thông tin cụ thể hơn nữa.

<link href="/fonts/roboto-regular.woff2" type="font/woff2" 
  rel="preload" as="font" crossorigin>

Bạn cần thêm thuộc tính crossorigin ngay cả khi bạn tự lưu trữ các tệp phông chữ.

Sử dụng thuộc tính CSS font-display để cho trình duyệt biết cách quản lý việc chuyển đổi từ phông chữ hệ thống sang phông chữ web. Bạn có thể chọn không hiển thị văn bản cho đến khi phông chữ trên web được tải. Bạn có thể chọn hiển thị phông chữ hệ thống ngay lập tức rồi chuyển sang phông chữ trên web khi phông chữ tải xong. Cả hai chiến lược đều có những nhược điểm riêng. Nếu bạn đợi cho đến khi phông chữ trên web được tải xuống trước khi hiển thị bất kỳ văn bản nào, người dùng có thể thấy mình nhìn chằm chằm vào một trang trống trong một thời gian dài phiền toái. Nếu bạn hiển thị văn bản bằng phông chữ hệ thống trước rồi mới chuyển sang phông chữ web, người dùng có thể thấy nội dung trên trang thay đổi gây khó chịu.

Bạn nên đợi một chút trước khi hiển thị bất kỳ văn bản nào. Nếu phông chữ trên web tải trước thời gian đó, thì văn bản sẽ hiển thị bằng phông chữ trên web mà không thay đổi nội dung. Nếu phông chữ trên web vẫn chưa tải sau khi hết thời gian, thì văn bản sẽ hiển thị bằng phông chữ hệ thống để ít nhất người dùng có thể đọc được nội dung.

Hãy sử dụng giá trị font-display swap nếu bạn vẫn muốn phông chữ trên web thay thế phông chữ hệ thống bất cứ khi nào phông chữ trên web tải xong.

body {
  font-family: Roboto, sans-serif;
  font-display: swap;
}

Sử dụng giá trị font-display fallback nếu bạn muốn sử dụng phông chữ của hệ thống sau khi văn bản hiển thị.

body {
  font-family: Roboto, sans-serif;
  font-display: fallback;
}

Phông chữ biến đổi

Nếu đang sử dụng nhiều độ đậm hoặc kiểu chữ khác nhau cho cùng một kiểu chữ, bạn có thể sẽ phải sử dụng nhiều tệp phông chữ riêng biệt – một tệp phông chữ riêng biệt cho mỗi kiểu chữ hoặc độ đậm.

Phông chữ thay đổi giải quyết vấn đề này bằng cách sử dụng một tệp. Thay vì có các tệp riêng biệt cho ảnh thông thường, in đậm, in đậm, v.v., tệp phông chữ biến sẽ có tính thích ứng. Bảng này chứa tất cả thông tin cần thiết để hiển thị trên nhiều trọng số hoặc kiểu.

Chữ cái &#39;A&#39; được trình bày ở các trọng số khác nhau.

Điều này có nghĩa là một tệp phông chữ biến duy nhất sẽ lớn hơn một tệp phông chữ thông thường, nhưng một tệp phông chữ biến duy nhất có thể sẽ nhỏ hơn nhiều tệp phông chữ thông thường. Nếu bạn đang sử dụng nhiều trọng số khác nhau, thì phông chữ thay đổi có thể mang lại hiệu suất đáng kể.

Kiểu chữ hiệu quả trên web không chỉ liên quan đến cách bạn lựa chọn kiểu chữ trong vai trò nhà thiết kế. Kiểu chữ thích ứng cũng nhằm tôn trọng thiết bị và kết nối mạng của người dùng. Kết quả cuối cùng là thiết kế mang lại cảm giác phù hợp bất kể mọi người xem thiết kế như thế nào.

Giờ đây, khi bạn đã thành thạo văn bản thích ứng, đã đến lúc tìm hiểu kỹ hơn về hình ảnh thích ứng.

Kiểm tra kiến thức

Kiểm tra kiến thức về kiểu chữ

Bạn phải thêm kiểu cho văn bản để gói trong khung nhìn.

Đúng
Bạn không cần thêm kiểu.
Sai
Văn bản sẽ được xuống dòng theo mặc định mà không có bất kỳ kiểu bổ sung nào.

clamp() rất hữu ích cho kiểu chữ linh hoạt vì

Công cụ này giúp bạn dễ dàng nhúng các hàm calc()
Mặc dù điều này đúng nhưng bạn không nên dùng clamp() cho kiểu chữ.
Trình duyệt hỗ trợ tính năng này rất tuyệt vời.
Mặc dù điều này đúng nhưng bạn không nên dùng clamp() cho kiểu chữ.
Nó cho phép khoá cỡ chữ giữa giá trị tối thiểu và tối đa hợp lý, đồng thời vẫn cung cấp giá trị trung bình có thể mở rộng.
Chính xác, hãy ngăn văn bản quá nhỏ hoặc quá lớn, trong khi vẫn cung cấp kích thước phông chữ theo tỷ lệ mượt mà.
Công cụ này giúp làm toán trở nên dễ dàng.
Hãy thử lại.

Loại giá trị line-height nào được đề xuất trong hướng dẫn này?

24px
Bài đăng nêu rõ việc không sử dụng các giá trị pixel cho line-height.
2rem
Mặc dù rem là các giá trị tương đối, nhưng các rem này vẫn có thể tạo ra chiều cao dòng quá nhỏ hoặc quá lớn.
1.5
Bạn nên sử dụng các giá trị tương đối không đơn vị.
2vw
Đơn vị khung nhìn dưới dạng line-height sẽ gặp sự cố.

font-display có chức năng gì?

Cho trình duyệt biết cách quản lý việc chuyển đổi từ phông chữ hệ thống sang phông chữ trên web.
Giúp chuyển đổi sang phông chữ tuỳ chỉnh.
Cho phép đặt phông chữ thành block hoặc inline-block.
Phông chữ không có kiểu hiển thị.
Thay đổi dù phông chữ có bị ẩn hay không.
Không thể ẩn phông chữ.
Cho phép người dùng chọn thời gian khi tải phông chữ từ xa.
Giúp tác giả điều chỉnh trải nghiệm tải của phông chữ tuỳ chỉnh.