कम-से-कम CSS से एक अच्छा साइट बनाना (2023)
(thecascade.dev)- कई डेवलपर्स CSS डिज़ाइन की अति के कारण अनावश्यक समस्याओं का सामना करते हैं
- सिर्फ़ न्यूनतम global styles से भी काफ़ी साफ़-सुथरे और responsive पेज बनाए जा सकते हैं
- इमेज, SVG, वीडियो एलिमेंट्स पर size limit और block display लगाने भर से बेसिक layout समस्याएँ हल की जा सकती हैं
- system-ui फ़ॉन्ट, उचित line-height, और पैराग्राफ की अधिकतम चौड़ाई सीमित करने से पठनीयता बेहतर की जा सकती है
- OS की dark mode जैसी पसंदीदा सेटिंग्स को दर्शाने के लिए color-scheme प्रॉपर्टी लागू करना ज़रूरी है
कम-से-कम CSS से एक अच्छा साइट बनाना
CSS की अति की समस्या और अपनाने का तरीका
- बहुत से लोग वेबसाइट बनाते समय CSS डिज़ाइन को ज़रूरत से ज़्यादा जटिल बना देते हैं
- सिर्फ़ न्यूनतम CSS से भी काफ़ी परिष्कृत और मूलभूत बातों पर टिके responsive पेज बनाए जा सकते हैं
बुनियादी HTML और इमेज हैंडलिंग
-
केवल बेसिक HTML लिखने पर भी साइट मूलभूत responsive व्यवहार देती है
-
इमेज की वजह से layout में overflow समस्या आ सकती है, इसलिए नीचे दिया गया CSS लागू किया जाता है
img { max-width: 100%; display: block; } -
SVG, video एलिमेंट्स में भी ऐसी ही समस्या होने पर, इसे नीचे की तरह बढ़ाया जा सकता है
img, svg, video { max-width: 100%; display: block; }
टाइपोग्राफी में सुधार
-
ब्राउज़र का डिफ़ॉल्ट फ़ॉन्ट डिज़ाइन के लिहाज़ से फीका लग सकता है
-
फ़ॉन्ट फ़ैमिली के रूप में system-ui इस्तेमाल करने से हर प्लेटफ़ॉर्म के अनुरूप डिफ़ॉल्ट टाइपफ़ेस लागू किया जा सकता है
-
डिफ़ॉल्ट फ़ॉन्ट साइज़ और line-height थोड़ा छोटा होने की प्रवृत्ति रखते हैं, इसलिए नीचे जैसी सेटिंग सुझाई जाती है
body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } -
सिर्फ़ इस सेटिंग से भी ब्राउज़र डिफ़ॉल्ट की तुलना में बड़ा सुधार देखा जा सकता है
dark mode सपोर्ट
-
बहुत से यूज़र dark mode पसंद करते हैं, इसलिए OS सेटिंग का पालन करने वाली color-scheme प्रॉपर्टी उपयोगी है
html { color-scheme: light dark; } -
यह प्रॉपर्टी user agent styles को सिस्टम की पसंदीदा थीम अपने-आप दर्शाने के लिए सेट करती है
-
इसे HTML टैग attribute के रूप में भी दिया जा सकता है
<html lang="en" color-scheme="light dark"></html> -
सिर्फ़ सिस्टम preference ही नहीं, बल्कि यूज़र को सीधे color scheme चुनने का विकल्प देना भी एक अच्छा best practice है
कंटेंट चौड़ाई सीमित करना
-
कंटेंट पैराग्राफ की लंबाई पठनीयता पर बड़ा असर डालने वाला महत्वपूर्ण तत्व है
-
आम तौर पर मुख्य टेक्स्ट एक लाइन में 45~90 अक्षरों की सीमा में दिखना आदर्श माना जाता है
-
नीचे की तरह
mainएलिमेंट की अधिकतम चौड़ाई सीमित करके पैराग्राफ की पठनीयता बेहतर की जा सकती हैmain { max-width: min(70ch, 100% - 4rem); margin-inline: auto; } -
min()फ़ंक्शन70chऔर100% - 4remमें से छोटा मान चुनता है -
margin-inline: autoसे क्षैतिज केंद्र-संरेखण हो जाता है -
ज़रूरत के अनुसार main की जगह .container या .wrapper क्लास का इस्तेमाल भी किया जा सकता है
अंतिम न्यूनतम CSS उदाहरण
-
ऊपर की बातों को मिलाकर, नीचे दिए गए न्यूनतम CSS सेट से एक स्थिर साइट बनाई जा सकती है
html { color-scheme: light dark; } body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } img, svg, video { max-width: 100%; display: block; } main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }
समापन और विस्तारशीलता
- ऊपर का उदाहरण हल्के शुरुआती बिंदु या छोटे पेज के लिए तुरंत उपयोग किया जा सकता है
- अधिकतर मामलों में, इस आधार पर अतिरिक्त styles जोड़कर आगे विस्तार करना बेहतर होता है
1 टिप्पणियां
Hacker News राय
system uifont family की सिफारिश न करने की वजहें अब भी मान्य हैं।https://infinnie.github.io/blog/2017/systemui.html
stligature इतनी खराब लगती है कि उस वेबसाइट से font सलाह नहीं लेना चाहूँगाmax-widthजैसी एक चीज़ से भी जूझते हैं? personal homepage बनाने वाले सभी लोग ही target हैंयह गलत है। सही syntax है
लेखक ने कुछ उदाहरणों में सही लिखा है, लेकिन पहले उदाहरण में गलत लिखा, जिससे भ्रम हो सकता है
इस तरह।
'times'और'Times New Roman'दोनों बिना quotes के ठीक चलते दिखते हैं, तो समझ नहीं आता कि यह पुराने font होने की वजह से exception है, या CSS नाम मिलान में काफी उदार हैइसे तो मैं बस cash money कहना चाहूँगा
https://meyerweb.com/eric/books/
html/cssलिखने पर layout और customization में असुविधा होती है। Astro themes में personal blog के लिए भी ज़्यादा विकल्प नहीं हैं, ज़्यादातर corporate या flashy हैं। यह सब सोचते हुए फिर से हैरानी होती है कि website design इतना मुश्किल क्यों हो गया है। framework, component, और ढेरों dependency के बीच web developers इस प्रवाह के साथ कैसे चलते रहते हैं, यह जानना चाहता हूँfranklin.jlmath, inline code handling और सादगी के लिहाज़ से बिल्कुल उपयुक्त लगाcontent-width, बड़े fonts और line-height का overuse परेशान करता है। आजकल बहुत सी sites बहुत बड़े fonts और बहुत चौड़ी line spacing इस्तेमाल करती हैं, जिससे scroll बहुत ज़्यादा करना पड़ता है। browser का default font size सिस्टम के हिसाब से ठीक बैठता है, इसलिए font size को वैसे ही रहने देना और zoom पर छोड़ देना बेहतर हैimg { max-width: 100%; }इस setting को हमेशा
height: autoके साथ इस्तेमाल करना चाहिए। नहीं तो image का aspect ratio बिगड़ जाएगाimg, svg, video { max-width: 100%; }Chrome 141 में nested SVG elements की
width/heightसमस्या के कारणautocalculation गलत हो जाती है। अस्थायी रूप सेsvg:where(:not(svg svg))से संभालना चाहिएsystem-uifont सिर्फ साधारणsans-serifreplacement नहीं है। content body में system UI font इस्तेमाल करने पर कुछ OS/भाषा संयोजनों में पढ़ना लगभग असंभव जितना असुविधाजनक हो सकता है। अगरsans-serifचाहिए, तोsans-serifही इस्तेमाल करना सही हैdefault font size थोड़ा छोटा है, इसलिए 18~20px(
1.25rem) के आसपास ठीक रहता है। लेकिन छोटी screens पर1remसे ऊपर न जाना बेहतर हैdefault
line-heightके लिए 1.5~1.7 की सिफारिश होती है, लेकिन छोटी screens पर 1.7 बहुत ज़्यादा लगता है। 1.4~1.5 उचित है, और screen size के अनुसार 1.4~1.6 तक समायोजित किया जा सकता हैfont-family: System UI;यह स्पष्ट syntax error है। stylesheet की जाँच करें तो तुरंत पता चल जाएगा
dark/light system theme और web theme को अलग रखना अच्छा विचार है। Firefox में default रूप से content system theme का पालन करता है, और इसे अलग से समायोजित भी किया जा सकता है
main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }इसका मतलब न्यूनतम लगभग
2remmargin है (bodyके default margin को जोड़ें तो2rem + 8px)। margin बहुत ज़्यादा है, और इसे लगाने की जगह भी थोड़ी अजीब है। अगरmainपर लागू करना हो तोजैसे
paddingका इस्तेमाल करना अधिक तर्कसंगत है। लेकिन वास्तव मेंheaderयाfooterमें भी वही side spacing चाहिए, इसलिएbodymargin को समायोजित करना बेहतर हैइससे spacing को लगभग
40pxसे घटाकर16pxस्तर तक लाया जा सकता है