टाइपाेग्राफ़ी

अगर टेक्स्ट के लिए कोई स्टाइल तय नहीं की जाती है, तो ब्राउज़र अपनी डिफ़ॉल्ट स्टाइल लागू कर देंगे. इन्हें उपयोगकर्ता एजेंट स्टाइलशीट कहा जाता है. ये अलग-अलग ब्राउज़र के हिसाब से अलग-अलग हो सकते हैं. टेक्स्ट दिखाने के लिए, उपयोगकर्ता अपनी खुद की प्राथमिकताएं सेट कर सकते हैं.

अगर लाइन की लंबाई तय नहीं की जाती है, तो ब्राउज़र, टेक्स्ट की लाइनों को स्क्रीन के किनारे पर रैप कर देंगे. इसलिए, वेब पर मौजूद टेक्स्ट डिफ़ॉल्ट रूप से रिस्पॉन्सिव होता है. यह उपयोगकर्ता के व्यूपोर्ट में फ़िट होने के लिए फ़्लो करता है.

हालांकि, स्क्रीन पर टेक्स्ट के फ़िट होने का मतलब यह नहीं है कि वह आसानी से पढ़ा जा सकेगा. अच्छी टाइपोग्राफ़ी का मतलब है कि टेक्स्ट को सही तरीके से पेश किया जाए. सही फ़ॉन्ट चुनने के अलावा, टाइपोग्राफ़ी में और भी बहुत कुछ होता है. आपको उपयोगकर्ता की पसंद, टेक्स्ट का साइज़, लाइन की लंबाई, और टेक्स्ट की लाइनों के बीच की दूरी को ध्यान में रखना होगा.

टेक्स्ट का साइज़

यह जानना मुश्किल है कि वेब पर टेक्स्ट का साइज़ कितना होना चाहिए.

अगर कोई व्यक्ति छोटी स्क्रीन का इस्तेमाल कर रहा है, तो यह एक सुरक्षित विकल्प हो सकता है कि उसकी स्क्रीन उसकी आंखों के काफ़ी करीब हो—बस एक हाथ की दूरी पर.

हालांकि, जैसे-जैसे स्क्रीन बड़ी होती जाती हैं, वैसे-वैसे कनेक्शन बनाना मुश्किल होता जाता है. लैपटॉप साइज़ की स्क्रीन शायद दर्शक के काफ़ी पास दिखेगी, लेकिन वाइडस्क्रीन डेस्कटॉप मॉनिटर का साइज़ टेलिविज़न स्क्रीन जितना ही होता है. लोग डेस्कटॉप स्क्रीन से एक हाथ की दूरी पर बैठे हैं, लेकिन वे टेलिविज़न से काफ़ी दूर हैं.

फिर भी, भले ही आप यह नहीं जानते कि कोई व्यक्ति स्क्रीन से कितनी दूर है, फिर भी आप उन टेक्स्ट आकार का उपयोग करने का प्रयास कर सकते हैं, जो उम्मीद के अनुसार उचित होंगे. छोटी स्क्रीन के लिए छोटे साइज़ की स्क्रीन और बड़ी स्क्रीन के लिए बड़े टेक्स्ट साइज़ का इस्तेमाल करें.

स्क्रीन का साइज़ बढ़ने पर, मीडिया क्वेरी का इस्तेमाल करके font-size प्रॉपर्टी को बदला जा सकता है.

@media (min-width: 30em) {
  html {
    font-size: 125%;
  }
}

@media (min-width: 40em) {
  html {
    font-size: 150%;
  }
}

@media (min-width: 50em) {
  html {
    font-size: 175%;
  }
}

@media (min-width: 60em) {
  html {
    font-size: 200%;
  }
}

टेक्स्ट स्केलिंग

किसी ब्रेकपॉइंट पर, तय टेक्स्ट साइज़ के बीच स्विच करना काफ़ी मुश्किल होता है. ज़्यादा बेहतर तरीका यह है कि उपयोगकर्ता के डिवाइस की चौड़ाई को टेक्स्ट साइज़ पर असर डाला जाए.

सीएसएस में vw यूनिट का मतलब है “व्यूपोर्ट की चौड़ाई”. फ़ॉन्ट साइज़ को व्यूपोर्ट की चौड़ाई में जोड़ने का मतलब है कि टेक्स्ट बड़ा होगा और ब्राउज़र की चौड़ाई के अनुपात में छोटा होगा. इससे यह अनुमान लगाना मुश्किल हो जाता है कि किसी खास चौड़ाई पर टेक्स्ट का साइज़ क्या होगा, लेकिन आपको पता है कि टेक्स्ट का साइज़ उपयोगकर्ता के ब्राउज़र की चौड़ाई के हिसाब से सही होगा.

यह ज़रूरी है कि आप vw का इस्तेमाल, फ़ॉन्ट साइज़ के एलान में खुद न करें.

यह न करें
html {
  font-size: 2.5vw;
}

अगर ऐसा किया जाता है, तो उपयोगकर्ता टेक्स्ट का साइज़ नहीं बदल पाएगा. em, rem या ch जैसी किसी मिलती-जुलती यूनिट को मिक्स करने पर, टेक्स्ट का साइज़ बदला जा सकता है. इसके लिए, सीएसएस calc() फ़ंक्शन सबसे अच्छा है.

ऐसा करें
html {
  font-size: calc(0.75rem + 1.5vw);
}

हिसाब-किताब ब्राउज़र को करने दें. इससे किसी खास चौड़ाई पर टेक्स्ट का साइज़ कितना होगा, इसका सटीक अनुमान लगाना मुश्किल हो जाता है. हालांकि, आपको पता होता है कि टेक्स्ट का साइज़ सही रेंज में होगा. उपयोगकर्ता का ब्राउज़र, टेक्स्ट के साइज़ की सटीक गिनती करता है.

हालांकि, अब यह संभावना है कि टेक्स्ट को छोटी स्क्रीन पर बहुत छोटा और चौड़ी स्क्रीन पर बहुत बड़ा दिखाया जाएगा.

टेक्स्ट जोड़ा जा रहा है

आप शायद यह नहीं चाहेंगे कि आपका टेक्स्ट सिकुड़कर इसे हद तक बढ़ा दे. सीएसएस clamp() फ़ंक्शन का इस्तेमाल करके, यह कंट्रोल किया जा सकता है कि स्केलिंग कहां से शुरू और खत्म हो. यह स्केलिंग को किसी खास रेंज पर “जोड़ता” है.

clamp() फ़ंक्शन, calc() फ़ंक्शन की तरह होता है, लेकिन इसमें तीन वैल्यू होती हैं. बीच की वैल्यू वही है जिसे calc() को भेजा जाता है. शुरुआती वैल्यू से यह पता चलता है कि टेक्स्ट का साइज़ कम से कम कितना होना चाहिए. इस मामले में यह 1rem वैल्यू होती है, ताकि लोगों की पसंद के फ़ॉन्ट साइज़ से कम न हो. क्लोज़िंग वैल्यू, ज़्यादा से ज़्यादा साइज़ के बारे में बताती है.

html {
  font-size: clamp(1rem, 0.75rem + 1.5vw, 2rem);
}

अब टेक्स्ट का साइज़ छोटा और उपयोगकर्ता की स्क्रीन के हिसाब से बढ़ता है. हालांकि, टेक्स्ट का साइज़ कभी भी 1rem से कम या 2rem से ज़्यादा नहीं होगा.

लाइन की लंबाई

वेब प्रिंट नहीं है, लेकिन हम प्रिंट की दुनिया से सबक सीख सकते हैं और उन्हें वेब पर लागू कर सकते हैं.

अपनी क्लासिक किताब द एलिमेंट ऑफ़ टाइपोग्राफ़िक स्टाइल में, रॉबर्ट ब्रिंगहर्स्ट ने लाइन की लंबाई (या माप) के बारे में यह कहा था:

इसमें 45 से 75 वर्ण होते हैं. यह माना जाता है कि सेरिफ़ वाले टेक्स्ट की होम स्क्रीन में, टेक्स्ट साइज़ में सिर्फ़ एक कॉलम वाले पेज के लिए एक लाइन की ज़रूरत के हिसाब से लाइन की ज़रूरत होती है. 66-वर्ण की पंक्ति (अक्षर और स्पेस वाली) को व्यापक रूप से आदर्श माना जाता है. कई कॉलम के काम के लिए, बेहतर औसत 40 से 50 वर्ण हैं.

सीधे सीएसएस में लाइन की लंबाई सेट नहीं की जा सकती. कोई line-length प्रॉपर्टी नहीं है. हालांकि, कंटेनर की चौड़ाई को सीमित करके टेक्स्ट को ज़्यादा चौड़ा होने से रोका जा सकता है. इसके लिए, max-inline-size प्रॉपर्टी सबसे सही है.

लाइन की लंबाई को px जैसी तय यूनिट के साथ सेट न करें. उपयोगकर्ता अपने फ़ॉन्ट के साइज़ को ऊपर और नीचे बढ़ा सकते हैं. इसके हिसाब से, आपकी लाइन की लंबाई अडजस्ट हो जानी चाहिए. rem या ch जैसी रिलेटिव यूनिट का इस्तेमाल करें.

यह न करें
article {
  max-inline-size: 700px;
}
ऐसा करें
article {
  max-inline-size: 66ch;
}

चौड़ाई के लिए ch यूनिट का इस्तेमाल करने से, उस फ़ॉन्ट साइज़ में नई लाइनें 66वें वर्ण पर रैप हो जाएंगी.

लाइन की ऊंचाई

सीएसएस में कोई line-length प्रॉपर्टी नहीं है, लेकिन line-height प्रॉपर्टी है.

टेक्स्ट की छोटी लाइनों में line-height की बड़ी वैल्यू हो सकती हैं. हालांकि, टेक्स्ट की लंबी लाइनों के लिए बड़े line-height वैल्यू का इस्तेमाल करने पर, पढ़ने वालों को एक लाइन के आखिर से अगली लाइन की शुरुआत तक जाने में मुश्किल होती है.

article {
  max-inline-size: 66ch;
  line-height: 1.65;
}
blockquote {
  max-inline-size: 45ch;
  line-height: 2;
}

line-height के अपने एलान के लिए, यूनिटलेस वैल्यू का इस्तेमाल करें. इससे यह पक्का होता है कि लाइन की ऊंचाई font-size के बराबर है.

यह न करें
line-height: 24px;
ऐसा करें
line-height: 1.5;

कॉम्बिनेशन और स्केल

यूज़र इंटरफ़ेस बनाते समय, हैरारकी को प्राथमिकता देना न भूलें, ताकि उसे बेहतर तरीके से पढ़ा जा सके. ऐसा करने का एक अच्छा तरीका यह है कि आपके डिज़ाइन सिस्टम में मौजूद टाइपोग्राफ़ी के हिसाब से स्केल किया जाए.

वेब फ़ॉन्ट

टाइपफ़ेस, आपके शब्दों की आवाज़ की तरह होता है. वेब पर सबसे लंबे समय तक फ़ॉन्ट के बहुत कम विकल्प उपलब्ध थे. सिर्फ़ सिस्टम फ़ॉन्ट का इस्तेमाल किया जा सकता था. हालांकि, अब आपके पास ऐसा वेब फ़ॉन्ट चुनने का विकल्प है जो आपके कॉन्टेंट से मिलता-जुलता हो.

ब्राउज़र को यह बताने के लिए @font-face का इस्तेमाल करें कि आपकी वेब फ़ॉन्ट फ़ाइलें कहां मिलेंगी. woff2 को अपने वेब फ़ॉन्ट फ़ॉर्मैट के तौर पर इस्तेमाल करें. यह अच्छी तरह से काम करता है और इसकी परफ़ॉर्मेंस सबसे ज़्यादा होती है.

@font-face {
  font-family: Roboto;
  src: url('/fonts/roboto-regular.woff2') format('woff2');
}
body {
  font-family: Roboto, sans-serif;
}

हालांकि, वेब पर जोड़ी गई हर फ़ाइल से उपयोगकर्ता अनुभव खराब हो सकता है, क्योंकि इससे पेज लोड होने का समय बढ़ जाता है. याद रखें, डिज़ाइन सिर्फ़ इस बारे में नहीं है कि फ़ाइनल पिक्सल कैसे दिखते हैं. वे पिक्सल कितनी तेज़ी से पेंट होते हैं, यह उपयोगकर्ता अनुभव का एक अहम हिस्सा है. उपयोगकर्ता को अच्छा अनुभव देने के लिए, उसे तेज़ी से लोड किया जा सकता है.

फ़ॉन्ट लोड हो रहा है

ब्राउज़र में फ़ॉन्ट फ़ाइल को जल्द से जल्द डाउनलोड करने का अनुरोध किया जा सकता है. अपने दस्तावेज़ के head में ऐसा link एलिमेंट जोड़ें जो आपकी वेब फ़ॉन्ट फ़ाइल का रेफ़रंस देता हो. preload की वैल्यू वाली rel एट्रिब्यूट की मदद से, ब्राउज़र को यह पता चलता है कि उस फ़ाइल को प्राथमिकता देनी है. font वैल्यू वाली as एट्रिब्यूट की मदद से, ब्राउज़र को पता चलता है कि यह किस तरह की फ़ाइल है. type एट्रिब्यूट की मदद से, अपनी फ़ाइल के बारे में ज़्यादा सटीक जानकारी दी जा सकती है.

<link href="/fonts/roboto-regular.woff2" type="font/woff2" 
  rel="preload" as="font" crossorigin>

आपको crossorigin एट्रिब्यूट शामिल करना होगा, भले ही फ़ॉन्ट फ़ाइलें खुद होस्ट की जा रही हों.

सीएसएस font-display प्रॉपर्टी का इस्तेमाल करके, ब्राउज़र को यह बताएं कि सिस्टम फ़ॉन्ट से वेब फ़ॉन्ट पर किए गए स्विचओवर को कैसे मैनेज करना है. वेब फ़ॉन्ट लोड होने तक, आपके पास कोई भी टेक्स्ट न दिखाने का विकल्प होता है. सिस्टम फ़ॉन्ट को तुरंत दिखाया जा सकता है. इसके बाद, वेब फ़ॉन्ट लोड होने पर स्विच किया जा सकता है. दोनों रणनीतियों के अपने फ़ायदे हैं. अगर आपको कोई टेक्स्ट दिखाने से पहले, वेब फ़ॉन्ट के डाउनलोड होने का इंतज़ार करना है, तो हो सकता है कि उपयोगकर्ता लंबे समय तक किसी खाली पेज की तरफ़ देखते रहें. अगर टेक्स्ट को पहले सिस्टम फ़ॉन्ट में दिखाया जाता है और उसके बाद वेब फ़ॉन्ट पर स्विच किया जाता है, तो लोगों को पेज पर कॉन्टेंट के शिफ़्ट होने में बहुत ज़्यादा परेशानी हो सकती है.

सबसे अच्छा तरीका यह है कि किसी भी टेक्स्ट को दिखाने से पहले, थोड़ी देर इंतज़ार करें. अगर वेब फ़ॉन्ट तय समय से पहले लोड हो जाता है, तो टेक्स्ट को वेब फ़ॉन्ट में दिखाया जाता है. इसमें कॉन्टेंट में कोई बदलाव नहीं होता. अगर समयसीमा खत्म होने के बाद भी वेब फ़ॉन्ट लोड नहीं होता है, तो टेक्स्ट को सिस्टम फ़ॉन्ट का इस्तेमाल करके दिखाया जाता है, ताकि उपयोगकर्ता कम से कम उस कॉन्टेंट को पढ़ सके.

अगर आपको अब भी वेब फ़ॉन्ट लोड होने पर, सिस्टम फ़ॉन्ट की जगह वेब फ़ॉन्ट बदलना है, तो swap की font-display वैल्यू का इस्तेमाल करें.

body {
  font-family: Roboto, sans-serif;
  font-display: swap;
}

अगर आपको टेक्स्ट रेंडर होने के बाद सिस्टम फ़ॉन्ट पर बने रहना है, तो fallback की font-display वैल्यू का इस्तेमाल करें.

body {
  font-family: Roboto, sans-serif;
  font-display: fallback;
}

वैरिएबल फ़ॉन्ट

अगर आप एक ही टाइपफ़ेस के बहुत सारे अलग-अलग वेट या स्टाइल का इस्तेमाल कर रहे हैं, तो शायद आप अलग-अलग फ़ॉन्ट फ़ाइलों का इस्तेमाल करें—हर वज़न या स्टाइल के लिए एक अलग फ़ॉन्ट फ़ाइल.

वैरिएबल फ़ॉन्ट एक फ़ाइल का इस्तेमाल करके इस समस्या को हल करते हैं. रेगुलर, बोल्ड, ज़्यादा बोल्ड वगैरह के लिए अलग-अलग फ़ाइलें रखने के बजाय, वैरिएबल फ़ॉन्ट फ़ाइल रिस्पॉन्सिव होती है. इसमें वह सारी जानकारी शामिल है जिसे अलग-अलग वज़न या स्टाइल में दिखाने की ज़रूरत होती है.

अलग-अलग वेट में दिखाया गया अक्षर &#39;A&#39;.

इसका मतलब है कि सिंगल वैरिएबल वाली फ़ॉन्ट फ़ाइल, किसी सामान्य फ़ॉन्ट फ़ाइल से बड़ी है, लेकिन हो सकता है कि सिंगल वैरिएबल वाली फ़ॉन्ट फ़ाइल, कई सामान्य फ़ॉन्ट फ़ाइलों से छोटी होगी. अगर अलग-अलग तरह के महत्व का इस्तेमाल किया जा रहा है, तो वैरिएबल फ़ॉन्ट से आपकी परफ़ॉर्मेंस बेहतर हो सकती है.

वेब पर अच्छी टाइपोग्राफ़ी का मतलब सिर्फ़ उन टाइप के विकल्पों के बारे में नहीं है जिन्हें आपने डिज़ाइनर के तौर पर चुना है. रिस्पॉन्सिव टाइपोग्राफ़ी में, उपयोगकर्ता के डिवाइस और नेटवर्क कनेक्शन का ध्यान रखा जाता है. सबसे आखिर में, ऐसा डिज़ाइन तैयार किया जाता है जो चाहे जैसा भी देखा जा रहा हो, बेहतरीन लगता है.

रिस्पॉन्सिव टेक्स्ट (स्क्रीन के हिसाब से साइज़ बदलने वाले टेक्स्ट) में महारत हासिल करने के बाद, रिस्पॉन्सिव इमेज के बारे में ज़्यादा जानें.

आपने जो सीखा है उसकी जांच करें

टाइपोग्राफ़ी के बारे में अपनी जानकारी परखें

व्यूपोर्ट में टेक्स्ट रैप करने के लिए, स्टाइल जोड़ना ज़रूरी है.

सही
शैली जोड़ना ज़रूरी नहीं है.
गलत
टेक्स्ट, किसी भी अन्य स्टाइल के बिना, डिफ़ॉल्ट रूप से रैप होगा.

clamp() फ़्लूइड टाइपोग्राफ़ी के लिए फ़ायदेमंद है, क्योंकि

इससे calc() फ़ंक्शन को आसानी से एम्बेड किया जा सकता है
यह बात सही है, लेकिन टाइपोग्राफ़ी के लिए clamp() का इस्तेमाल करना सही नहीं है.
इसके लिए ब्राउज़र सहायता शानदार है.
यह बात सही है, लेकिन टाइपोग्राफ़ी के लिए clamp() का इस्तेमाल करना सही नहीं है.
यह फ़ॉन्ट साइज़ को, ज़रूरत के हिसाब से कम से कम और ज़्यादा से ज़्यादा वैल्यू के बीच लॉक करने की सुविधा देता है. साथ ही, बीच की वैल्यू को स्केल भी करता है.
बहुत छोटे या बहुत बड़े टेक्स्ट के इस्तेमाल से बचें. साथ ही, फ़ॉन्ट का साइज़ आसानी से बदलें.
इससे हिसाब लगाना आसान हो जाता है.
फिर से कोशिश करें.

इस गाइड में, किस तरह की line-height वैल्यू का सुझाव दिया गया था?

24px
पोस्ट में साफ़ तौर पर कहा गया है कि line-height के लिए पिक्सल वैल्यू का इस्तेमाल न करें.
2rem
हालांकि, रेम रिलेटिव वैल्यू होती हैं, लेकिन वे लाइन की ऊंचाई के हिसाब से बहुत छोटी या बहुत बड़ी हो सकती हैं.
1.5
यूनिटलेस रिलेटिव वैल्यू इस्तेमाल करने का सुझाव दिया जाता है.
2vw
line-height के तौर पर व्यूपोर्ट इकाइयों को इस्तेमाल करने में समस्या हो सकती है.

font-display क्या करता है?

ब्राउज़र को बताता है कि सिस्टम फ़ॉन्ट से वेब फ़ॉन्ट पर स्विच करने की सुविधा को कैसे मैनेज करें.
कस्टम फ़ॉन्ट में ट्रांज़िशन में मदद करता है.
फ़ॉन्ट को block या inline-block पर सेट करने की अनुमति देता है.
फ़ॉन्ट में डिसप्ले टाइप नहीं होते.
अगर फ़ॉन्ट छिपा हुआ है या नहीं, तो यह बदल जाता है.
फ़ॉन्ट छिपाए नहीं जा सकते.
रिमोट फ़ॉन्ट लोड करने के उपयोगकर्ता अनुभव के समय को कंट्रोल करने की सुविधा देता है.
इससे लेखक, पसंद के मुताबिक फ़ॉन्ट लोड करने के अनुभव को अपने हिसाब से बना सकते हैं.