يا جماعة الخير، اسمحوا لي أحكي لكم قصة صارت معي ومع فريقي قبل كم سنة، قصة غيرت نظرتنا للبرمجة وللمستخدمين إلى الأبد. كنا وقتها مبسوطين على حالنا، أطلقنا تطبيق جديد، واجهاته “بتفتح النفس”، وألوانه جذابة، والأنيميشن فيه سلسة زي المي. كنا حاسين حالنا “أبو العُرّيف” في عالم تجربة المستخدم، وكل يوم نفتح لوحة التحكم ونشوف أرقام المستخدمين الجدد وهي بتزيد، وشعور الفخر يملأ قلوبنا.
في يوم من الأيام، وأنا بشرب فنجان القهوة الصباحي وبراجع إيميلات الشغل، لفت نظري إيميل بعنوان “محاولة فاشلة لاستخدام تطبيقكم”. فتحت الإيميل، وكان من شب اسمه “أحمد”، طالب جامعي كفيف. كتب أحمد بلغة بسيطة ومؤدبة كيف أنه سمع عن تطبيقنا من أصحابه وتحمس يجربه، لكنه اصطدم بحائط. قال بالحرف الواحد: “تطبيقكم بالنسبة لي صندوق أسود، قارئ الشاشة لا يقرأ شيئاً، الأزرار بدون أسماء، والصور بلا وصف. شعرت أنني غير مرئي، وأن هذا العالم الرقمي الجميل ليس لي”.
والله يا جماعة، حسيت كأن حدا ضربني كف على وجهي. كل الفخر اللي كنت حاسس فيه تبخر في لحظة. تطبيقنا، اللي صرفنا عليه شهور من التعب والتصميم، كان فعلياً قطعة بلاستيك عديمة الفائدة لشريحة كاملة من الناس. أحمد لم يكن ينتقد، كان يصف واقعاً مؤلماً. وقتها أدركت الكارثة: نحن لم نبنِ تطبيقاً، بل بنينا جداراً رقمياً جميلاً يستبعد الناس. هذه الحادثة كانت بداية رحلتنا مع عالم لم نكن نلقي له بالاً: عالم “الوصولية الرقمية” أو كما يُعرف اختصاراً بـ a11y.
ما هي “الوصولية الرقمية” (a11y) التي أنقذتنا؟
ببساطة شديدة، الوصولية الرقمية (Digital Accessibility) هي تصميم وبناء المواقع والتطبيقات بحيث يمكن لكل الناس استخدامها، بغض النظر عن قدراتهم الجسدية أو العقلية. لاحظ إني قلت “كل الناس”. هذا لا يشمل فقط ذوي الإعاقات الدائمة (مثل المكفوفين، الصم، أو من لديهم إعاقات حركية)، بل يمتد ليشمل:
- ذوي الإعاقات المؤقتة: مثل شخص يده مكسورة ويستخدم يداً واحدة فقط.
- ذوي الإعاقات الظرفية: مثل أم تحمل طفلها بيد وتستخدم الهاتف بالأخرى، أو شخص يستخدم هاتفه تحت أشعة الشمس الساطعة ولا يرى الألوان الباهتة جيداً.
- كبار السن: الذين قد يعانون من ضعف في البصر أو صعوبة في استخدام الفأرة بدقة.
الاختصار “a11y” هو مجرد طريقة مختصرة لكتابة “Accessibility”، حيث يوجد 11 حرفاً بين حرف الـ ‘a’ وحرف الـ ‘y’. إنها ليست مجرد “ميزة” نضيفها في النهاية، بل هي حق أساسي للمستخدم، وجزء لا يتجزأ من بناء منتج احترافي ومحترم.
دستور الوصولية: الأعمدة الأربعة لـ WCAG (POUR)
عندما بدأنا رحلتنا في إصلاح التطبيق، كان مرجعنا الأساسي هو “إرشادات الوصولية لمحتوى الويب” (WCAG). هذه الإرشادات هي بمثابة الدستور العالمي للوصولية، وهي مبنية على أربعة أعمدة رئيسية، يُشار إليها بالاختصار POUR. خلونا نفصّلها ونشوف كيف طبقناها عملياً.
1. قابل للإدراك (Perceivable)
المبدأ: يجب أن تكون المعلومات ومكونات واجهة المستخدم قابلة للعرض للمستخدمين بطرق يمكنهم إدراكها. يعني، ما بينفع المعلومة تكون مرئية فقط، لازم تكون قابلة للتحويل لأشكال أخرى (صوت، نص مكبر، لغة بريل).
نصيحة من أبو عمر: النص البديل للصور ليس رفاهية!
أول شيء اكتشفناه هو أن كل الصور الرائعة في تطبيقنا كانت بلا معنى لقارئ الشاشة. كان يقرؤها كـ “صورة” أو “image5.png”. هذا كان أول وأسهل شيء قمنا بإصلاحه.
مثال سيء (ما كنا نفعله):
<img src="user-avatar.jpg">
مثال جيد (ما نفعله الآن):
<img src="user-avatar.jpg" alt="الصورة الشخصية للمستخدم عمر">
إذا كانت الصورة مجرد عنصر زخرفي لا يضيف معلومة، نترك الـ `alt` فارغاً (`alt=””`) حتى يتجاهله قارئ الشاشة ولا يزعج المستخدم.
لا تنسَ تباين الألوان! استخدمنا أدوات مثل “Adobe Color Contrast Checker” للتأكد من أن لون النص وخلفيته واضح بما فيه الكفاية للجميع، خصوصاً لمن يعانون من عمى الألوان أو ضعف البصر.
2. قابل للتشغيل (Operable)
المبدأ: يجب أن تكون مكونات واجهة المستخدم والتنقل قابلة للتشغيل. يعني، لازم المستخدم يقدر يتفاعل مع كل شيء في التطبيق، سواء كان يستخدم فأرة، كيبورد، أو أوامر صوتية.
نصيحة من أبو عمر: افصل الفأرة وجرّب تطبيقك!
هذا كان الاختبار الصادم الثاني. فصلت الفأرة عن الكمبيوتر وحاولت استخدام موقعنا… وكانت كارثة. لم أستطع الوصول لمعظم الأزرار أو القوائم. السبب؟ كنا نستخدم عناصر `
مثال سيء (فخ الكيبورد):
<div class="custom-button" onClick="submitForm()">إرسال</div>
مثال جيد (استخدام HTML الدلالي):
<button class="custom-button" onClick="submitForm()">إرسال</button>
عنصر `
سجل دخولك لعمل نقاش تفاعلي
آراء من النقاشات
لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!
آخر المدونات
تطبيقك يرسل ألف استعلام بدلاً من واحد؟ دليلك للتغلب على مشكلة N+1 الخبيثة
هل شعرت يوماً أن تطبيقك بطيء بشكل غير مبرر؟ قد يكون السبب وحشاً خفياً اسمه "مشكلة N+1". في هذه المقالة، سأشاركك قصة من تجربتي وكيف...
كانت تطبيقاتنا تعتمد على التحديث اليدوي: كيف أنقذتنا WebSockets من جحيم ‘الاستقصاء المستمر’ (Polling)؟
مقالة تستعرض تجربة عملية في الانتقال من تقنية الاستقصاء المستمر (Polling) المرهقة إلى استخدام WebSockets لتطبيقات الوقت الحقيقي. اكتشف كيف يمكن لهذا التغيير أن يحسّن...
كانت خوادمنا تلتهم الميزانية وهي خاملة: كيف أنقذتنا الحوسبة بدون خوادم (Serverless) من جحيم الفواتير؟
أنا أبو عمر، مبرمج فلسطيني، وأروي لكم قصتي مع الفواتير السحابية المرتفعة وكيف كانت "الحوسبة بدون خوادم" أو Serverless هي طوق النجاة. اكتشفوا معي كيف...
كان ملفي على GitHub مقبرة للمشاريع: كيف أنقذتني المصادر المفتوحة من جحيم “ليس لديك خبرة عملية”؟
هل ملفك على GitHub مليء بالمشاريع غير المكتملة؟ في هذه المقالة، أشارككم تجربتي الشخصية كأبو عمر، وكيف حولتني المساهمة في المصادر المفتوحة من مبرمج يواجه...
خدماتنا كانت تنتظر في طابور طويل: كيف أنقذتنا ‘طوابير الرسائل’ من جحيم ‘الرجاء الانتظار’؟
أشارككم قصة حقيقية من تجربتي كمبرمج، وكيف كاد مشروعنا أن يفشل بسبب بطء الاستجابة. اكتشفوا معنا كيف غيّرت "طوابير الرسائل" (Message Queues) طريقة عملنا، وحوّلت...
من كابوس “أرسل هويتك مجدداً” إلى التحقق الفوري: كيف أنقذنا الذكاء الاصطناعي في عالم الـFintech
كان التحقق من هوية العميل (KYC) عملية يدوية مرهقة تسببت في إحباط العملاء والموظفين. في هذه المقالة، أسرد لكم قصة واقعية من تجربتي كمطور وكيف...
كانت تطبيقاتنا تموت بصمت في الليل: كيف أنقذنا Kubernetes من جحيم ‘إعادة التشغيل اليدوية’؟
أشارككم قصتي كـ"أبو عمر"، مبرمج فلسطيني، وكيف انتقلنا من ليالي الرعب وإعادة تشغيل السيرفرات يدوياً إلى عالم الأتمتة والشفاء الذاتي للتطبيقات باستخدام Kubernetes. مقالة عملية...
كان كل خطأ كارثة شخصية: كيف أنقذتنا ‘السلامة النفسية’ من جحيم ‘إخفاء الأخطاء’؟
أنا أبو عمر، مبرمج فلسطيني، وأروي لكم كيف انتقلنا من بيئة عمل كان فيها الخطأ البرمجي وصمة عار، إلى ثقافة "السلامة النفسية" التي حولت الأخطاء...
كان إطلاقنا رهاناً محفوفاً بالمخاطر: كيف أنقذتنا اختبارات التحمل (Load Testing) من جحيم ‘هل سيصمد الخادم؟’
أشارككم قصة حقيقية من قلب المعركة التقنية، حيث كان إطلاق منتجنا الجديد على المحك. لولا اختبارات التحمل (Load Testing) وأدوات مثل k6، لكنا غرقنا في...