सिर्फ HTML से JavaScript को बदलना
(htmhell.dev)- वेब पर JS-निर्भर फीचर्स को HTML/CSS से बदलने के आधुनिक तरीकों का परिचय
details·summary,datalist,popoverजैसे standard elements का उपयोग करके accordion, autocomplete, modal और offscreen navigation लागू करना- यह तरीका download·evaluation·memory usage को कम करके performance और user experience को बेहतर बनाता है
- हर फीचर के लिए CodePen उदाहरण, MDN docs, browser compatibility जानकारी साथ में दी गई है
- JS का उपयोग केवल वहीं करना चाहिए जहाँ उसकी वास्तव में ज़रूरत हो, और HTML/CSS की विकसित क्षमताओं का सक्रिय उपयोग करना चाहिए
HTML और CSS से JS फीचर्स का विकल्प
- लंबे समय तक JavaScript उन फीचर्स के लिए ज़िम्मेदार रहा है जिन्हें HTML और CSS से लागू नहीं किया जा सकता था
- लेकिन HTML और CSS की क्षमताएँ बढ़ने के साथ, कुछ JS फीचर्स को अब native web technologies से बदला जा सकता है
- JS को download, decompress, evaluate और memory में बनाए रखना पड़ता है, इसलिए जहाँ संभव हो फीचर्स को HTML/CSS में स्थानांतरित करना अधिक प्रभावी है
- दिशा यह है कि JS जटिल logic पर फोकस करे, और सरल UI control को HTML/CSS को सौंप दिया जाए
Accordion / expandable content panel
detailsऔरsummaryelements से बिना JS के accordion बनाया जा सकता है- content को click करके खोला और बंद किया जा सकता है, और
openattribute से default state तय होती है - एक ही
nameattribute इस्तेमाल करने पर एक समय में केवल एक panel खुला रहेगा
- content को click करके खोला और बंद किया जा सकता है, और
- CSS से styling की जा सकती है या JS से open/close state को control भी किया जा सकता है
- संबंधित सामग्री: MDN
detailsdocs, CodePen उदाहरण, browser compatibility table
Autocomplete suggestion input
inputऔरdatalistके संयोजन से auto-filtering dropdown बनाया जा सकता है- टाइप करते समय suggestion list अपने आप filter होती है
- text के अलावा
number,timeजैसे कई input types भी समर्थित हैं
- Firefox अभी केवल text-based input को support करता है, और mobile accessibility की कुछ सीमाएँ हैं
- संबंधित सामग्री: MDN
datalistdocs, SitePoint tutorial, browser compatibility table
Modal / popover
popoverऔरpopovertargetattributes से बिना JS के modal और popover लागू किए जा सकते हैंauto,hint,manualये तीन modes उपलब्ध हैंautoबाहरी click या ESC से बंद हो जाता है, जबकिmanualकेवल manually बंद होता है
- Firefox और iOS में
hintmode समर्थित नहीं है - संबंधित सामग्री: MDN
popoverdocs, Chrome blog, CodePen उदाहरण, accessibility से जुड़ा वीडियो
Offscreen navigation / content
popoverफीचर का उपयोग करके offscreen navigation menu बनाया जा सकता है- अर्थपूर्ण संरचना के लिए
navelement का उपयोग, और CSStranslateसे उसे स्क्रीन के अंदर-बाहर ले जाना - बाहरी click पर यह बंद हो जाता है, और
popover="manual"से manual close सेट किया जा सकता है ::backdroppseudo-element से background को semi-transparent बनाया जा सकता है
- अर्थपूर्ण संरचना के लिए
- संबंधित सामग्री: MDN Popover API, Chrome blog, CodePen उदाहरण
निष्कर्ष
- JS की ताकत को मानते हुए भी, इसे केवल ज़रूरी जगहों पर ही इस्तेमाल करना चाहिए
- हालिया HTML/CSS प्रगति के कारण JS-रहित कई विकल्प उभरकर आए हैं
- और अधिक उदाहरण लेखक की ब्लॉग पोस्ट “Replace JS with No-JS or Lo-JS Options” में देखे जा सकते हैं
- JS को न्यूनतम रखना और performance optimization के ज़रिए user experience बेहतर बनाने पर ज़ोर
5 टिप्पणियां
लगता है जैसे कुछ कंटेंट कट गया है
मैंने इसे संशोधित कर दिया है~!
सीमाएँ तो साफ़ दिखती हैं, और जिस पल AI सक्रिय हो गया.. क्या ऐसी refactoring करने की ज़रूरत होगी? JS content blocking जैसी बातों को ध्यान में रखा गया है क्या?
Hacker News की राय
CodePen links की जगह HTML alternatives के examples सीधे पेज पर डाले होते तो बात कहीं ज़्यादा convincing लगती
<details>/<summary>tags की potential सच में कमाल की हैइनसे लगभग सब कुछ किया जा सकता है, लेकिन ज़्यादातर component libraries इन्हें नज़रअंदाज़ करती हैं
aria attributes की भी ज़रूरत नहीं पड़ती और accessibility भी built-in मिलती है
<details>GitHub जैसी Markdown-आधारित sites पर भी काम करता है। लंबे logs को fold करके साफ़-सुथरे ढंग से पोस्ट किया जा सकता हैकिताब “You Don’t Need JavaScript” लिखते समय मुझे लगा कि JS अक्सर नए features जोड़ने से ज़्यादा platform की मौजूदा capabilities को supplement करता है
<input>और<datalist>real-world use के लिए कमज़ोर हैंusers typo tolerance, helper text, mobile UX जैसी चीज़ें उम्मीद करते हैं, लेकिन datalist इन्हें पूरा नहीं कर पाता
HTML के semantic use या accessibility पर लगभग कोई ध्यान नहीं देता
“सिर्फ HTML से बनाते हैं” जैसी पोस्ट में external service पर निर्भर रहना विरोधाभासी लगता है
यह WHATWG stage 3 में है, और JS-आधारित dropdown की nightmare implementation की जगह ले सकता है
Chrome blog post देखें
HTMX या Phoenix LiveView जैसे alternatives भी आज़माए, लेकिन वे भी पूरी तरह समाधान नहीं हैं
आख़िरकार लगता है कि modern JS को स्वीकार करना ही व्यावहारिक है
<marquee>tag shopping sites में horizontal scrolling के लिए अच्छा था, लेकिन अब उसे JS से ज़बरदस्ती बनाया जाता है। काश HTML और UI patterns को native support देताcomplex web apps के लिए JS ज़रूरी है, लेकिन बहुत-से क्षेत्र ऐसे हैं जो सिर्फ HTML से भी संभव हैं
लेकिन अब JS data collection और ad tracking का केंद्रीय tool बन चुका है
सोचता हूँ कि JS के बिना भी big tech उसी स्तर की surveillance और ad services बना पाएगी या नहीं
आख़िर में JS के प्रति नाराज़गी सिर्फ तकनीकी मुद्दा नहीं, बल्कि ad ecosystem पर अविश्वास से भी आती है
ऐसी कोशिशें कभी-कभी मुझे इस पर सोचने का मौका देती हैं कि क्या मैं overengineering कर रहा हूँ, लेकिन समृद्ध requirements वाले real-world काम के नज़रिए से देखें तो यह लगभग किसी करतब दिखाने जैसा है।