line-height làm gì
line-height đặt chiều cao của mỗi dòng chữ. Phần chênh lệch giữa chiều cao đó và chiều cao mà font thực sự cần được chia đôi, thêm vào phía trên và phía dưới các chữ, nên đây chính là cách bạn điều chỉnh khoảng cách giữa các dòng.
Cả ba đoạn văn đều dùng font 16px. Các dòng lần lượt cao 16px, 24px và 32px.
Các loại giá trị: không đơn vị, độ dài, phần trăm, normal
| Giá trị | Ví dụ | Chiều cao dòng với chữ 16px | Phần tử con kế thừa dưới dạng |
|---|---|---|---|
| Số | 1.5 | 24px | Chính con số (1.5), tính lại cho từng phần tử |
| Độ dài | 24px, 1.5em, 1.5rem | 24px | Độ dài đã tính (24px) |
| Phần trăm | 150% | 24px | Độ dài đã tính (24px) |
normal | normal | Lấy từ font, thường khoảng 1,2 | normal |
Trên một phần tử, hàng thứ nhất và thứ hai trông giống hệt nhau. Khác biệt chỉ lộ ra khi phần tử con có cỡ chữ khác, và đó là nội dung của phần tiếp theo.
Vì sao không đơn vị là lựa chọn mặc định đúng
Line height 1.5em hay 150% được đổi ra pixel ngay trên phần tử cha, và phần tử con kế thừa số pixel đó. Khi đó một phần tử con có chữ lớn hơn sẽ nhận dòng thấp hơn cả chữ của nó. Còn 1.5 không đơn vị được kế thừa nguyên con số và nhân với cỡ chữ riêng của từng phần tử con.
Cả hai tiêu đề đều xuống thành hai dòng. Tiêu đề đầu kế thừa dòng 21px cho chữ 32px, nên các dòng chồng lên nhau. Tiêu đề thứ hai nhận dòng 32 × 1.5 = 48px. Chỉ cần đặt line-height một lần trên body bằng một con số, phần lớn trang web sẽ không bao giờ phải đụng lại.
Tự thử các giá trị
Hãy thử 1, 2, 30px, 200% và normal. Chrome báo normal đúng bằng từ đó chứ không đổi ra pixel, vì kích thước của nó đến từ font.
Giá trị nên dùng để văn bản dễ đọc
- Đoạn văn: từ 1,4 đến 1,6. Dòng càng dài càng cần line height lớn để mắt dễ tìm đầu dòng tiếp theo.
- Tiêu đề: từ 1,1 đến 1,3. Chữ lớn mà giãn dòng 1,5 trông như các dòng rời rạc chứ không còn là một tiêu đề.
- Nút và nhãn một dòng: từ 1 đến 1,25, dùng padding để tạo chiều cao.
Về khả năng tiếp cận, tiêu chí thành công 1.4.12 của WCAG yêu cầu trang vẫn dùng được khi người đọc đặt line height bằng 1,5 lần cỡ chữ, nên tránh đặt chiều cao cố định cho hộp chữ vì chữ có thể bị cắt.
Căn giữa theo chiều dọc một dòng chữ
Khi một hộp chỉ chứa đúng một dòng, đặt line-height bằng chiều cao của hộp sẽ đưa chữ vào chính giữa theo chiều dọc, vì phần dư được chia đều lên trên và xuống dưới:
Cách này hỏng ngay khi chữ xuống thành hai dòng, vì lúc đó mỗi dòng cao 40px. Với nội dung có thể xuống dòng, hãy căn giữa bằng flexbox, như trong trang căn giữa một div.
Thuộc tính viết tắt font
Thuộc tính viết tắt font đặt cỡ chữ và line height cùng lúc, ngăn cách bằng dấu gạch chéo:
body {
font: 16px/1.5 system-ui, sans-serif; /* size 16px, line-height 1.5 */
}
Thuộc tính viết tắt này đặt lại mọi thuộc tính font mà nó không nhắc đến (kể cả đưa line-height về normal khi bạn bỏ phần sau dấu gạch chéo), nên hãy viết nó trước các quy tắc font-* riêng lẻ.
Lỗi thường gặp
- Dùng
emhoặc%trên phần tử chứa. Phần tử con sẽ kế thừa một độ dài cố định. Hãy dùng số không đơn vị. - Đặt
heightcố định cho hộp chữ. Khi chữ xuống dòng hoặc người đọc tăng khoảng cách, chữ sẽ tràn ra ngoài. Hãy để nội dung quyết định chiều cao. - Đoạn văn quá sát.
line-height: 1khiến đoạn văn khó đọc. Hãy bắt đầu từ 1,5. - Mong
line-heighttạo khoảng cách giữa các đoạn văn. Đó là việc củamargintrên các đoạn văn. - Dựa vào
normal. Giá trị này thay đổi theo từng font, nên bố cục sẽ xê dịch khi đổi font.
Câu hỏi thường gặp
line-height trong CSS dùng để làm gì?
Thuộc tính này đặt chiều cao của mỗi hộp dòng chữ. Phần chiều cao dư ra so với chiều cao của chính font được chia đều lên trên và xuống dưới các chữ, nên line-height càng lớn thì các dòng càng cách xa nhau.
line-height có cần đơn vị không?
Thường là không. Giá trị không đơn vị như 1.5 được nhân với cỡ chữ của từng phần tử, nên vẫn giữ đúng tỷ lệ ở phần tử con có cỡ chữ khác. Giá trị có đơn vị chỉ được tính một lần rồi kế thừa dưới dạng một độ dài cố định.
line-height bao nhiêu là đẹp cho văn bản?
Từ 1,4 đến 1,6 cho đoạn văn, và khoảng 1,1 đến 1,3 cho tiêu đề lớn. Hướng dẫn mức AAA của WCAG yêu cầu tối thiểu 1,5 cho đoạn văn.
line-height: normal là gì?
Là giá trị mặc định. Trình duyệt lấy giá trị từ thông số của chính font, thường khoảng 1,2 nhưng mỗi font một khác, nên không thể đoán trước khi đổi font.
Làm sao chỉnh khoảng cách dòng trong HTML?
HTML không có thuộc tính nào cho khoảng cách dòng. Hãy dùng thuộc tính CSS, ví dụ <p style="line-height: 2;"> để giãn dòng gấp đôi.