عنصر label وإمكانية الوصول
اربط التسميات بعناصر input لدعم قارئات الشاشة
عنصر label وإمكانية الوصول درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
أهمية التسميات
يربط العنصر <label> وصفًا نصيًا بعنصر تحكم في النموذج:
- تعلن قارئات الشاشة عن التسمية عند تركيز الإدخال
- يؤدي النقر على التسمية إلى تفعيل الإدخال المرتبط بها
- من دون تسمية، لن يعرف مستخدمو قارئات الشاشة الغرض من الحقل
تسمية صريحة باستخدام for
تربط السمة for التسمية بالإدخال من خلال id:
<label for="email">Email address</label>
<input type="email" id="email" name="email">
<!-- for="email" matches id="email" -->
<!-- Clicking "Email address" moves focus to the input -->
<!-- Required for proper accessibility -->تسمية ضمنية (التغليف)
يؤدي تغليف الإدخال داخل التسمية إلى إنشاء ارتباط ضمني:
<!-- No for/id needed — input is inside label -->
<label>
Email address
<input type="email" name="email">
</label>
<!-- Works fine but explicit association is more robust
(especially when label and input are far apart in the DOM) -->فصل التسمية عن الإدخال
عندما يتعذر وضع التسمية والإدخال متجاورين، استخدم aria-labelledby:
<h2 id="section-title">Billing Details</h2>
<input type="text" name="name" aria-labelledby="section-title">
<!-- The heading serves as the accessible label for the input -->aria-label كبديل
عندما يتعذر توفير تسمية مرئية، استخدم aria-label:
<!-- Search form with icon button -->
<form>
<input type="search" name="q" aria-label="Search the site">
<button type="submit" aria-label="Submit search">
<svg><!-- magnifier icon --></svg>
</button>
</form>تسمية واحدة لكل إدخال
ينبغي أن يكون لكل إدخال تسمية واحدة بالضبط. ويجب أن تكون للإدخالات المتعددة تسميات منفصلة:
<!-- BAD: one label for multiple inputs -->
<label>First and last name
<input type="text" name="first">
<input type="text" name="last">
</label>
<!-- GOOD: separate labels -->
<label for="first">First name</label>
<input type="text" id="first" name="first">
<label for="last">Last name</label>
<input type="text" id="last" name="last">الإشارة إلى الحقول المطلوبة
أشِر إلى الحقول المطلوبة بطريقة تتيح الوصول:
<!-- Visual + accessible required indicator -->
<label for="email">
Email address
<span aria-hidden="true">*</span> <!-- visual asterisk -->
<span class="sr-only">(required)</span> <!-- screen reader text -->
</label>
<input type="email" id="email" name="email" required>استخدام Fieldset وLegend للمجموعات
جمّع الإدخالات المرتبطة باستخدام <fieldset> و<legend>:
<fieldset>
<legend>Shipping address</legend>
<label for="addr-street">Street</label>
<input type="text" id="addr-street" name="street" autocomplete="address-line1">
<label for="addr-city">City</label>
<input type="text" id="addr-city" name="city" autocomplete="address-level2">
</fieldset>Fieldset لمجموعات أزرار الاختيار
تحتاج مجموعات أزرار الاختيار دائمًا إلى fieldset وlegend:
<fieldset>
<legend>Preferred contact method</legend>
<label>
<input type="radio" name="contact" value="email"> Email
</label>
<label>
<input type="radio" name="contact" value="phone"> Phone
</label>
<label>
<input type="radio" name="contact" value="text"> Text message
</label>
</fieldset>العنصر النائب ليس تسمية
يختفي العنصر النائب عندما يكتب المستخدم — لذلك لا يمكنه أن يحل محل التسمية:
<!-- BAD: placeholder used as a label -->
<input type="email" placeholder="Email address">
<!-- Screen readers may announce the placeholder, but many skip it -->
<!-- User cannot see the field purpose while typing -->
<!-- GOOD: -->
<label for="email">Email address</label>
<input type="email" id="email" placeholder="you@example.com">تسميات مخفية بصريًا
إذا لم يتضمن التصميم تسمية مرئية، فأخفِها بصريًا مع إبقائها متاحة لقارئات الشاشة:
<label for="search" class="sr-only">Search</label>
<input type="search" id="search" placeholder="Search...">
/* sr-only utility class: */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
}تحقق سريع
كيف تربط تسمية بإدخال باستخدام ارتباط صريح؟
مراجعة: إمكانية الوصول إلى label
أساسيات التسمية:
- يحتاج كل إدخال إلى تسمية — دائمًا
<label for="id">ارتباط صريح- تغليف الإدخال داخل التسمية = ارتباط ضمني
- تربط
aria-labelledbyالتسمية بأي عنصر من خلال id - استخدم
aria-labelللأزرار التي تحتوي على أيقونة فقط دون نص مرئي <fieldset>+<legend>لعناصر التحكم المجمّعة
الأسئلة الشائعة
هل درس «عنصر label وإمكانية الوصول» مجاني؟
نعم — نص درس «عنصر label وإمكانية الوصول» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «عنصر label وإمكانية الوصول»؟
اربط التسميات بعناصر input لدعم قارئات الشاشة تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «عنصر label وإمكانية الوصول»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عنصر form وaction وmethod وenctype
- أنواع Input: text وpassword وemail وnumber وtel
- عنصر label وإمكانية الوصول
- عنصر button: submit وreset وbutton