Özet
Bu makalede, yazı tipi yedeklerinin yanı sıra size-adjust
, ascent-override
, descent-override
ve line-gap-override
API'leri ayrıntılı bir şekilde ele alınmaktadır. Bu API'ler, bir web yazı tipinin boyutlarıyla yaklaşık olarak veya tam olarak eşleşen yedek yazı tipi yüzleri oluşturmak için yerel yazı tiplerinin kullanılmasını sağlar. Bu, yazı tipi değişiminden kaynaklanan düzen kaymalarını azaltır veya ortadan kaldırır.
Bu makaleyi okumayı atlamak isterseniz bu API'leri hemen kullanmaya başlamak için kullanabileceğiniz bazı araçlar şunlardır:
Çerçeve araçları:
- @next/font: Next 13'ten itibaren
next/font
, eşleşen yazı tipi yedekleri sağlamak için yazı tipi metriği geçersiz kılmalarını vesize-adjust
'ı otomatik olarak kullanır. - @nuxtjs/fontaine: Nuxt 3'ten itibaren, Nuxt uygulamanız tarafından kullanılan stil sayfalarına eşleşen yedek yazı tiplerini otomatik olarak oluşturmak ve eklemek için
nuxt/fontaine
'yi kullanabilirsiniz.
Çerçeve dışındaki araçlar:
- Fontaine: Fontaine, yazı tipi metriği geçersiz kılma işlemlerini kullanan yazı tipi yedekleri otomatik olarak oluşturup ekleyen bir kitaplıktır.
- Bu repo, Google Fonts tarafından barındırılan tüm yazı tipleri için yazı tipi metriği geçersiz kılma işlemlerini içerir. Bu değerler kopyalanıp stil sayfalarınıza yapıştırılabilir.
Arka plan
Yedek yazı tipi, birincil yazı tipi henüz yüklenmemişse veya sayfa içeriğini oluşturmak için gerekli glifler eksikse kullanılan yazı tipi yüzüdür. Örneğin, aşağıdaki CSS'de "Roboto"
için yedek yazı tipi olarak sans-serif
yazı tipi ailesinin kullanılması gerektiği belirtilmektedir.
font-family: "Roboto" , sans-serif;
Yedek yazı tipleri, metni daha hızlı oluşturmak için (font-display: swap
kullanılarak) kullanılabilir. Bunun sonucunda sayfa içeriği daha önce okunabilir ve kullanışlı hale gelir. Ancak eskiden bu durum düzen istikrarsızlığına mal olmuştur: Düzen kaymaları genellikle, yedek yazı tipi web yazı tipiyle değiştirildiğinde meydana gelir. Ancak aşağıda açıklanan yeni API'ler, web yazı tipi muadiliyle aynı miktarda yer kaplayan yedek yazı tipi yüzleri oluşturmayı mümkün kılarak bu sorunu azaltabilir veya ortadan kaldırabilir.
İyileştirilmiş yazı tipi yedekleri
"İyileştirilmiş" yazı tipi yedekleri oluşturmaya yönelik iki olası yaklaşım vardır. Daha basit yaklaşımda yalnızca yazı tipi metriği geçersiz kılma API'si kullanılır. Daha karmaşık (ancak daha güçlü) yaklaşımda hem yazı tipi metriği geçersiz kılma API'si hem de size-adjust
kullanılır. Bu makalede her iki yaklaşım da açıklanmaktadır.
Yazı tipi metriği geçersiz kılmalarının işleyiş şekli
Giriş
Yazı tipi metriği geçersiz kılmaları, bir yazı tipinin yükselişi, inişi ve çizgi aralığını geçersiz kılma imkanı sağlar:
- Yükseliş, bir yazı tipinin karakterlerinin taban çizgisinin üzerinde uzanabileceği en uzak mesafeyi ölçer.
- Düşeylik, bir yazı tipinin karakterlerinin yatay çizginin altında uzanabileceği en uzak mesafeyi ölçer.
- "Boşluk" olarak da adlandırılan satır aralığı, art arda gelen metin satırları arasındaki mesafeyi ölçer.
Yazı tipi metriği geçersiz kılma işlemleri, yedek yazı tipinin tırmanma, iniş ve satır aralığını web yazı tipinin tırmanma, iniş ve satır aralığıyla eşleşecek şekilde geçersiz kılmak için kullanılabilir. Sonuç olarak, web yazı tipi ve ayarlanmış yedek yazı tipi her zaman aynı dikey boyutlara sahip olur.
Yazı tipi metrik geçersiz kılma işlemleri aşağıdaki gibi bir stil sayfasında kullanılır:
body {
font-family: Poppins, "fallback for poppins";
}
@font-face {
font-family: "fallback for poppins";
src: local("Times New Roman");
ascent-override: 105%;
descent-override: 35%;
line-gap-override: 10%;
}
Bu makalenin başında listelenen araçlar, doğru yazı tipi metriği geçersiz kılma değerlerini oluşturabilir. Ancak bu değerleri kendiniz de hesaplayabilirsiniz.
Yazı tipi metriği geçersiz kılma işlemlerini hesaplama
Aşağıdaki denklemler, belirli bir web yazı tipi için yazı tipi metriği geçersiz kılma işlemlerini sağlar. Yazı tipi metriği geçersiz kılmalarının değerleri, ondalık sayı yerine yüzde olarak (ör. 105%
) yazılmalıdır.
ascent-override = ascent/unitsPerEm
descent-override = descent/unitsPerEm
line-gap-override = line-gap/unitsPerEm
Örneğin, Poppins yazı tipi için yazı tipi metriği geçersiz kılma işlemleri şunlardır:
/*
Poppins font metrics:
ascent = 1050
descent = 350
line-gap = 100
UPM: 1000
*/
ascent-override: 105%; /* = 1050/1000 */
descent-override: 35%; /* = 350/1000 */
line-gap-override: 10%; /* = 100/1000 */
ascent
, descent
, line-gap
ve unitsPerEm
değerlerinin tümü web yazı tipinin meta verilerinden gelir. Bu makalenin bir sonraki bölümünde bu değerlerin nasıl elde edileceği açıklanmaktadır.
Yazı tipi tablolarının okunması
Bir yazı tipinin meta verileri (özellikle yazı tipi tabloları), yazı tipi metriği geçersiz kılmalarını hesaplamak için ihtiyaç duyacağınız tüm bilgileri içerir.
Bir yazı tipinin meta verilerini okumak için kullanabileceğiniz bazı araçlar şunlardır:
- fontkit, Node.js için geliştirilmiş bir yazı tipi motorudur. Bu kod snippet'inde, yazı tipi metriği geçersiz kılma işlemlerini hesaplamak için fontkit'in nasıl kullanılacağı gösterilmektedir.
- Capsize, yazı tipi boyutlandırma ve düzen kitaplığıdır. Capsize, çeşitli yazı tipi metrikleri hakkında bilgi edinmek için bir API sunar.
- fontdrop.info, yazı tipi tablolarını ve yazı tipleriyle ilgili diğer bilgileri tarayıcıdan görüntülemenize olanak tanıyan bir web sitesidir.
- Font Forge, popüler bir masaüstü yazı tipi düzenleyicidir.
ascent
,descent
veline-gap
öğelerini görüntülemek için:Font Info
iletişim kutusunu açın,OS/2
menüsünü ve ardındanMetrics
sekmesini seçin.UPM
'ü görüntülemek için:Font Info
iletişim kutusunu açıpGeneral
menüsünü seçin.
Yazı tipi tablolarını anlama
"Artış" gibi kavramların birden fazla metrik tarafından referans aldığını fark edebilirsiniz. Örneğin, hheaAscent
, typoAscent
ve winAscent
metrikleri vardır. Bunun nedeni, farklı işletim sistemlerinin yazı tipi oluşturmaya farklı yaklaşımlar benimsemesidir: OSX cihazlardaki programlar genellikle hhea*
yazı tipi metriklerini kullanırken Windows cihazlardaki programlar genellikle typo*
(sTypo*
olarak da adlandırılır) veya win*
yazı tipi metriklerini kullanır.
Yazı tipine, tarayıcıya ve işletim sistemine bağlı olarak yazı tipi, hhea
, typo
veya win
metrikleri kullanılarak oluşturulur.
Mac | Windows | |
Chromium | "hhea" tablosundaki metrikleri kullanır. | "USE_TYPO_METRICS" ayarlandıysa "typo" tablosundaki metrikleri, aksi takdirde "win" tablosundaki metrikleri kullanır. |
Firefox | "USE_TYPO_METRICS" ayarlanmışsa "typo" tablosundaki metrikleri kullanır. Aksi takdirde "hhea" tablosundaki metrikleri kullanır. | "USE_TYPO_METRICS" ayarlandıysa "typo" tablosundaki metrikleri, aksi takdirde "win" tablosundaki metrikleri kullanır. |
Safari | "hhea" tablosundaki metrikleri kullanır. | "USE_TYPO_METRICS" ayarlanmışsa "typo" tablosundaki metrikleri kullanır. Aksi takdirde "win" tablosundaki metrikleri kullanır. |
Yazı tipi metriklerinin işletim sistemleri genelinde nasıl çalıştığı hakkında daha fazla bilgi için dikey metrikler hakkındaki bu makaleyi inceleyin.
Cihazlar arası uyumluluk
Yazı tiplerinin büyük çoğunluğu (örneğin, Google Fonts tarafından barındırılan yazı tiplerinin yaklaşık% 90'ı) için yazı tipi metrikleri geçersiz kılma işlemleri, kullanıcının işletim sistemini bilmeden güvenli bir şekilde kullanılabilir: Diğer bir deyişle, bu yazı tipleri için hhea
, typo
veya win
metriklerinin geçerli olup olmadığına bakılmaksızın ascent-override
, descent-override
ve linegap-override
değerleri tam olarak aynı kalır. Bu repo, bu durumun hangi yazı tipleri için geçerli olduğu ve hangileri için geçerli olmadığı hakkında bilgi sağlar.
OSX ve Windows cihazlar için ayrı yazı tipi metriği geçersiz kılma grupları kullanılmasını gerektiren bir yazı tipi kullanıyorsanız yazı tipi metriği geçersiz kılma ve size-adjust
özelliklerini yalnızca stil sayfalarınızı kullanıcının işletim sistemine göre değiştirebiliyorsanız kullanmanız önerilir.
Yazı tipi metriği geçersiz kılma işlemlerini kullanma
Yazı tipi metriği geçersiz kılmaları, web yazı tipinin (yedek yazı tipinden değil) meta verilerinden gelen ölçümler kullanılarak hesaplandığından, yedek yazı tipi olarak hangi yazı tipinin kullanıldığına bakılmaksızın aynı kalır. Örneğin:
body {
font-family: "Poppins", "fallback for Poppins", "another fallback for Poppins";
}
@font-face {
font-family: "fallback for Poppins";
src: local("Arial");
ascent-override: 105%;
descent-override: 35%;
line-gap-override: 10%;
}
@font-face {
font-family: "another fallback for Poppins";
src: local("Roboto");
ascent-override: 105%;
descent-override: 35%;
line-gap-override: 10%;
}
Boyut ayarlama özelliğinin işleyiş şekli
Giriş
size-adjust
CSS tanımlayıcısı, yazı tipi karakterlerinin genişliğini ve yüksekliğini orantılı olarak ölçeklendirir. Örneğin, size-adjust: 200%
yazı tipi simgelerini orijinal boyutlarının iki katına, size-adjust: 50%
ise orijinal boyutlarının yarısına ölçekler.
size-adjust
, yazı tipi yedeklemelerini iyileştirmek için tek başına sınırlı uygulamalara sahiptir: Çoğu durumda, yedek yazı tipinin bir web yazı tipiyle eşleşmesi için orantılı olarak ölçeklendirilmek yerine biraz daraltılması veya genişletilmesi gerekir. Ancak size-adjust
'ü yazı tipi metriği geçersiz kılmalarıyla birleştirmek, iki yazı tipinin hem yatay hem de dikey olarak eşleşmesini sağlar.
size-adjust
, stil sayfalarında şu şekilde kullanılır:
@font-face {
font-family: "fallback for poppins";
src: local("Arial");
size-adjust: 60.85099821%;
ascent-override: 164.3358416%;
descent-override: 57.51754455%;
line-gap-override: 16.43358416%;
}
size-adjust
değerinin hesaplanma şekli nedeniyle (sonraki bölümde açıklanmıştır), size-adjust
değeri (ve karşılık gelen yazı tipi metriği geçersiz kılmaları), hangi yedek yazı tipinin kullanıldığına bağlı olarak değişir:
body {
font-family: "Poppins", "fallback for Poppins", "another fallback for Poppins";
}
@font-face {
font-family: poppins-fallback;
src: local("Arial");
size-adjust: 60.85099821%;
ascent-override: 164.3358416%;
descent-override: 57.51754455%;
line-gap-override: 16.43358416%;
}
@font-face {
font-family: poppins-fallback-android;
src: local("Roboto");
size-adjust: 55.5193474%:
ascent-override: 180.1173909%;
descent-override: 63.04108683%;
line-gap-override: 18.01173909%;
}
Boyut ayarlama ve yazı tipi metriği geçersiz kılma işlemlerini hesaplama
size-adjust
ve yazı tipi metriği geçersiz kılma işlemlerini hesaplamak için kullanılan denklemler şunlardır:
size-adjust = avgCharacterWidth of web font / avgCharacterWidth of fallback font
ascent-override = web font ascent / (web font UPM * size-adjust)
descent-override = web font descent / (web font UPM * size-adjust)
line-gap-override = web font line-gap / (web font UPM * size-adjust)
Bu girişlerin çoğu (ör. çıkış, iniş ve satır aralığı) doğrudan web yazı tipinin meta verilerinden okunabilir. Ancak avgCharacterWidth
değerinin yaklaşık olarak hesaplanması gerekir.
Ortalama karakter genişliğine yakın değer
Genel olarak ortalama karakter genişliği yalnızca yaklaşık olarak hesaplanabilir. Ancak bunun tam olarak hesaplanabileceği bazı senaryolar vardır. Örneğin, sabit genişlikli yazı tipi kullanıldığında veya bir metin dizesinin içeriği önceden bilindiğinde.
avgCharacterWidth
değerini hesaplamaya yönelik basit bir yaklaşım örneği, tüm [a-z\s]
karakterlerinin ortalama genişliğini almaktır.
Ancak tüm karakterlere eşit ağırlık vermek, sık kullanılan harflerin (ör. e
) genişliğini yeterince azaltmaz ve sık kullanılmayan harflerin (ör. z
) genişliğini yeterince artırmaz.
Doğruluğu artıran daha karmaşık bir yaklaşım, harf sıklığını hesaba katmaktır. Bunun yerine, [a-z\s]
karakterinin sıklık ağırlıklı ortalama genişliğini hesaplayabilirsiniz. Bu makalede, İngilizce metinlerdeki harf sıklığı ve ortalama kelime uzunluğu hakkında bilgi verilmektedir.
Yaklaşım seçme
Bu makalede ele alınan iki yaklaşımın da avantajları ve dezavantajları vardır:
Yazı tipi yedeklerinizi optimize etmeye başlıyorsanız yazı tipi metriği geçersiz kılma işlemlerini tek başına kullanmak iyi bir yaklaşımdır. Bu, iki yaklaşımdan daha basit olsa da, genellikle yazı tipiyle ilgili düzen kaymalarının büyüklüğünü belirgin bir şekilde azaltacak kadar güçlüdür.
Öte yandan, daha fazla hassasiyet istiyorsanız ve biraz daha fazla çalışma ve test yapmak istiyorsanız
size-adjust
kullanmayı tercih edebilirsiniz. Bu yaklaşım doğru uygulandığında yazı tipiyle ilgili düzen kaymalarını etkili bir şekilde ortadan kaldırabilir.
Yedek yazı tipleri seçme
Bu makalede açıklanan teknikler, web yazı tipine en yakın yerel yazı tipini bulmaya çalışmak yerine yaygın olarak kullanılabilen yerel yazı tiplerini dönüştürmek için yazı tipi metriği geçersiz kılmaları ve size-adjust
özelliklerini kullanır. Yerel yazı tiplerini seçerken çok az sayıda yazı tipinin yaygın olarak yerel olarak kullanılabilir olduğunu ve tüm cihazlarda tek bir yazı tipi bulunmayacağını aklınızda bulundurun.
Arial
, sans-serif yazı tipleri için önerilen yedek yazı tipidir ve Times New Roman
, serif yazı tipleri için önerilen yedek yazı tipidir. Ancak bu yazı tiplerinin hiçbiri Android'de kullanılamaz (Roboto
, Android'deki tek sistem yazı tipidir).
Aşağıdaki örnekte, geniş kapsamlı cihaz desteği sağlamak için üç yedek yazı tipi kullanılmaktadır: Windows/Mac cihazları hedefleyen bir yedek yazı tipi, Android cihazları hedefleyen bir yedek yazı tipi ve genel bir yazı tipi ailesi kullanan bir yedek yazı tipi.
body {
font-family: "Poppins", poppins-fallback, poppins-fallback-android, sans-serif;
}
/*
Poppins font metrics:
- ascent = 1050
- descent = 350
- line-gap = 100
- UPM: 1000
AvgCharWidth:
- Poppins: 538.0103768
- Arial: 884.1438804
- Roboto: 969.0502537
*/
@font-face {
font-family: poppins-fallback;
src: local("Arial");
size-adjust: 60.85099821%;
ascent-override: 164.3358416%;
descent-override: 57.51754455%;
line-gap-override: 16.43358416%;
}
@font-face {
font-family: poppins-fallback-android;
src: local("Roboto");
size-adjust: 55.5193474%:
ascent-override: 180.1173909%;
descent-override: 63.04108683%;
line-gap-override: 18.01173909%;
}
Geri bildirim isteği
Yazı tipi metriği geçersiz kılma ve size-adjust
özelliğini kullanma deneyiminizle ilgili geri bildiriminiz varsa lütfen bize ulaşın.