Bu çok eski bir soru, ama tekrar gözden geçiriyorum çünkü geliştirdiğim bir uygulamada bu problemi yaşadım ve tüm cevapları burada isteyerek buldum.
(TL için bu paragrafı atlayın; DR ...)Cloud.typography.com'dan Gotham web yazı tipini kullanıyorum ve içi boş (beyaz bir kenarlık / metin ve şeffaf bir arka plan ile) başlayan ve üzerine gelindiğinde bir arka plan rengi elde eden düğmelerim var. Kullandığım arka plan renklerinden bazılarının beyaz metinle iyi bir kontrast oluşturmadığını fark ettim, bu yüzden bu düğmeler için metni siyaha çevirmek istedim, ancak - ister görsel bir numara ister yaygın kenar yumuşatma yöntemleri nedeniyle - koyu açık renkli arka plan üzerindeki metin her zaman koyu arka plan üzerindeki beyaz metinden daha hafif görünür. Koyu metin için ağırlığı 400'den 500'e çıkarmanın neredeyse tamamen aynı "görsel" ağırlığı koruduğunu buldum. Bununla birlikte, düğme genişliğini küçücük bir miktar artırıyordu - bir pikselin bir kısmı - ama bu, düğmelerin biraz "titriyor" gibi görünmesini sağlamak için yeterliydi ki bundan kurtulmak istedim.
Çözüm:
Açıkçası, bu gerçekten titiz bir problem, bu yüzden titiz bir çözüm gerektiriyordu. Sonunda letter-spacing
cgTag'in yukarıda önerdiği gibi daha kalın metinde bir negatif kullandım , ancak 1px çok fazla olurdu, bu yüzden tam olarak ihtiyacım olan genişliği hesapladım.
Chrome geliştirme araçlarındaki düğmeyi inceleyerek, düğmemin varsayılan genişliğinin 165.47px ve üzerine gelindiğinde 165.69px olduğunu buldum, bu fark 0.22px. Düğmede 9 karakter vardı, bu nedenle:
0,22 / 9 = 0,024444 piksel
Bunu em birimlerine dönüştürerek yazı tipi boyutunu agnostik yapabilirim. Düğmem 16px yazı tipi boyutu kullanıyordu, bu nedenle:
0,024444 / 16 = 0,001527em
Dolayısıyla, benim özel yazı tipim için, aşağıdaki CSS, düğmeleri fareyle üzerine gelindiğinde tam olarak aynı genişlikte tutar :
.btn {
font-weight: 400;
}
.btn:hover {
font-weight: 500;
letter-spacing: -0.001527em;
}
Biraz test ederek ve yukarıdaki formülü kullanarak, letter-spacing
durumunuz için tam olarak doğru değeri bulabilirsiniz ve yazı tipi boyutundan bağımsız olarak çalışmalıdır.
Bir uyarı, farklı tarayıcıların biraz farklı alt piksel hesaplamaları kullanmasıdır; bu nedenle, bu OKB düzeyindeki piksel altı hassaslık düzeyini hedefliyorsanız, testi tekrarlamanız ve her tarayıcı için farklı bir değer ayarlamanız gerekir. Tarayıcı hedefli CSS stilleri genellikle iyi bir nedenden ötürü hoş karşılanmaz , ancak bunun mantıklı olan tek seçenek olduğu bir kullanım durumu olduğunu düşünüyorum.