x

التصميم المتمحور حول المستخدم User-Centered Design

ما هي أفضل الممارسات لتصميم مربعات الحوار المشروطة Modal Dialogs ؟

نظري

ملاحظة: قد تستخدم بعض الأمثلة التفاعلية أكواد CSS و JavaScript لم تتعلمها بعد. لا تقلق بشأن محاولة فهم الكود بالكامل؛ فالهدف من هذه الأمثلة هو عرض نماذج لمفاهيم التصميم هذه، لتتمكن من فهم آلية عملها بشكل أفضل.

ما هو الـ "Modal" ؟ إنه نوع من النوافذ المنبثقة التي قد يعرضها الموقع الإلكتروني فوق محتواه. وتوفر لغة HTML عنصراً مخصصاً للحوار (dialog element) يمكنك استخدامه لإنشاء هذه النوافذ.

عادةً ما يتم تعتيم المحتوى الموجود خلف النافذة المنبثقة (Modal)؛ إذ يساعد ذلك المستخدم على التركيز بصرياً على المنطقة التي تريده أن يتفاعل معها، وهي في هذه الحالة النافذة المنبثقة نفسها (the modal).

من المستحسن دائمًا السماح للمستخدم بالنقر خارج النافذة المنبثقة (modal) لإغلاقها.

index.html


<link rel="stylesheet" href="styles.css">

<button id="open-modal">فتح النافذة المنبثقة</button>

<dialog>
 <h2>اشترك في نشرتنا الإخبارية!</h2>
 <p>احصل على أحدث التحديثات والعروض.</p>
 <button>إشتراك</button>
 <button>إغلاق</button>
</dialog>

<script src="index.js"></script>
            

styles.css


dialog {
 border: none;
 border-radius: 8px;
 padding: 20px;
 box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}

dialog::backdrop {
 background: rgba(0, 0, 0, 0.5);
}
    

index.js


const dialog = document.querySelector('dialog');
const closeButton = dialog.querySelector('button:last-of-type');
const openModalButton = document.getElementById('open-modal');

closeButton.addEventListener('click', () => {
  dialog.close();
});

openModalButton.addEventListener('click', () => {
  dialog.showModal();
});

// Close the modal when clicking outside of it
dialog.addEventListener('click', (event) => {
  const rect = dialog.getBoundingClientRect();
  const isInDialog = (
    event.clientX >= rect.left &&
    event.clientX <= rect.right &&
    event.clientY >= rect.top &&
    event.clientY <= rect.bottom
  );

  if (!isInDialog) {
    dialog.close();
  }
});
    

معاينة:

غالبًا ما تلاحظ وجود أزرار بارزة للغاية في النوافذ المنبثقة (modals)؛ وتُعرف هذه الأزرار بـ "عبارات الحث على اتخاذ إجراء" (CTAs). ومن الضروري أن تكون هذه الأزرار سهلة التمييز، لأن الهدف من مقاطعة مسار المستخدم باستخدام نافذة منبثقة هو حثه على اتخاذ إجراء محدد.

يجب أن تتضمن النوافذ المنبثقة (Modals) أيضاً زر إغلاق؛ فمع أنك قد ترغب بشدة في أن ينقر المستخدم على عناصر الحث على اتخاذ إجراء (CTAs)، إلا أنه من المهم منحه خيار الخروج من النافذة المنبثقة والعودة إلى ما كان يفعله سابقاً.

index.html


<link rel="stylesheet" href="styles.css">

<button id="open-modal">فتح النافذة المنبثقة</button>

<dialog>
 <h2>اشترك في نشرتنا الإخبارية!</h2>
 <p>احصل على أحدث التحديثات والعروض.</p>
 <button class="cta">إشتراك</button>
 <button class="close">إغلاق</button>
</dialog>

<script src="index.js"></script>
            

styles.css


.cta {
 background-color: #007BF;
 color: white;
 border: none;
 padding: 10px 20px;
 border-radius: 4px;
 cursor: pointer;
}

.close {
 background-color: transparent;
 color: #007BFF;
 border: none;
 padding: 10px 20px;
 cursor: pointer;
}
    

index.js


const dialog = document.querySelector('dialog');
const closeButton = dialog.querySelector('.close');
const openModalButton = document.getElementById('open-modal');

closeButton.addEventListener('click', () => {
  dialog.close();
});

openModalButton.addEventListener('click', () => {
  dialog.showModal();
});

// Close the modal when clicking outside of it
dialog.addEventListener('click', (event) => {
  const rect = dialog.getBoundingClientRect();
  const isInDialog = (
    event.clientX >= rect.left &&
    event.clientX <= rect.right &&
    event.clientY >= rect.top &&
    event.clientY <= rect.bottom
  );

  if (!isInDialog) {
    dialog.close();
  }
});
    

معاينة:

بطبيعة الحال، تثير النوافذ المنبثقة (modals) مخاوف تتعلق بإمكانية الوصول، مثل الإدارة الصحيحة للتركيز على العناصر. ومع ذلك، إذا اتخذت هذه الممارسات العامة نقطة انطلاق لك، فستمتلك أساساً متيناً يمكنك البناء عليه.

أسئلة :

ما الغرض من تعتيم المحتوى الموجود خلف النافذة المنبثقة (modal dialog) ؟

1. للحفاظ على عمر البطارية في الأجهزة المحمولة. ❌

2. لمساعدة المستخدمين على تحديد المنطقة التي يجب التفاعل معها بصرياً. ✅

3. لجعل الموقع الإلكتروني يُحمَّل بشكل أسرع. ❌

4. لمنع المستخدمين من رؤية معلومات حساسة. ❌


ماذا يعني اختصار CTA في سياق تصميم النوافذ المنبثقة (Modal Design) ؟

1. انقر لتفعيل Click To Activate. ❌

2. أكمل الإجراء Complete The Action. ❌

3. دعوة لاتخاذ إجراء Call-to-Action. ✅

4. أغلق التطبيق Close The Application. ❌


لماذا من المهم تضمين زر إغلاق في مربع الحوار المنبثق (Modal Dialog) ؟

1. يُعد ذلك مطلباً قانونياً في بعض البلدان. ❌

2. لمنع النافذة المنبثقة (modal) من التسبب في تعطل المتصفح. ❌

3. لمنح المستخدمين خيار الخروج من النافذة المنبثقة واستئناف نشاطهم السابق. ✅

4. لإضفاء مظهر أكثر احترافية على النافذة المنبثقة. ❌