Cách gạch chân chữ trong CSS
text-decoration: underline vẽ một đường dưới chữ. Đường này lấy màu chữ, trừ khi bạn đặt màu riêng cho nó.
Dòng thứ hai dùng cách viết gọn text-decoration cho loại đường, kiểu và màu, rồi đặt độ dày và khoảng cách bằng các thuộc tính riêng. Đặc tả cũng cho phép ghi độ dày trong cách viết gọn, nhưng Safari bỏ qua cả khai báo khi có nó, nên hãy viết text-decoration-thickness riêng.
Các thuộc tính text-decoration
| Thuộc tính | Giá trị | Mặc định |
|---|---|---|
text-decoration-line | underline, overline, line-through, none (có thể kết hợp) | none |
text-decoration-style | solid, double, dotted, dashed, wavy | solid |
text-decoration-color | Màu bất kỳ | currentColor (màu chữ) |
text-decoration-thickness | Một độ dài, một phần trăm, auto, from-font | auto |
text-underline-offset | Một độ dài, một phần trăm, auto | auto |
text-decoration là cách viết gọn cho bốn thuộc tính đầu, nhưng đừng đưa độ dày vào đó: Safari bỏ qua khai báo text-decoration có chứa độ dày. text-underline-offset là thuộc tính riêng và phải viết tách ra.
Kiểu, màu và độ dày
Dời đường gạch chân: text-underline-offset
Mặc định, đường gạch nằm sát các chữ cái và chừa khoảng trống quanh phần đuôi chữ như g, p và y. text-underline-offset đẩy nó xuống thấp hơn, thường trông gọn gàng hơn trên tiêu đề và liên kết:
Khoảng trống quanh phần đuôi chữ là do text-decoration-skip-ink: auto, được bật mặc định. Đặt nó thành none để có đường gạch liền mạch.
Bỏ gạch chân của liên kết
Liên kết được gạch chân bởi stylesheet mặc định của trình duyệt. text-decoration: none bỏ đường gạch này. Vì nhiều người đọc nhận ra liên kết nhờ gạch chân, hãy hiện lại nó khi hover và khi focus bằng bàn phím, và cho liên kết một màu khác với chữ thường:
Thanh điều hướng và nút là chỗ hợp lý để bỏ gạch chân, vì vị trí của chúng đã cho thấy đó là "liên kết". Trong một đoạn văn, hãy giữ gạch chân. Xem thêm về các trạng thái của liên kết ở trang hover.
Gạch trên và gạch ngang
text-decoration-line cũng vẽ được đường phía trên chữ hoặc xuyên qua chữ, và nhận nhiều giá trị cùng lúc:
.old-price { text-decoration: line-through; }
.both { text-decoration-line: underline overline; }
Gạch ngang bằng CSS chỉ mang tính hiển thị. Khi chữ là nội dung đã bị xóa (giá đã thay đổi, mục đã bị bỏ), hãy đánh dấu bằng <s> hoặc <del>, như trang gạch chân HTML hướng dẫn, để ý nghĩa nằm trong mã HTML chứ không chỉ ở phần định dạng.
Lỗi thường gặp
- Dùng
<u>để gạch chân cho đẹp.<u>dành cho chữ được đánh dấu là khác biệt, như lỗi chính tả. Muốn gạch chân để trang trí, hãy dùng CSS. - Gạch chân chữ không phải liên kết. Người đọc sẽ thử bấm vào. Hãy dùng chữ đậm, màu hoặc nền để nhấn mạnh.
- Bỏ gạch chân liên kết trong nội dung mà không có dấu hiệu khác thay thế. Chỉ riêng màu là chưa đủ với người không phân biệt được màu.
- Cố bỏ gạch chân của phần tử cha từ phần tử con. Không thể gỡ nó từ bên trong; hãy sửa phần tử cha hoặc cho phần tử con
inline-block. - Tưởng
text-underline-offsetnằm trong cách viết gọn. Nó là một thuộc tính riêng. - Đưa độ dày vào cách viết gọn.
text-decoration: underline 2pxchạy được trên Chrome và Firefox, nhưng Safari bỏ qua cả khai báo. Hãy dùngtext-decoration-thickness.
Câu hỏi thường gặp
Làm sao gạch chân chữ trong CSS?
Dùng text-decoration: underline; trên phần tử. Để tùy chỉnh đường gạch, thêm text-decoration-color, text-decoration-style, text-decoration-thickness và text-underline-offset.
Làm sao bỏ gạch chân của liên kết?
Đặt text-decoration: none; trên phần tử a. Nhớ để liên kết vẫn nổi bật theo cách khác (màu riêng cộng với gạch chân khi hover hoặc focus), vì nhiều người đọc dựa vào gạch chân để nhận ra liên kết.
Làm sao đổi màu gạch chân?
Dùng text-decoration-color, hoặc cách viết gọn: text-decoration: underline #f59e0b;. Nếu không đặt, đường gạch dùng màu chữ.
Làm sao tạo khoảng cách giữa chữ và đường gạch chân?
Dùng text-underline-offset, ví dụ text-underline-offset: 4px;. Giá trị càng lớn, đường gạch càng nằm xa phía dưới chữ.
Vì sao không bỏ được gạch chân trên phần tử con?
Đường gạch chân do phần tử cha vẽ được trải qua cả các phần tử con và không thể gỡ từ bên trong chúng. Hãy bỏ nó trên chính phần tử đặt ra nó, hoặc cho phần tử con display: inline-block, vì trang trí của phần tử cha không chạm tới kiểu hiển thị này.