Menu
flag Ar iconالعربيةdown icon

وسم button في HTML: الأنواع والإرسال والتعطيل والتنسيق

كيف تصنع زرًا في HTML بالعنصر <button>: الأنواع الثلاثة (submit وbutton وreset)، وإرسال قيمة مع النموذج، والأزرار المعطّلة، والأيقونات، وتنسيق CSS الذي يحافظ على حلقة التركيز.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

كيف تصنع زرًا في HTML

الزر هو العنصر <button>. المحتوى بين الوسمين هو ما يراه المستخدم، وtype="button" تقول إنه يشغّل سكربتك ولا يرسل نموذجًا. انقره في المعاينة:

هذا كل ما يحتاجه زر يعمل: تسمية، وtype، وشيء يستمع إلى click. يجعله المتصفح قابلًا للتركيز بلوحة المفاتيح ويفعّله بـ Enter أو المسافة، فيحصل عليه مستخدمو لوحة المفاتيح من دون جهد. أما <div> مع معالج نقر فلا يحصل على شيء من ذلك.

قد ترى أيضًا onclick="..." مكتوبًا في الوسم مباشرة. يعمل، لكن addEventListener يُبقي السكربت خارج البنية ويتيح لعدة مستمعين أن يتشاركوا زرًا واحدًا.

أنواع الأزرار الثلاثة

السمة type تحدد ما يفعله الزر عند الضغط عليه.

typeما يفعلهاستخدمه لـ
submitيرسل النموذج الذي ينتمي إليه. وهو النوع الافتراضي.الإجراء الرئيسي في النموذج
buttonلا شيء بذاته، وJavaScript الخاصة بك تقررالتبديل، مربعات الحوار، العدادات، أي شيء بسكربت
resetيعيد كل حقل في النموذج إلى قيمته الابتدائيةنادرًا، فالمستخدمون يضغطونه بالخطأ

اكتب شيئًا، ثم جرّب كل زر. المعاينة لا تغادر الصفحة عند إرسال النموذج، بل تعرض البيانات التي كان النموذج سيرسلها.

Reset تعيد القيمة المكتوبة في HTML (Ada)، لا حقلًا فارغًا. وإذا حذفت type="button" من Uppercase، يصبح زر إرسال: يحوّل الاسم إلى أحرف كبيرة ثم يرسل النموذج.

زر الإرسال في HTML: إرسال اسم وقيمة

يمكن لزر الإرسال أن يحمل name وvalue خاصين به. لا يُرسلان مع النموذج إلا إذا كان هذا الزر هو الذي أرسله، فيمكن لزرين أن يتشاركا نموذجًا واحدًا ويخبرا الخادم بالإجراء الذي اختير:

اضغط Publish وسيرسل النموذج title=My first post وaction=publish. امسح العنوان واضغط أيًّا من الزرين: required تمنع الإرسال ويعرض المتصفح رسالته الخاصة. الضغط على Enter داخل الحقل النصي يرسل أيضًا، ويعامله المتصفح كضغطة على أول زر إرسال، فيرسل action=draft.

تقبل أزرار الإرسال أيضًا سمات تتجاوز إعدادات النموذج لذلك الزر وحده: formaction (عنوان مختلف)، وformmethod، وformtarget، وformnovalidate التي تتخطى التحقق. وformnovalidate هي الخيار المعتاد لزر «حفظ المسودة» الذي يجب أن يعمل بينما الحقول الإلزامية ما زالت فارغة.

الزر الموضوع خارج نموذجه يستطيع مع ذلك إرساله بالسمة form التي تأخذ id النموذج: <button type="submit" form="signup">Sign up</button>.

الأزرار المعطّلة

السمة disabled توقف الزر. الزر المعطّل يتجاهل النقرات، ويتخطاه مفتاح Tab، ولا يُرسل مع النموذج. وتجعله المتصفحات رماديًا أيضًا. من الأنماط الشائعة إبقاء زر الإرسال معطّلًا حتى يتحقق شرط ما:

في JavaScript تكون button.disabled خاصية منطقية: اضبطها على true أو false. أما في HTML فوجود السمة هو ما يهم، لذلك disabled="false" تعطّل الزر مع ذلك.

الزر المعطّل لا يقدم سببًا لتعطيله، ومستخدمو لوحة المفاتيح وقارئات الشاشة الذين يتنقلون بـ Tab لا يصلون إليه أبدًا. عندما لا يكون السبب واضحًا، قله بنص بجانب الزر، أو أبقِ الزر مفعّلًا واعرض رسالة خطأ عند الضغط عليه.

تنسيق الزر بـ CSS

ترسم المتصفحات الأزرار بخطها وحدودها وخلفيتها الخاصة. ضبط بضع خصائص يستبدل كل ذلك. أبقِ نمط تركيز ظاهرًا: فهو ما يعرف به مستخدمو لوحة المفاتيح أين هم.

الغرض من كل قاعدة:

  • font: inherit تجعل الزر يستخدم خط الصفحة. من دونها تستخدم الأزرار خط النماذج الأصغر الخاص بالمتصفح (13.33px في Chrome وFirefox).
  • cursor: pointer تُظهر مؤشر اليد. الأزرار تُظهر السهم العادي افتراضيًا.
  • :hover و:active و:focus-visible تنسّق حالات المؤشر والضغط والتركيز بلوحة المفاتيح. :focus-visible تُظهر الحلقة عند التركيز بلوحة المفاتيح لا بعد النقر بالفأرة، فلا تحتاج إلى إزالة outline لتجنبها.
  • :disabled تستهدف الأزرار التي تحمل السمة disabled.

اضغط Tab في المعاينة لترى حلقة التركيز الكهرمانية تنتقل بين الزرين الأولين. والمعطّل يتم تخطيه. (في Mac لا ينتقل Safari وFirefox بـ Tab إلى الأزرار إلا إذا فُعّل التنقل بلوحة المفاتيح في إعدادات النظام، وفي Safari يعمل Option+Tab من دونه.) للقائمة الكاملة من الحالات، راجع hover في CSS.

أزرار بأيقونات

بما أن <button> يمكن أن يحتوي على HTML، توضع الأيقونة بداخله بجانب النص. الزر الذي فيه أيقونة فقط لا نص فيه لتعلنه قارئات الشاشة، فأعطه aria-label:

aria-hidden="true" على SVG تُبقيه خارج شجرة إمكانية الوصول، فيُعلن عن الزر الأول «Add item، زر» وعن الثاني «Delete، زر».

الفرق بين button وinput type="submit"

<input type="submit"> هي الطريقة الأقدم لكتابة زر إرسال. كلاهما يرسل النموذج بالطريقة نفسها، والفرق فيما يمكن أن يحتويه كل منهما.

<input type="submit" value="Send">   <!-- label comes from value, text only -->
<button type="submit">Send</button>  <!-- label is the content, HTML allowed -->
<button><input type="submit">
التسميةالمحتوى بين الوسمينالسمة value
يمكن أن يحتوي على أيقونات أو شيفرةنعملا
وسم الإغلاقإلزاميلا يوجد (عنصر فارغ)
النوع الافتراضيsubmitإرسال دائمًا

استخدم <button>. السبب الوحيد للإبقاء على <input type="submit"> هو CSS أو JavaScript موجودة تحدده. وهناك أيضًا <input type="button"> و<input type="reset">، وهي الفكرة نفسها للنوعين الآخرين.

زر أم رابط؟

الزر يفعل شيئًا في الصفحة الحالية: يرسل، يفتح، يبدّل، يحذف. والرابط ينتقل إلى عنوان آخر. إذا كان النقر يغيّر شريط العنوان، فيجب أن يكون <a href>، منسَّقًا كزر إن تطلّب التصميم ذلك. هذا النمط، ولماذا يُعد الزر داخل رابط غير صالح، مشروح في زر كرابط في HTML.

إمكانية الوصول

  • استخدم <button> حقيقيًا. فهو يقبل التركيز، ويعمل مع Enter والمسافة، ويُعلن عنه كزر. إعادة بناء ذلك على <div> تحتاج إلى role وtabindex ومعالجات للمفاتيح، وتبقى غالبًا ناقصة.
  • كل زر يحتاج إلى اسم: نصه، أو aria-label حين لا يحتوي إلا على أيقونة.
  • أبقِ نمط تركيز ظاهرًا. outline: none بلا بديل تترك مستخدمي لوحة المفاتيح تائهين.
  • اجعل الهدف كبيرًا بما يكفي لإصابته. تطلب WCAG 2.2 مساحة لا تقل عن 24 في 24 بكسل CSS، والحشو كما في المثال المنسَّق أعلاه يعطي ارتفاعًا بنحو 40 بكسل.
  • لزر التبديل، أضف aria-pressed="true" أو "false" وحدّثها حين تتغير الحالة.

أخطاء شائعة

  • زر داخل نموذج بلا type. يرسل النموذج. اكتب type="button" على كل زر لا يُقصد به الإرسال.
  • وضع زر داخل رابط، <a href="/x"><button>Go</button></a>. هذا HTML غير صالح ويتصرف بشكل مختلف بين المتصفحات. استخدم عنصرًا واحدًا: رابطًا منسَّقًا كزر.
  • استخدام <div onclick> كزر. لا يمكن الوصول إليه بلوحة المفاتيح.
  • إزالة إطار التركيز من دون إضافة نمط :focus-visible.
  • كتابة disabled="false" وتوقع زر مفعّل. احذف السمة بدلًا من ذلك.
  • نسيان font: inherit والتساؤل لماذا تستخدم الأزرار خطًا مختلفًا عن بقية الصفحة.

الأسئلة الشائعة

كيف أصنع زرًا في HTML؟

اكتب <button type="button">Click me</button>. النص بين الوسمين هو التسمية. أضف مستمعًا لحدث click في JavaScript ليفعل شيئًا، أو ضعه داخل <form> مع type="submit" لإرسال النموذج.

ما النوع الافتراضي لزر HTML؟

submit. العنصر <button> بلا سمة type داخل نموذج يرسل ذلك النموذج عند النقر، ولهذا قد يعيد زر عادي داخل نموذج تحميل الصفحة. اكتب type="button" لأي زر يشغّل JavaScript بدلًا من ذلك.

ما الفرق بين button وinput type=submit؟

كلاهما يرسل النموذج. <button> يمكن أن يحتوي على HTML (أيقونة، نص عريض) بين وسميه، بينما يأخذ <input type="submit"> تسميته من السمة value ولا يحمل إلا نصًا عاديًا. معظم الشيفرة الحديثة تستخدم <button>.

كيف أعطّل زرًا في HTML؟

أضف السمة disabled: <button disabled>Save</button>. الزر المعطّل لا يمكن النقر عليه ولا التركيز عليه، ولا يُرسل اسمه وقيمته مع النموذج. احذف السمة (btn.disabled = false في JavaScript) لتفعيله من جديد.

كيف أجعل زر HTML ينتقل إلى صفحة أخرى؟

استخدم رابطًا منسَّقًا كزر: <a href="/pricing" class="btn">See pricing</a>. العنصر <button> للإجراءات في الصفحة الحالية. ووضع زر داخل <a> يجعل HTML غير صالح.

لماذا يعيد الزر تحميل الصفحة؟

لأنه داخل <form> وبلا type، فهو زر إرسال، فيرسل المتصفح النموذج ويحمّل الاستجابة. أضف إليه type="button"، أو استدعِ event.preventDefault() في مستمع submit إن كنت تعالج النموذج بـ JavaScript.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن