Це дуже давнє запитання, але я його переглядаю, оскільки у мене була ця проблема в додатку, який я розробляю, і я знайшов усі відповіді тут бажаючими.
(Пропустіть цей абзац для TL; DR ...)Я використовую веб-шрифт Gotham з cloud.typography.com, і у мене є кнопки, які починаються порожними (з білою облямівкою / текстом і прозорим фоном) і набувають колір тла при наведенні курсору. Я виявив, що деякі кольори тла, які я використовував, не добре контрастували з білим текстом, тому я хотів змінити текст на чорний для цих кнопок, але - чи то через візуальний трюк чи звичайні методи згладжування - темний Текст на світлому тлі завжди здається легшим, ніж білий текст на темному тлі. Я виявив, що збільшення ваги з 400 до 500 для темного тексту підтримувало майже таку саму «візуальну» вагу. Однак це збільшувало ширину кнопки на невелику кількість - частку пікселя, - але цього було достатньо, щоб кнопки трохи «тремтіли», чого я хотів позбутися.
Рішення:
Очевидно, це справді хитра проблема, тому вона вимагала прискіпливого рішення. Зрештою, я використав мінус letter-spacing
на сміливіший текст, як рекомендовано вище cgTag, але 1px був би надмірним, тому я просто обчислив саме ту ширину, яка мені знадобиться.
Оглянувши кнопку в Chrome devtools, я виявив, що ширина моєї кнопки за замовчуванням становила 165,47px, а 165,69px на наведення курсора, різниця 0,22px. На кнопці було 9 символів, отже:
0,22 / 9 = 0,024444px
Перетворивши це в em одиниці, я міг зробити регулювання розміру шрифту агностичним. Моя кнопка використовувала шрифт розміром 16 пікселів, так що:
0,024444 / 16 = 0,001527ем
Отже, для мого конкретного шрифту наступний CSS зберігає кнопки точно такої ж ширини при наведенні:
.btn {
font-weight: 400;
}
.btn:hover {
font-weight: 500;
letter-spacing: -0.001527em;
}
Трохи випробувавшись і скориставшись вищезазначеною формулою, ви зможете знайти саме правильне letter-spacing
значення для вашої ситуації, і воно повинно працювати незалежно від розміру шрифту.
Одне застереження полягає в тому, що різні веб-переглядачі використовують дещо різні обчислення підпікселів, тому якщо ви прагнете до цього рівня OCD, що відповідає ідеальній піксельній точності, вам потрібно буде повторити тестування та встановити інше значення для кожного браузера. Стилі CSS, орієнтовані на веб-переглядачі, як правило, нахмурені з поважної причини, але я думаю, що це єдиний випадок використання, коли це єдиний варіант, який має сенс.