← Back to HTML Course | Chapter 7: Advanced APIs & Features | Lesson 8 of 11

HTML Accessibility

सोचिए आप एक खूबसूरत पब्लिक पार्क बना रहे हैं, जिसमें शानदार स्लाइड्स और पिकनिक टेबल्स हैं। लेकिन जब आप एंट्रेंस देखते हैं, तो वहाँ सिर्फ खड़ी, पथरीली सीढ़ियाँ हैं—कोई रैंप, रास्ता, या साइन नहीं। व्हीलचेयर या स्ट्रोलर इस्तेमाल करने वाले विज़िटर्स आपके पार्क का मज़ा लेने से पूरी तरह वंचित रह जाएंगे। Web accessibility (अक्सर A11y कहा जाता है) आपकी वेबसाइट के लिए वही ज़रूरी रैंप और साइन बनाना है। यह आपके HTML कोड को इस तरह स्ट्रक्चर करने की कला है कि हर कोई—स्क्रीन रीडर्स से नेविगेट करने वाले दृष्टिबाधित यूज़र्स या माउस इस्तेमाल न कर पाने वाले लोग भी—आसानी से आपकी साइट ब्राउज़ कर सके। Accessible कोड लिखना कोई अतिरिक्त काम नहीं है; यह बस साफ, स्टैंडर्ड HTML लिखना है जो सबके लिए काम करे।

Web Accessibility की बुनियादी बातें

Web accessibility का मतलब है ऐसे पेज डिज़ाइन करना जिन्हें कोई भी नेविगेट कर सके, चाहे उसकी शारीरिक या मानसिक क्षमता कुछ भी हो। सिमैंटिक, स्टैंडर्ड HTML कोड लिखना एक एक्सेसिबल वेबपेज की नींव है।

Note: बिल्ट-इन कीबोर्ड नेविगेशन सपोर्ट अपने-आप पाने के लिए नेटिव HTML टैग्स (जैसे buttons और links) का उपयोग करें।
Warning: गैर-क्लिकेबल टैग्स (जैसे div या span) को बटन जैसा दिखने के लिए स्टाइल करने से वे कीबोर्ड-ओनली यूज़र्स के लिए पूरी तरह से इस्तेमाल के लायक नहीं रह जाते।

उदाहरण: Web Accessibility Basics

markup
<button onclick="alert('Clicked')">Click me</button>

सिमैंटिक HTML Landmarks

सिमैंटिक टैग्स (जैसे main, nav, header, और footer) आपके वेबपेज पर लेआउट लैंडमार्क्स की तरह काम करते हैं। स्क्रीन रीडर्स स्ट्रक्चरल आउटलाइन्स बताने के लिए इन लैंडमार्क्स का उपयोग करते हैं, जिससे यूज़र्स सीधे कंटेंट ब्लॉक्स पर आसानी से जा सकते हैं।

Note: यूज़र्स को नेविगेट करने में मदद के लिए हमेशा अपने पेज के मुख्य टॉपिक को एक ही, साफ-सुथरे main टैग के अंदर रखें।
Warning: सिमेंटिक लैंडमार्क्स की जगह सादे div टैग्स का ज़्यादा इस्तेमाल करने से स्क्रीन-रीडर यूज़र्स के लिए आपके पेज पर नेविगेट करना भ्रमित करने वाला हो सकता है।

उदाहरण: Semantic HTML Landmarks

markup
<header>Site Header</header>
<nav>Navigation</nav>
<main>Main content</main>
<footer>Footer</footer>

ARIA Attributes और Roles

ARIA (Accessible Rich Internet Applications) एट्रिब्यूट्स खास accessibility टैग्स हैं जिनका उपयोग तब किया जाता है जब स्टैंडर्ड HTML सिमैंटिक्स काफी नहीं होते, ताकि आपके मार्कअप में कॉन्टेक्स्ट जोड़ा जा सके।

Note: दिखने वाले टेक्स्ट के बिना सिर्फ आइकन वाले बटन्स का वर्णन करने के लिए हमेशा aria-label का उपयोग करें।
Warning: ARIA का पहला नियम है: अगर कोई नेटिव, सिमेंटिक HTML टैग वह काम कर सकता है, तो ARIA का इस्तेमाल न करें।

उदाहरण: ARIA Attributes and Roles

markup
<button aria-label="Close dialog">X</button>

कीबोर्ड नेविगेशन और फोकस स्टाइल्स

सिर्फ कीबोर्ड इस्तेमाल करने वाले और दृष्टिबाधित यूज़र्स वेबपेज्स को क्रमवार नेविगेट करने के लिए Tab की पर निर्भर रहते हैं। आपको यह सुनिश्चित करना चाहिए कि हर इंटरैक्टिव एलिमेंट में एक दिखने वाला फोकस इंडिकेटर हो (जैसे border outline) ताकि यूज़र्स देख सकें कि वे पेज पर कहाँ हैं।

Note: अपने कस्टम, स्टाइल किए गए एलिमेंट्स को वेबपेज की tab sequence में शामिल करने के लिए tabindex एट्रिब्यूट का उपयोग करें।
Warning: ब्राउज़र के फोकस आउटलाइन्स को कस्टम फोकस स्टाइल्स से बदले बिना उन्हें छिपाने के लिए कभी भी CSS outline: none का इस्तेमाल न करें।

उदाहरण: Keyboard Navigation and Focus Styles

markup
<a href="#" style="outline: 2px solid blue;">Focusable link</a>

कलर कॉन्ट्रास्ट और Alt विवरण

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

Note: साधारण पैराग्राफ टेक्स्ट के लिए कम से कम 4.5:1 का कॉन्ट्रास्ट रेशियो बनाए रखने की कोशिश करें।
Warning: alt एट्रिब्यूट्स न देना एक बड़ी accessibility गलती है, जिससे आपकी इमेजेस स्क्रीन रीडर्स के लिए अदृश्य हो जाती हैं।

उदाहरण: Color Contrast and Alt Descriptions

markup
<p style="color: #000000; background-color: #FFFFFF;">High contrast text</p>
<img src="photo.jpg" alt="A red bicycle leaning against a wall">

Skip Link लागू करना

एक skip link कीबोर्ड यूज़र्स को पेज के सबसे ऊपर से सीधे मुख्य कंटेंट पर जाने देता है, एक लंबे नेविगेशन मेनू को छोड़कर। यह आमतौर पर विज़ुअली तब तक छुपा रहता है जब तक इसे कीबोर्ड फोकस न मिले, और उसी समय यह साफ दिखने लगता है।

Note: skip link को body में सबसे पहला फोकस होने वाला एलिमेंट रखें ताकि यह किसी भी कीबोर्ड यूज़र को मिलने वाली हमेशा सबसे पहली चीज़ हो।
Warning: display:none से छिपाया गया skip link कभी भी कीबोर्ड फोकस नहीं पा सकता — इसके बजाय off-screen पोज़िशनिंग तकनीक का इस्तेमाल करें।

उदाहरण: Skip Links Implementation

markup
<a href="#main-content" style="position: absolute; left: -9999px;">Skip to main content</a>
<main id="main-content">Main content</main>

एक्सेसिबल फॉर्म लेबल्स

हर फॉर्म इनपुट को एक जुड़ा हुआ label चाहिए ताकि स्क्रीन रीडर्स यह बता सकें कि वह फील्ड किसके लिए है। इनपुट को label के अंदर रैप करना, या मैचिंग for और id एट्रिब्यूट से उन्हें जोड़ना, दोनों ही तरीकों से यह ज़रूरी रिलेशनशिप बनती है।

Note: सही तरीके से जुड़े हुए label पर सीधे क्लिक या टैप करने से उसका इनपुट भी फोकस होना चाहिए — यह टेस्ट करने का एक बढ़िया तरीका है कि आपके labels सही तरीके से जुड़े हैं या नहीं।
Warning: असली लेबल की जगह सिर्फ placeholder का इस्तेमाल करना एक आम गलती है — टाइप करना शुरू करते ही placeholder गायब हो जाता है और इसे सभी स्क्रीन रीडर्स भरोसे के साथ अनाउंस नहीं करते।

उदाहरण: Accessible Form Labels

markup
<label for="email">Email</label>
<input type="email" id="email" name="email">

Accessibility टेस्टिंग टूल्स (Lighthouse, axe)

Chrome DevTools में सीधे बिल्ट-इन Lighthouse, और ब्राउज़र एक्सटेंशन के रूप में उपलब्ध axe, दोनों ही किसी पेज को अपने-आप स्कैन करके मिसिंग alt text या खराब कलर कॉन्ट्रास्ट जैसी आम accessibility समस्याओं को फ्लैग करते हैं।

ऑटोमेटेड टूल्स कई समस्याएँ जल्दी पकड़ लेते हैं, लेकिन वे वाकई कीबोर्ड और असली स्क्रीन रीडर से टेस्ट करने की जगह नहीं ले सकते।

Note: डेवलपमेंट के दौरान Lighthouse का accessibility ऑडिट जल्दी और बार-बार चलाएँ, न कि सिर्फ लॉन्च से ठीक पहले एक बार।
Warning: हर automated accessibility चेक पास कर लेना यह गारंटी नहीं देता कि पेज वाकई usable है — automated टूल्स आमतौर पर असली accessibility समस्याओं का सिर्फ लगभग एक-तिहाई हिस्सा ही पकड़ पाते हैं।

उदाहरण: Accessibility Testing Tools (Lighthouse, axe)

markup
<!-- Run Chrome DevTools > Lighthouse > Accessibility audit on this page -->
<img src="banner.jpg" alt="Summer sale banner">
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.