انتقل إلى محتوى الدرس
الدرس 141
دورة لغة CSS

مؤشر الفأرة وخصائص واجهة المستخدم في لغة CSSCSS Cursors and User Interface

تحكم في تفاعل واجهة المستخدم في CSS عبر دلالات أشكال مؤشر الفأرة وتمرير النقرات بخاصية pointer-events وتنظيم تحديد النصوص وتقييد تحجيم الحقول بأمان.
أقسام الدرس
7
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 7تصفّح المواضيع

قبل أن ينقر المستخدم على أي عنصر في الصفحة، يخبره شكل مؤشر الفأرة بالوظيفة المتوقعة منه فوراً. وتربط خاصية cursor في CSS عناصر الواجهة بأيقونات المؤشر القياسية في نظام التشغيل لتبدو الأزرار والبطاقات مألوفة وواضحة الدلالة.

تشمل أهم القيم القياسية pointer لشكل اليد على الأزرار القابلة للنقر، و not-allowed لدائرة المنع فوق عنصر معطل مثل .btn-disabled، و grab مع grabbing لليد المفتوحة والمقبوضة عند سحب البطاقات، و text لمؤشر الكتابة، و zoom-in لعدسة التكبير، و wait للانتظار، و help لعلامة الاستفهام الإرشادية.

مخطط خصائص مؤشر الفأرة وتمرير النقرات وتحديد النصوص والتحجيم في واجهة المستخدم
CSS
.btn-action { cursor: pointer; }
.btn-disabled { cursor: not-allowed; opacity: 0.6; }
.drag-card { cursor: grab; }
.drag-card:active { cursor: grabbing; }
.zoom-thumb { cursor: zoom-in; }
.term-hint { cursor: help; }

تتيح لك مساحات الرسم والأدوات التفاعلية تخصيص شكل المؤشر بأيقونة خفيفة وصغيرة الحجم يفضل ألا تتجاوز 32x32 بكسل عبر الصيغة cursor: url("/images/examples/shield-icon.svg") 16 16, pointer;، حيث يحدد الرقمان الاختياريان 16 16 إحداثيات نقطة النقر الفعالة في مركز الأيقونة بدلاً من زاويتها العلوية اليسرى.

وتلزم قواعد CSS بكتابة قيمة قياسية احتياطية مثل pointer أو auto بعد الفاصلة في نهاية القائمة، لضمان بقاء مؤشر الفأرة واضحاً وقابلاً للاستخدام فوراً إذا تعذر تحميل ملف الصورة.

عند وضع أيقونة بحث زخرفية أو شارة توضيحية فوق حقل إدخال <input> أو زر باستخدام التموضع المطلق position: absolute، تعترض تلك الطبقة العلوية نقرات الفأرة الواقعة فوق مساحتها، فيتفاجأ المستخدم بعدم استجابة الحقل الموجود أسفلها.

يحل ضبط pointer-events: none على العنصر الزخرفي العلوي هذه المشكلة جذرياً؛ إذ يجعل الطبقة شفافة تماماً لاختبارات النقر واللمس لتعبر النقرات مباشرة إلى العنصر التفاعلي الواقع تحتها، بينما تعيد القيمة pointer-events: auto تفعيل استقبال النقرات عند الحاجة.

CSS
.field-wrap { position: relative; width: 280px; }
.search-input { width: 100%; padding: 10px 76px 10px 12px; }
.search-badge {
  position: absolute; right: 10px; top: 8px;
  pointer-events: none;
}

يؤدي النقر المتكرر السريع على أزرار العدادات أو التبويبات غالباً إلى تظليل نص الزر باللون الأزرق عن طريق الخطأ. ويمنع تطبيق user-select: none على أزرار التحكم التفاعلية هذا التظليل العشوائي ليظل النقر سلساً ونظيفاً.

وعلى العكس تماماً، يتيح تطبيق user-select: all على أرقام المراجع أو رموز التفعيل تحديد السلسلة النصية كاملة بنقرة فأرة واحدة لنسخها بدقة دون سقوط أول حرف أو آخره، في حين تحافظ القيمة user-select: text على التحديد الطبيعي المعتاد للنصوص.

مختبر مؤشر الفأرة وخصائص الواجهة التفاعلي

تسمح المتصفحات افتراضياً بسحب مقبض تحجيم حقل <textarea> بالاتجاهين الأفقي والرأسي معاً عبر resize: both، مما قد يمدد الحقل عرضياً فوق الأعمدة والأزرار المجاورة ويكسر التخطيط. لذا يقيد ضبط resize: vertical التحجيم بالاتجاه الرأسي فقط لكتابة الرسائل الطويلة بأمان، بينما تقصره resize: horizontal على العرض، وتلغيه resize: none تماماً. وعلى الصناديق العادية يشترط اقتران resize بخاصية تدفق مثل overflow: auto.

وتكمل خاصيتان إضافيتان سلاسة التنقل داخل واجهة الصفحة؛ وهما scroll-behavior: smooth على العنصر html لجعل الانتقال للروابط الداخلية انسيابياً، و scroll-margin-top: 72px على العناوين المستهدفة لحجز مسافة علوية تمنع اختفاء العنوان خلف أشرطة التنقل الثابتة.

CSS
html { scroll-behavior: smooth; }
.section-heading { scroll-margin-top: 72px; }
.comment-field { width: 100%; min-height: 90px; resize: vertical; }
.resizable-panel {
  width: 240px; overflow: auto; resize: horizontal;
}

إياك والخلط بين خصائص تحسين المظهر وبين الحماية الأمنية الفعلية؛ فوضع user-select: none على مقالات الموقع لا يمنع نسخ المحتوى إطلاقاً لأن النص الكامل متاح في مصدر الصفحة وأدوات المطور خلال ثوانٍ، بل يزعج القارئ الشرعي الذي يحتاج لترجمة كلمة أو اقتباس جملة.

وبالمثل، فإن تنسيق زر بصنف .btn-disabled مع cursor: not-allowed أو pointer-events: none يمثل إشارة بصرية مساعدة فقط، إذ يستطيع أي مستخدم إلغاء القاعدة من أدوات المطور أو إرسال طلب مباشر إلى الخادم؛ لذا يظل التحقق من الصلاحيات والبيانات على الخادم أمراً إلزامياً لا بديل عنه.

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

الخاصيةأبرز القيم المعتمدةالدور العملي في الواجهة
cursorpointer, not-allowed, grab, grabbing, text, zoom-in, wait, helpمطابقة شكل المؤشر لوظيفة العنصر التفاعلي
cursor المخصصurl("icon.svg") 16 16, pointerتعيين أيقونة مخصصة مع قيمة قياسية احتياطية إلزامية
pointer-eventsauto, noneتمرير نقرات الفأرة عبر الأيقونات الزخرفية العلوية
user-selectnone, all, text, autoمنع تظليل الأزرار بالخطأ أو تحديد الرموز بنقرة واحدة
resizenone, vertical, horizontal, bothتقييد تحجيم الحقول رأسياً أو تفعيله مع overflow: auto
scroll-behaviorsmooth, autoتمرير انسيابي ناعم عند الانتقال للروابط المرجعية
scroll-margin-top72pxحجز هامش تمرير علوي لمنع اختفاء العنوان خلف الشريط الثابت
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

في ملخص الدرس أتقنت توظيف دلالات cursor والقيم الاحتياطية الإلزامية، وتمرير النقرات عبر pointer-events: none، وتنظيم التحديد عبر user-select، وتقييد التحجيم عبر resize: vertical مع إدراك حدود الحماية المظهرية. وننتقل في الخطوة التالية إلى درس المتغيرات في لغة CSS لتوحيد ألوان ومقاسات التصميم بمرونة عالية.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Cursor Affordance الدلالة البصرية للمؤشر
الإشارة البصرية التي يمنحها شكل مؤشر الفأرة كاليد أو المنع أو السحب لتوضيح قابلية التفاعل مع العنصر.
للمراجعة
02 Pointer Hit-Testing اختبار إصابة النقرة
عملية تحديد المتصفح للعنصر العلوي المستلم لنقرة الفأرة، ويتم تجاوزها عند ضبط pointer-events على none.
للمراجعة
03 Atomic Text Selection التحديد الكامل بنقرة واحدة
استخدام القيمة user-select: all بحيث يؤدي النقر مرة واحدة على الرمز المرجعي إلى تحديده كاملاً للنسخ.
للمراجعة
04 Scroll Snap Clearance هامش التمرير العلوي
مسافة علوية تضاف عبر scroll-margin-top للعناصر المستهدفة لمنع احتجابها خلف أشرطة التنقل الثابتة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 UI UI
User Interface
طبقة الأزرار والحقول والمؤشرات التفاعلية التي يتعامل المستخدم من خلالها مع تطبيق الويب.
للمراجعة
02 UX UX
User Experience
مدى وضوح وسلاسة وراحة التجربة الكلية التي يشعر بها الزائر أثناء التفاعل والتنقل داخل الواجهة.
للمراجعة
03 SVG SVG
Scalable Vector Graphics
صيغة رسوميات متجهة خفيفة وحادة تستخدم بكثرة لأيقونات المؤشر المخصصة مع كلمة احتياطية قياسية.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أضف pointer-events: none إلى الشارة العلوية .search-badge ليمر النقر فوقها مباشرة إلى حقل الإدخال الواقع تحتها.

  2. اضبط الحقل .comment-field على القيمة resize: vertical مع حدود ارتفاع مناسبة لحماية عرض العمود من التمدد الأفقي.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

لماذا تفشل قاعدة cursor المخصصة بالصورة عند كتابتها دون إتباعها بكلمة قياسية احتياطية مثل pointer أو auto؟

02

أي خاصية وقيمة تجعل نقرات الفأرة تعبر من خلال أيقونة زخرفية علوية لتصل إلى حقل الإدخال الواقع تحتها؟

03

أي قيمة لخاصية user-select تتيح تحديد رمز مرجعي أو كود خصم بالكامل بنقرة فأرة واحدة؟

04

ما الشرط اللازم لكي تعمل خاصية التحجيم resize: horizontal على صندوق div عادي؟

05

أي قيمة لخاصية resize تمنع تمدد حقل textarea أفقياً فوق الأعمدة المجاورة مع السماح بزيادة ارتفاعه؟

06

أي خاصية تحمي العنوان المستهدف برابط داخلي من الاختفاء خلف شريط التنقل العلوي الثابت بعد التمرير إليه؟

07

تطبيق user-select: none مع cursor: not-allowed يوفر حماية أمنية حقيقية تمنع نسخ النصوص من المصدر أو إرسال الطلبات للخادم.

08

الجمع بين cursor: grab في الحالة العادية و cursor: grabbing عند حالة النقر النشط يمنح إشارة بصرية واضحة للبطاقات القابلة للسحب.