CSS Kelepçesi Kullanan Modern Akışkan Tipografisi

Yayınlanan: 2022-03-10
Hızlı özet ↬ Bu makalede, akıcı tipografi ilkelerini, kullanım örneklerini, en iyi uygulamaları, CSS kıskaç işleviyle uygulamayı ve doğru parametrelerin nasıl hesaplanacağını keşfedeceğiz. Ayrıca bazı erişilebilirlik endişelerini nasıl ele alacağımızı öğreneceğiz ve henüz çözemediğimiz, ancak ne olursa olsun farkında olmamız gereken önemli bir soruna dikkat edeceğiz.

Web geliştirmede akışkan tipografi kavramı yıllardır var ve geliştiricilerin tarayıcıda çalışmasını sağlamak için çeşitli geçici çözümlere güvenmeleri gerekiyordu. Yeni CSS clamp işleviyle akıcı tipografi oluşturmak hiç bu kadar kolay olmamıştı.

Genellikle, duyarlı tipografi uyguladığımızda, değerler belirli kesme noktalarında değişir. Açıkça tanımlanırlar. Bu nedenle tasarımcılar genellikle iki, üç veya daha fazla ekran boyutu için tipografik değerler (yazı tipi boyutları, satır yükseklikleri, harf aralıkları vb.) sağlar ve geliştiriciler genellikle bu gereksinimleri belirli kesme noktalarını hedeflemek için medya sorguları ekleyerek uygular.

Grafik, görüntü alanı genişliği ile medya sorgusu kesme noktalarıyla farklı tipografik değerler arasındaki bağımlılığı gösterir.
(Büyük önizleme)

Tipografi öğeleri tasarımlardaki kadar iyi görünse de, kesme noktalarına yakın görünüm alanı genişliklerindeki bazı öğeler için durum böyle olmayabilir. Bildiğimiz gibi, tasarımda belirtilenlerin ötesinde kullanıcılara sunulan birçok farklı cihaz ve ekran boyutu var. Araya daha fazla kesme noktası ve stil geçersiz kılmaları eklemek sorunu çözebilir, ancak koddaki karmaşıklığı artırma, daha fazla uç durum oluşturma ve kodu daha az net ve sürdürülebilir hale getirme riskiyle karşı karşıyayız.

Telefon, tablet ve dizüstü bilgisayar olmak üzere farklı ekran boyutlarına sahip üç farklı cihazda tipografi örneği.
Daha düşük ve daha yüksek görünüm alanı genişliklerinde tipografi iyi görünse de, sabit tipografi değerleri ve daha az boşluk nedeniyle kesme noktasına (ortadaki görüntü) yakın başlığın boyutu yerinde görünmüyor. (Büyük önizleme)

Akışkan tipografi , görüntü alanı genişliğine bağlı olarak minimum ve maksimum değer arasında sorunsuz bir şekilde ölçeklenir. Genellikle minimum bir değerle başlar ve artmaya başladığı belirli bir ekran genişliği noktasına kadar sabit değeri korur. Başka bir ekran genişliğinde maksimum değere ulaştığında, o maksimum değeri oradan korur. Bu makalede, akışkan tipografisinin ters sırada da akabileceğini göreceğiz - maksimum bir değerle başlayıp minimum bir değerle bitiyor.

Grafik, minimum değer bitiş noktası ve maksimum değer başlangıç ​​noktası ile görünüm alanı genişliği ile farklı tipografik değerler arasındaki bağımlılığı gösterir.
(Büyük önizleme)

Bu yaklaşım, belirli kesme noktaları ve diğer uç durumlar için ince ayarı azaltır veya ortadan kaldırır. Çoğunlukla tipografide kullanılmasına rağmen, bu akışkan boyutlandırma yaklaşımı aynı zamanda kenar boşluğu, dolgu, boşluk vb. için de çalışır.

Aşağıdaki örnekte başlık metninin nasıl düzgün bir şekilde ölçeklendiğine ve herhangi bir görüntü alanı genişliğinde nasıl iyi göründüğüne dikkat edin. Ayrıca, içeriğin duyarlı tipografiyi nasıl koruduğuna ve değerin yalnızca bir kesme noktasında nasıl değiştiğine dikkat edin.

Başlıklar, görüntü alanı genişliğiyle sorunsuz bir şekilde ölçeklenir ve önceki örnekte olduğu gibi kesme noktalarının etrafındaki boyutlandırma tutarsızlıklarına sahip değiliz.
Başlıklar, görüntü alanı genişliğiyle sorunsuz bir şekilde ölçeklenir ve önceki örnekte olduğu gibi kesme noktalarının etrafındaki boyutlandırma tutarsızlıklarına sahip değiliz.

Akışkan tipografi yukarıda belirtilen sorunları ele alsa da, tüm senaryolar için ideal değildir ve akışkan tipografi, duyarlı tipografinin yerini alacak şekilde ele alınmamalıdır . Her birinin kendi en iyi uygulamaları ve uygun kullanım durumları vardır ve bunları bu makalenin ilerleyen bölümlerinde ele alacağız.

Bu yazıda, akışkan tipografisine derinlemesine bir dalış yapacağız ve geliştiricilerin geçmişte kullandığı çeşitli yaklaşımları inceleyeceğiz. Ayrıca CSS clamp işlevini ve akışkan tipografi uygulamasını nasıl basitleştirdiğini ele alacağız ve akışkan davranışı için başlangıç ​​ve bitiş noktalarını kontrol etmek için clamp işlevi parametrelerinde ince ayar yapmayı öğreneceğiz. Ayrıca, çoğu bugün ele alınabilecek erişilebilirlik endişelerini ve henüz çözemediğimiz önemli bir erişilebilirlik sorununu da ele alacağız.

Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

Akışkan Tipografisinde İlk Denemeler

Geliştiriciler olarak, büyük tarayıcılarda geliştirilip destekleninceye kadar eksik CSS özelliklerini tamamlamak için genellikle JavaScript kullanırız. Duyarlı web tasarımının ilk günlerinde, akıcı tipografi elde etmek için FlowType.JS gibi JavaScript kitaplıkları kullanıldı.

Akışkan tipografinin ilk gerçek CSS uygulaması, CSS calc ve viewport birimlerinin ( vw ve vh ) tanıtılmasıyla geldi.

 /* Fixed minimum value below the minimum breakpoint */ .fluid { font-size: 32px; } /* Fluid value from 568px to 768px viewport width */ @media screen and (min-width: 568px) { .fluid { font-size: calc(32px + 16 * ((100vw - 568px) / (768 - 568)); } } /* Fixed maximum value above the maximum breakpoint */ @media screen and (min-width: 768px) { .fluid { font-size: 48px; } }

Bu snippet biraz karmaşık görünüyor ve hesaplamaya dahil olan çok sayıda sayı var. Öyleyse, bunu bölümlere ayıralım ve neler olup bittiğine dair üst düzey bir genel bakışa sahip olalım. Kapsadıkları durumları görmek için seçicilere ve medya sorgularına odaklanalım.

 .fluid { /* Min value */ } @media screen and (min-width: [breakpoint-min]) { .fluid { /* Preferred value between the minimum and maximum bound */ } @media screen and (min-width: [breakpoint-max]) { /* Max value */ }

Mobil öncelikli yaklaşımda, birinci seçici, değeri minimum bir sınıra sabitler. İlk ortam sorgusu, iki kesme noktası arasındaki akışkan davranışını yönetir. Son kesme noktası, değeri bir maksimum sınıra sabitler. Artık her seçicinin ve ortam sorgusunun ne yaptığını bildiğimize göre, minimum ve maksimum sınırın nasıl uygulandığına ve akışkan değerinin nasıl hesaplandığına bakalım.

 .fluid { font-size: [value-min]; } @media (min-width: [breakpoint-min]) { .fluid { font-size: calc([value-min] + ([value-max] - [value-min]) * ((100vw - [breakpoint-min]) / ([breakpoint-max] - [breakpoint-min]))); } } @media (min-width: [breakpoint-max]) { .fluid { font-size: [value-max] } }

Bu, minimum ve maksimum sınırlar arasında bir değeri sabitlemek ve iki kesme noktası arasına bir akışkan davranışı eklemek gibi çok basit bir görevi başarmak için kullanılan bir çok ortak koddur.

Gerekli kazan plakasının miktarına rağmen, bu yaklaşım genel olarak sıvı boyutlandırmayı işlemek için o kadar popüler hale geldi ki, daha akıcı bir yaklaşıma ihtiyaç olduğu açıkça ortaya çıktı. CSS kıskaç işlevinin devreye girdiği yer burasıdır.

CSS clamp İşlev

CSS clamp işlevi, minimum sınır, tercih edilen değer ve maksimum sınır olmak üzere üç değer alır ve mevcut değeri bu sınırlar arasında sıkıştırır. Tercih edilen değer, sınır arasındaki değeri belirlemek için kullanılır. Tercih edilen değer , genellikle, akışkan etkisini elde etmek için görüntü alanı birimlerini, yüzdeleri veya diğer göreli birimleri içerir. Bu o kadar sağlam ve esnek bir fonksiyondur ki, sabit değerlerin yanı sıra matematik fonksiyonlarını ve ifadelerini ve attr fonksiyonundan değerleri bile kabul edebilir.

 clamp([value-min], [value-preferred], [value-max]);

Bu işlev, uzunluk, frekans, zaman, açı, yüzde, sayı ve diğerleri gibi geçerli bir değer türünü kabul eden herhangi bir özniteliğe uygulanabilir, böylece tipografi ve boyutlandırmanın ötesinde kullanılabilir.

clamp işlevi için tarayıcı desteği, bu makalenin yazıldığı sırada %90'ın üzerinde bulunuyor, bu nedenle zaten iyi destekleniyor. Internet Explorer gibi desteklenmeyen masaüstü tarayıcılar için, desteklenmeyen tarayıcılar, clamp işlevini ayrıştıramazlarsa font-size ifadesinin tamamını yok sayacağından, bir geri dönüş değeri sağlamak yeterlidir.

 font-size: [value-fallback]; /* Fallback value */ font-size: clamp([value-min], [value-preferred], [value-max]);

CSS clamp Akışkan Tipografisi

CSS clamp işlevini kullanalım ve onu aşağıdaki değerlerle dolduralım:

  • Minimum değer — minimum yazı tipi boyutuna eşittir.
  • Maksimum değer — maksimum yazı tipi boyutuna eşittir.
  • Tercih edilen değer — akışkan tipografisinin nasıl ölçekleneceğini belirler — akışkan davranışının başlangıç ​​ve bitiş noktaları ve hızı değiştirir. Bu değer, görünüm alanı boyutuna bağlı olacaktır, bu nedenle görünüm alanı genişliği birimi vw kullanacağız.

Aşağıdaki örneğe bir göz atalım ve yazı tipi boyutunu 32px ile 48px arasında bir değere ayarlayalım. Aşağıdaki font-size , minimum 32px ve maksimum 48 piksel olarak 48px . Geçerli değer, görüntü alanı genişlik birimi veya daha kesin olarak, bu değer minimum ve maksimum sınır arasında yer alıyorsa mevcut görüntü alanı genişliğinin 4% tarafından belirlenir.

 font-size: clamp(32px, 4vw, 48px);

Bu örnek için görünüm genişliğine bağlı olarak hangi değerin uygulanacağına hızlıca bir göz atalım, böylece CSS kıskaç işlevinin nasıl çalıştığını iyi anlayabiliriz.

Görüntü alanı genişliği (px) Tercih edilen değer (px) Uygulanan değer (px)
500 20 32 (minimum sınıra kenetlenmiş)
900 36 36 (sınırlar arasında tercih edilen değer)
1400 56 48 (maksimum sınıra kenetlenmiş)

Bu kıskaç fonksiyon değeriyle ilgili iki sorunu görebiliriz:

  • Min ve max için piksel değerlerine erişilemiyor.
    Minimum ve maksimum sınırlar, piksel değerleriyle ifade edilir, bu nedenle bir kullanıcı tercih ettiği yazı tipi boyutunu değiştirirse ölçeklenmezler.
  • Tercih edilen değer için görüntü alanı değerine erişilemiyor.
    Önceki durumda olduğu gibi. Bu değer, yalnızca görüntü alanı genişliğine bağlıdır ve kullanıcı tercihlerini dikkate almaz.
  • Tercih edilen değer belirsizdir.
    İlk bakışta sihirli bir sayı gibi görünebilecek 4vw kullanıyoruz. Çeşitli değişken yazı tipi boyutu değişikliklerini senkronize edebilmemiz için akışkan davranışının ne zaman başlayıp ne zaman bittiğini bilmemiz gerekir.

İlk sorunu, px değerlerini 16'ya bölerek (varsayılan tarayıcı yazı tipi boyutu) minimum ve maksimum sınırlar için rem değerlerine dönüştürerek kolayca px . Bunu yaparak, minimum ve maksimum değerler, kullanıcının tarayıcı tercihlerine uyum sağlayacaktır.

 font-size: clamp(2rem, 4vw, 3rem);
Piksel değerleri, tarayıcı yazı tipi boyutu tercihlerine uyum sağlamaz, ancak rem ve em değerleri uyum sağlar.
Piksel değerleri, tarayıcı yazı tipi boyutu tercihlerine uyum sağlamaz, ancak rem ve em değerleri uyum sağlar. (Büyük önizleme)

Bu değerin görüntü alanı boyutuna yanıt vermesi gerektiğinden, tercih edilen değerle farklı bir yaklaşım benimsememiz gerekiyor. Ancak göreceli rem değerini matematiksel bir ifadeye çevirerek kolayca karıştırabiliriz.

 font-size: clamp(2rem, 4vw + 1rem, 3rem);

Lütfen bunun tüm erişilebilirlik sorunları için kusursuz bir çözüm olmadığını unutmayın, bu nedenle akıcı tipografinin yeterince yakınlaştırılıp yakınlaştırılamayacağını ve kullanıcı erişilebilirlik tercihlerine yeterince iyi yanıt verip vermediğini test etmek yine de önemlidir. Bu konulara daha sonra değineceğiz.

Ancak, gerekli akışkan davranışını elde etmek için örnekten ( 4vw + 1rem ) tercih edilen değeri nasıl elde ettiğimizi hala bilmiyoruz, bu yüzden tercih edilen değere nasıl ince ayar yapabileceğimize ve arkasındaki matematiği tam olarak anlayabileceğimize bir göz atalım. .

Akışkan Boyutlandırma İşlevi

Tercih edilen değer , akışkan tipografi işlevinin nasıl davranacağını etkiler . Daha doğrusu, minimum değerin hangi görüntü alanı genişlik noktalarında değişmeye başladığını ve hangi görüntü alanı genişlik noktasında maksimum değere ulaştığını değiştirebiliriz.

Örneğin, akışkan davranışının görüntü alanı genişliğinin 1200 1200px başlamasını ve 800 800px bitmesini isteyebiliriz. Lütfen farklı minimum ve maksimum sınırların, çeşitli akışkan tipografilerini senkronize halde tutmak için farklı tercih edilen değerler (görünüm alanı değeri ve göreli boyut) gerektirdiğini unutmayın.

Örneğin, genellikle görünüm alanı genişliğinin 1200 1000px ile 750px 800px 1200px diğerinin gerçekleşmesini istemiyoruz. Bu, aşağıdaki örnekte olduğu gibi boyutlandırma tutarsızlıklarına yol açabilir.

Bu örnekte, farklı sınırlara ve aynı tercih edilen 4vw boyutuna sahip dört akışkan tipografi değeri ayarlıyoruz. Soldaki sonuç tutarlı görünse de, değişiklik farklı görüntü alanı genişliklerinde gerçekleştiğinden, değişken boyutlandırma (sağda) bazı görüntü alanı genişliklerinde tutarsızdır.
Bu örnekte, farklı sınırlara ve aynı tercih edilen 4vw boyutuna sahip dört akışkan tipografi değeri ayarlıyoruz. Soldaki sonuç tutarlı görünse de, değişiklik farklı görüntü alanı genişliklerinde gerçekleştiğinden, değişken boyutlandırma (sağda) bazı görüntü alanı genişliklerinde tutarsızdır. (Büyük önizleme)

Bu sorunu önlemek için, tercih edilen değerin nasıl hesaplandığını bulmamız ve pens fonksiyonu tercih edilen değerine uygun görünüm ve bağıl değerleri atamamız gerekir.

Bunu hesaplamak için kullanılan bir fonksiyon bulalım.

 font-size: clamp([min]rem, [v]vw + [r]rem, [max]rem);

$$y=\frac{v}{100}*x + r$$

  • x — geçerli görüntü alanı genişliği değeri ( px ).
  • y — mevcut görüntü alanı genişlik değeri x ( px ) için elde edilen değişken yazı tipi boyutu.
  • v — akışkan değeri değişim oranını etkileyen görüntü alanı genişliği değeri ( vw ).
  • r - tarayıcı yazı tipi boyutuna eşit göreceli boyut. Varsayılan değer 16px .

Bu fonksiyon ile akışkan davranışının başlangıç ​​ve bitiş noktalarını kolaylıkla hesaplayabiliriz. Örneğimiz için minimum 2rem ( 32px ) değeri 400px görüntü alanı genişliğine kadar sabittir.

$32=\frac{4}{100}*x + 16$$

$16=\frac{1}{25}*x$$

$$x=400$$

Aynı işlevi maksimum değer için de uygulayabilir ve 800px görüntü alanı genişliğinde maksimum 3rem ( 48px ) değerine ulaştığını görebiliriz.

Bu örneğin amacı, tercih edilen değerin akışkan tipografi davranışını nasıl etkilediğini göstermekti. Aynı işlevi biraz daha gerçekçi bir senaryo için kullanalım ve daha pratik bir gerçek dünya örneği çözelim. Gerekli yazı tipi boyutlarına ve akışkan davranışının gerçekleşmesini istediğimiz belirli noktalara dayalı olarak erişilebilir akışkan tipografisi oluşturacağız.

Belirli başlangıç ​​ve bitiş noktalarına dayalı olarak tercih edilen değer parametrelerinin hesaplanması

Gerçek dünya senaryolarında sıklıkla karşımıza çıkan pratik bir örneğe bakalım. Tasarımcılar, geliştiriciler olarak akışkan tipografisini aşağıdaki parametrelerle uygulamak için ihtiyaç duyduğumuz yazı tipi boyutlarını ve kesme noktalarını bize sağladı:

  • Minimum yazı tipi boyutu 36px (y1)
  • Maksimum yazı tipi boyutu 52px (y2)
  • Minimum değer, 600px görüntü alanı genişliğinde (x1) bitmelidir
  • Maksimum değer 1400px görüntü alanı genişliğinde (x2) başlamalıdır
Akışkan tipografisi gereksinimlerinin örnekten görselleştirilmesi.
Akışkan tipografisi gereksinimlerinin örnekten görselleştirilmesi. (Büyük önizleme)

Bu değerleri alıp daha önce tartıştığımız akışkan boyutlandırma fonksiyonuna ekleyelim.

$$y=\frac{v}{100} \cdot x + r$$

Hesaplamamız gereken iki parametreli iki denklem elde ediyoruz - görünüm alanı genişliği değeri v ve göreli boyut r .

$$(1)\;\;\; y_1=\frac{v}{100} \cdot x_1 + r$$

$$(2) \;\;\; y_2 =\frac{v}{100} \cdot x_2 + r$$

İlk denklemi alıp kullanabileceğimiz aşağıdaki ifadeye çevirebiliriz.

$$(1) \;\;\; r=y_1 - \frac{v}{100} \cdot x_1$$

İkinci denklemdeki r bu ifadeyle değiştirebiliriz ve v hesaplayacak fonksiyonu elde edebiliriz.

$$v=\frac{100 \cdot (y_2-y_1)}{x_2 - x_1}$$

$$v=\frac{100 \cdot (52-36)}{1400 - 600}$$

$$v=2$$

2vw görünüm genişliği değerini alıyoruz. Benzer şekilde, r izole edebilir ve mevcut parametreleri kullanarak hesaplayabiliriz.

$$r=\frac{x_1y_2 - x_2y_1}{x_1 - x_2}$$

$$r=\frac{600 \cdot 52 - 1400 \cdot 36}{600 - 1400}$$

$$r=24$$

Not : Bu değer piksel cinsindendir ve bağıl değerin rem cinsinden ifade edilmesi gerekir, bu nedenle piksel değerini 16 1.5rem ile bitiriyoruz.

Ayrıca minimum rem sınırını ve 36px maksimum sınırını rem'e dönüştürmemiz ve tüm değerleri CSS clamp işlevine 52px gerekiyor.

 font-size: clamp(2.25rem, 2vw + 1.5rem, 3.25rem);

Hesaplanan değerlerin doğruluğunu onaylamak için bu fonksiyonu çizebiliriz.

(Büyük önizleme)

Özetlemek gerekirse, yazı tipi boyutları ve görünüm alanı genişlik noktalarından tercih edilen değer parametrelerini v ( vw olarak ifade edilir) ve r ( rem ile ifade edilir) hesaplamak için aşağıdaki iki işlevi kullanabiliriz.

$$v=\frac{100 \cdot (y_2-y_1)}{x_2 - x_1}$$

$$r=\frac{x_1y_2 - x_2y_1}{x_1 - x_2}$$

Artık clamp fonksiyonunun nasıl çalıştığını ve tercih edilen değerin nasıl hesaplandığını tam olarak anladığımıza göre, projelerimizde kolayca tutarlı ve erişilebilir akışkan tipografisi oluşturabilir ve yukarıda belirtilen tuzaklardan kaçınabiliriz.

Akışkan boyutlandırma için negatif görünüm değeri kullanma

Görüntü alanı değeri için negatif bir değer kullanarak görüntü alanı boyutu küçüldükçe boyut ölçeğini de büyütebiliriz. Negatif görüntü alanı değeri, varsayılan akışkan davranışını tersine çevirir. Ayrıca, önceki örnekten yukarıda bahsedilen iki denklemi çözerek sıvı davranışının belirli noktalarda başlayıp biteceği şekilde bağıl boyutu ayarlamamız gerekir.

 font-size: clamp(3rem, -4vw + 6rem, 4.5rem);

Bu ters konfigürasyonu projelerimde kullanmadım, ancak projenizde veya tasarımınızda bu gereksinimle karşılaşırsanız ilginç bulabilirsiniz.

Görüntü alanı boyutu için negatif değere sahip akışkan boyutlandırma. Görüntü alanı genişliği arttıkça boyutun azaldığına dikkat edin.
Görüntü alanı boyutu için negatif değere sahip akışkan boyutlandırma. Görüntü alanı genişliği arttıkça boyutun azaldığına dikkat edin. (Büyük önizleme)
Akışkan davranışı, belirli bir noktaya ulaşana kadar maksimum değerle başlar ve minimum değere ulaşana kadar azalmaya başlar.
Akışkan davranışı, belirli bir noktaya ulaşana kadar maksimum değerle başlar ve minimum değere ulaşana kadar azalmaya başlar.

Akışkan tipografi görselleştirme aracı

Bir proje üzerinde çalışırken birden fazla farklı akışkan tipografi konfigürasyonu oluşturmam gerekti. Tarayıcıdaki konfigürasyonları test ediyordum ve geliştiricilerin akışkan tipografi davranışını görselleştirmesine ve ince ayar yapmasına yardımcı olacak bir araç oluşturma fikrim vardı. Josh W. Comeau'nun “JS geliştiricileri için CSS” kursundaki demolardan birinden ilham aldım ve Modern Akışkan Tipografi Aracı'nı oluşturdum.

Grafik görünümü, geliştiricilere akışkan davranışına genel bir bakış sağlar.
Grafik görünümü, geliştiricilere akışkan davranışına genel bir bakış sağlar. Hesap makinesine atlayın.

Geliştiriciler, bu aracı, akışkan tipografi kod parçacıkları oluşturmak ve ince ayar yapmak ve birden çok örneği senkronize tutmak için akışkan davranışını görselleştirmek için kullanabilir. Araç ayrıca yapılandırmaya bir bağlantı oluşturabilir, böylece geliştiriciler bağlantıyı kod yorumlarına veya belgelere ekleyebilir, böylece diğerleri değişken boyutlandırma davranışını kolayca kontrol edebilir.

Tablo görünümü, geliştiricilerin özelleştirilebilir bir kesme noktası listesinde sıvı boyutlarını takip etmelerine olanak tanır.
Tablo görünümü, geliştiricilerin özelleştirilebilir bir kesme noktası listesinde sıvı boyutlarını takip etmelerine olanak tanır. (Büyük önizleme)

Bu proje ücretsiz ve açık kaynaklıdır, bu nedenle herhangi bir hatayı bildirmekten ve katkıda bulunmaktan çekinmeyin. Düşüncelerinizi ve özellik isteklerinizi duyduğuma sevindim!

Erişilebilirlik Endişeleri

rem değerlerinin kullanılmasının akıcı tipografiyi tüm kullanıcılar için otomatik olarak erişilebilir kılmadığını, yalnızca yazı tipi boyutlarının kullanıcının yazı tipi tercihlerine yanıt vermesine izin verdiğini tekrarlamak önemlidir. Akışkan boyutlandırma elde etmek için görünüm alanı birimleriyle birlikte CSS clamp işlevini kullanmak, dikkate almamız gereken başka bir dizi dezavantajı beraberinde getirir.

Adrian Roseli, blog yazısında bu sorunları kapsamlı bir şekilde test etti ve belgeledi.

" vw birimlerini kullandığınızda veya clamp() ile metnin ne kadar büyük olabileceğini sınırladığınızda, bir kullanıcının metni orijinal boyutunun %200'üne ölçekleyememe olasılığı vardır. Bu olursa, 1.4.4 Metni yeniden boyutlandırma (AA) altında WCAG hatasıdır, bu nedenle sonuçları yakınlaştırma ile test ettiğinizden emin olun.

— Adrian Rosell

Yakınlaştırma olayının ne zaman gerçekleştiğini algılamak için JavaScript kullanarak ve sıvı boyutlandırmayı normal bir rem değeriyle geçersiz kılacak bir sınıf uygulayarak bu sorunu en başından çözmek istedim.

 /* Apply fluid typography for default zoom level (not zoomed) */ .title { font-size: clamp(2rem, 4vw + 1rem, 3rem); } /* Revert to responsive typography if zoom is active */ body.zoom-active .title { font-size: 2rem; } @media screen and (min-width: 768px) { body.zoom-active .title { font-size: 3rem; } }

Yeniden boyutlandırma gibi herhangi bir normal görüntü alanı olayını algılayabildiğimiz gibi, yakınlaştırma olayını JavaScript kullanarak güvenilir bir şekilde algılayamadığımızı öğrendiğimde şaşırmış olabilirsiniz.

Bu makalenin yazıldığı sırada %92'lik sağlam bir tarayıcı desteğine sahip Visual Viewport API özelliği vardır, ancak ölçek (yakınlaştırma düzeyi) değeri çalışmaz - yakınlaştırma (ölçek) değerinden bağımsız olarak aynı değeri döndürür. Mevcut hiçbir belge, çalışma örneği veya kullanım senaryosu bulunmadığından bahsetmiyorum bile. Bu API'nin bu kadar sağlam tarayıcı desteğine sahip olduğu düşünüldüğünde, bu biraz garip. Bazı geçici çözümler mevcuttur, ancak bunlar da tamamen güvenilir değildir ve sayfanın ilk yüklendiğinde, yalnızca olay gerçekleştikten sonra yakınlaştırılıp yakınlaştırılmadığını algılayamaz.

Visual Viewport API istendiği gibi çalıştıysa, zoom olayında bir CSS sınıfını kolayca değiştirebiliriz.

 /* This code won't work because visualViewport.scale is buggy * and always returns the same value. This might be fixed in the future. */ function checkZoomLevel() { if (window.visualViewport.scale === 1) { document.body.classList.remove("zoom-active"); } else { document.body.classList.add("zoom-active"); } } window.addEventListener("resize", checkZoomLevel);

Değişken boyutlandırma uygulayarak, göz atarken yakınlaştırma işlevini kullanan bazı kullanıcılar için içeriği erişilemez hale getirme riskini almamız talihsiz bir durumdur. Değişken tipografi için güvenilir ve daha erişilebilir bir yedek oluşturana kadar, değişken boyutlandırmayı idareli kullandığınızdan emin olun ve yakınlaştırma düzeylerinin Web İçeriği Erişilebilirlik Yönergelerine (WCAG) uygun olup olmadığını test edin.

Önerilen Kullanım Durumları

Akışkan tipografi, minimum ve maksimum boyut arasında daha büyük bir fark olan büyük ve belirgin metin öğeleri için en iyi sonucu verir. Büyük başlıklar, uygun şekilde ölçeklendirilmezse daha küçük görünüm pencerelerinde daha sarsıcı ve yerinde görünmeyecektir.

Tutarlı boyutlandırmayı sürdürmemiz gereken durumlar için sıvı boyutlandırma da önerilir.

Başlık boyutu ve kap ızgara boşluğu, daha küçük masaüstü ve daha büyük tablet görünüm pencerelerinde kart boyutlarına uygun şekilde ölçeklenmiyor. Akışkan boyutlandırma kullanarak bunu düzeltebiliriz.
Başlık boyutu ve kap ızgara boşluğu, daha küçük masaüstü ve daha büyük tablet görünüm pencerelerinde kart boyutlarına uygun şekilde ölçeklenmiyor. Akışkan boyutlandırma kullanarak bunu düzeltebiliriz. (Büyük önizleme)
Hem tipografi ölçeklendirmesini hem de tutarlı ızgara boşluğunu korumak için akışkan boyutlandırma kullanılabilir
Hem tipografi ölçeklendirmesini hem de tutarlı ızgara boşluğunu korumak için akışkan boyutlandırma kullanılabilir.

Elise Hein, akışkan tipografi en iyi uygulamaları hakkındaki makalesinde benzer bir sonuca vardı.

"Görünüm alanına göre tipografinin okunabilirlik açısından kesme noktasına dayalı boyutlandırmadan daha iyi performans gösterdiği birçok özel alan bulmaya çalıştım ve başarısız oldum. Burada iki tane var: ekran metnini ayarlamak ve tutarlı ölçüyü sürdürmek ."

— Elise Hein

Akışkan tipografi, minimum ve maksimum arasındaki fark yalnızca birkaç piksel olduğunda, gövde metninde olağan durumda olduğu gibi etkili veya kullanışlı değildir . Minimum ve maksimum yazı tipi boyutları arasında küçük bir fark olan gövde metni, daha büyük yazı tipi boyutlarında olduğu gibi, herhangi bir görüntü alanı genişliğinde yerinde görünmeyecektir. Bu durumlarda, kesme noktaları olan düzenli duyarlı tipografi kullanılması önerilir.

Çözüm

Akışkan tipografi, duyarlı tipografinin yerine geçmemeli, bunun yerine belirli kullanım durumları için bir geliştirme işlevi görmelidir. Minimum ve maksimum boyut arasında daha büyük bir fark olan metni düzgün bir şekilde ölçeklendirmek ve tutarlı bir boyutlandırma sağlamak için akıcı tipografi kullanmalıyız.

CSS clamp işleviyle birden fazla akışkan tipografi öğesi kullanırken, akışkan ölçeklemenin senkronize olduğundan emin olmalıyız. Bunu, görüntü alanı genişliğini ve bağıl değeri hesaplayarak ve bunları CSS clamp işlevinde tercih edilen değerler olarak kullanarak yapabiliriz. Akışkan tipografinin kullanıcının yazı tipi boyutu tercihlerine uyum sağlaması için rem birimi gibi göreli birimleri kullanmayı da aklımızda tutmalıyız.

Ayrıca akıcı tipografinin, erişilebilirlik sorunlarına neden olabilecek kullanıcı yakınlaştırma yeteneklerini nasıl sınırlayabileceğini gördük. Akışkan tipografiyi yakınlaştırma ile test etmek ve test içeriğin yeterince yakınlaştırılamayacağını ortaya çıkarırsa normal duyarlı tipografiye döndürmek önemlidir.

Bir yakınlaştırma eylemi gerçekleştiğinde akışkan tipografi değerlerini geçersiz kılarak bu sorunu çözebilmeliyiz. Ancak, Visual Viewport API'si düzgün çalışmadığından ve kullanıcı yakınlaştırma olaylarına yanıt vermediğinden, şu anda bunu yapmak mümkün değildir.

Referanslar

  • clamp() , MDN
  • Elise Hein "Yazı Neden Akışkan Olmalı?"
  • “Basitleştirilmiş Akışkan Tipografisi,” Chris Coyier
  • "Duyarlı Tip ve Yakınlaştırma", Adrian Roseli
  • vh ve vw Birimleriyle Duyarlı ve Akışkan Tipografi,” Michael Riethmuller