Đây là một câu hỏi rất cũ, nhưng tôi đang xem lại vì tôi đã gặp sự cố này trong một ứng dụng mà tôi đang phát triển và tìm thấy tất cả các câu trả lời ở đây.
(Bỏ qua đoạn này vì TL; DR ...)Tôi đang sử dụng webfont của Gotham từ cloud.typography.com và tôi có các nút bắt đầu rỗng (với đường viền / văn bản màu trắng và nền trong suốt) và có được màu nền khi di chuột. Tôi nhận thấy rằng một số màu nền mà tôi đang sử dụng không tương phản tốt với văn bản màu trắng, vì vậy tôi muốn thay đổi văn bản thành màu đen cho các nút đó, nhưng - cho dù là do đánh lừa thị giác hay các phương pháp khử răng cưa thông thường - tối văn bản trên nền sáng dường như luôn có trọng lượng nhẹ hơn văn bản màu trắng trên nền tối. Tôi thấy rằng việc tăng trọng lượng từ 400 lên 500 cho văn bản tối duy trì gần như chính xác trọng lượng "trực quan". Tuy nhiên, nó đang tăng chiều rộng của nút lên một lượng nhỏ - một phần nhỏ của pixel - nhưng nó đủ để làm cho các nút có vẻ hơi "chập chờn", điều mà tôi muốn loại bỏ.
Giải pháp:
Rõ ràng, đây là một vấn đề thực sự khó khăn vì vậy nó đòi hỏi một giải pháp phức tạp. Cuối cùng, tôi đã sử dụng một tiêu cực letter-spacing
trên văn bản đậm hơn như cgTag được đề xuất ở trên, nhưng 1px sẽ là quá mức cần thiết, vì vậy tôi chỉ tính toán chính xác chiều rộng mà tôi cần.
Bằng cách kiểm tra nút trong Chrome devtools, tôi thấy rằng chiều rộng mặc định của nút là 165,47px và 165,69px khi di chuột, chênh lệch 0,22px. Nút có 9 ký tự, vì vậy:
0,22 / 9 = 0,024444px
Bằng cách chuyển đổi đơn vị đó sang đơn vị em, tôi có thể làm cho kích thước phông chữ điều chỉnh là bất khả tri. Nút của tôi đang sử dụng kích thước phông chữ là 16px, vì vậy:
0,024444 / 16 = 0,001527em
Vì vậy, cho phông chữ riêng của tôi, CSS sau đây giữ các nút chính xác cùng một chiều rộng trên di chuột:
.btn {
font-weight: 400;
}
.btn:hover {
font-weight: 500;
letter-spacing: -0.001527em;
}
Với một chút thử nghiệm và sử dụng công thức ở trên, bạn có thể tìm thấy chính xác letter-spacing
giá trị phù hợp cho tình huống của mình và nó sẽ hoạt động bất kể kích thước phông chữ.
Một lưu ý là các trình duyệt khác nhau sử dụng các phép tính điểm ảnh phụ hơi khác nhau, vì vậy nếu bạn đang hướng tới mức độ chính xác hoàn hảo của điểm ảnh phụ OCD này, bạn sẽ cần lặp lại thử nghiệm và đặt một giá trị khác cho từng trình duyệt. Vì lý do chính đáng, các kiểu CSS nhắm mục tiêu theo trình duyệt thường không được ưa chuộng , nhưng tôi nghĩ đây là một trường hợp sử dụng mà nó là lựa chọn duy nhất có lý.