فاحص WCAG لقابلية تعديل تباعد النص
يقارن فاحص تباعد النص وفق WCAG قياسات ورقة الأنماط بثلاث قيم مرتبطة بحجم الخط يُشيع اختبارها للتحقق من قابلية تعديل التباعد: ارتفاع سطر لا يقل عن 1.5 من حجم الخط، وتباعد حروف لا يقل عن 0.12 من حجمه، وتباعد كلمات لا يقل عن 0.16 من حجمه.
شغّل الأداة مجانًا
أدخلوا جميع القياسات بوحدة واحدة متسقة، مثل البكسل أو النقطة. تعرض النتيجة كل نسبة مقاسة وحدها الأدنى المطلوب والقيمة الدنيا المقابلة، إلى جانب نتيجة نجاح أو إخفاق إجمالية. هذا فحص رقمي محدد لمراجعات التصميم والاختبارات الآلية، وليس بديلاً عن اختبار بقاء المحتوى قابلاً للاستخدام عندما يغيّر القراء التباعد.
قيسوا القيم الأربع بوحدة واحدة متسقة
ابدؤوا بحجم الخط المحسوب وقيم ارتفاع السطر وتباعد الحروف وتباعد الكلمات المراد تقييمها. يجب أن تستخدم الأرقام الأربعة الوحدة نفسها، لأن الفاحص يقسم كل قياس للتباعد على حجم الخط. يناسب البكسل نسخ الأنماط المحسوبة من أدوات المطور في المتصفح، لكن النقاط أو وحدات rem المحولة إلى أرقام أو أي وحدة طول أخرى متسقة تعطي النسب نفسها. فعلى سبيل المثال، يعطي خط حجمه 16 بكسلاً مع ارتفاع سطر قدره 24 بكسلاً نسبة 1.5. ويعطي تباعد حروف قدره 1.92 بكسل نسبة 0.12، بينما يعطي تباعد كلمات قدره 2.56 بكسل نسبة 0.16. لا تُقبل أسماء الوحدات عمداً؛ أرسلوا قيماً رقمية بعد تحويل كلمات CSS المفتاحية والنسب المئوية وتصريحات ارتفاع السطر الخالية من الوحدة والقيم الموروثة والوحدات النسبية إلى قياسات قابلة للمقارنة. يجب أن يكون حجم الخط أكبر من الصفر، ولذلك تُرفض الأحجام الصفرية والسالبة. أما قيم التباعد المحدودة الأخرى فتُقيّم كما أُرسلت، لذا تفشل القيمة السالبة بدلاً من تصحيحها خفية.
اقرؤوا الفحوص الفردية قبل النتيجة الإجمالية
تحتوي الاستجابة على فحص لارتفاع السطر وآخر لتباعد الحروف وثالث لتباعد الكلمات. يكرر كل فحص القيمة المدخلة، ويحسب نسبتها إلى حجم الخط، ويذكر النسبة الدنيا المستندة إلى WCAG، ويحسب القيمة المطلقة الدنيا لحجم الخط المعطى، ثم يعيد نتيجة منطقية. لا تكون قيمة الحقل الإجمالي passes صحيحة إلا عندما تنجح المقارنات الثلاث كلها. تنجح القيم الواقعة تماماً عند الحد: فنسبة ارتفاع السطر 1.5 أو نسبة تباعد الحروف 0.12 أو نسبة تباعد الكلمات 0.16 تفي بالعتبة المقابلة. تستخدم الخوارزمية الأرقام مباشرة ولا تقرّبها قبل المقارنة، وبذلك لا يتغير ناتج قريب من الحد لمجرد طريقة عرضه. تجعل المخرجات الإخفاق قابلاً للمعالجة؛ إذ يستطيع المطور تحديد الخاصية التي تقل عن هدفها ومقارنة قيمتها الحالية مع minimum_value. ولأن الحساب حتمي ولا يعتمد على الشبكة، فإن إدخال JSON المتطابق ينتج دائماً إخراج JSON متطابقاً في المتصفح أو مسار البناء أو تكامل API.
استخدموا النتيجة كفحص محدد لقابلية التعديل
يتعلق WCAG 1.4.12 بالحفاظ على المحتوى والوظائف عندما يطبق المستخدمون تعديلات محددة على تباعد النص. تتحقق هذه الحاسبة مما إذا كانت القياسات الثلاث المدخلة تبلغ النسب المرتبطة بارتفاع السطر وتباعد الحروف والكلمات؛ لكنها لا تفحص صفحة، ولا تعيد كتابة CSS، ولا تثبت تحمّل التخطيط لتجاوزات المستخدم. ينبغي للمراجعة الكاملة لإتاحة الوصول أن تطبق تغييرات التباعد ذات الصلة في متصفح حقيقي، ثم تبحث عن نص مقصوص وعناصر تحكم مخفية وتداخلات وتسميات مبتورة ومربعات حوار معطلة ومحتوى مفقود. يدخل تباعد الفقرات أيضاً ضمن معيار النجاح، لكنه خارج نطاق هذه القدرة لأن المدخل المعلن لا يغطي إلا القياسات الثلاث المرتبطة بحجم الخط. استخدموا النتيجة الرقمية لاكتشاف الاختلافات الواضحة في رموز التصميم أو أوراق الأنماط مبكراً، ثم اختبروا العرض الفعلي. تفيد نسخة المتصفح في المراجعة اليدوية، بينما تكلف API مبلغ $0.002 لكل طلب ناجح وتناسب اختبارات الانحدار للمكونات والسمات والقوالب والمستندات المنشأة. تُرفض المدخلات غير الصالحة بدلاً من تحويلها أو تخمينها.
حالات الاستخدام
تدقيق رموز التصميم
قارنوا رموز الطباعة بالنسب المستهدفة قبل نشر مكتبة مكونات مشتركة.
إضافة تحقق من الانحدار
أرسلوا قياسات الأنماط المحسوبة من الاختبارات الآلية وأوقفوا البناء إذا نقصت أي نسبة تباعد عن الحد.
مراجعة تجاوز CSS
افحصوا رقمياً قيم ارتفاع السطر وتباعد الحروف والكلمات المقترحة قبل اختبار التخطيط في المتصفح.
الأسئلة الشائعة
ما النسب التي يستخدمها الفاحص؟
يفحص ارتفاع السطر عند 1.5 من حجم الخط، وتباعد الحروف عند 0.12 منه، وتباعد الكلمات عند 0.16 منه.
هل يجب أن تكون المدخلات بالبكسل؟
لا. تصلح أي وحدة طول عندما يستخدم حجم الخط وقيم التباعد الثلاث الوحدة نفسها.
هل تنجح النتيجة المطابقة للعتبة تماماً؟
نعم. كل مقارنة شاملة للمساواة، ولذلك تنجح القيمة المساوية لنسبتها الدنيا.
هل يثبت هذا توافق صفحة مع WCAG 1.4.12؟
لا. لا يفحص سوى ثلاث نسب رقمية. يجب أيضاً تطبيق تعديلات التباعد على الصفحة المعروضة والتأكد من عدم فقدان المحتوى أو الوظائف.
ما تكلفة طلب API؟
يكلف طلب API الناجح $0.002. ويتوفر الحساب الحتمي نفسه في المتصفح.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/verify/wcag-text-spacing-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"font_size":16,"line_height":24,"letter_spacing":1.92,"word_spacing":2.56}'const res = await fetch("https://api.kit.forhosting.com/verify/wcag-text-spacing-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"font_size": 16,
"line_height": 24,
"letter_spacing": 1.92,
"word_spacing": 2.56
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/verify/wcag-text-spacing-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"font_size": 16,
"line_height": 24,
"letter_spacing": 1.92,
"word_spacing": 2.56
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/verify/wcag-text-spacing-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"font_size":16,"line_height":24,"letter_spacing":1.92,"word_spacing":2.56}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"font_size":16,"line_height":24,"letter_spacing":1.92,"word_spacing":2.56}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/verify/wcag-text-spacing-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"font_size": 16,
"line_height": 24,
"letter_spacing": 1.92,
"word_spacing": 2.56
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "verify.wcag_text_spacing_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |