I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

وداعاً للجافا سكريبت: شرح ميزة الـ CSS Anchor Positioning لعمل الـ Tooltips

وداعاً للجافا سكريبت: شرح ميزة الـ CSS Anchor Positioning لعمل الـ Tooltips أهلاً بك يا صديقي المبرمج. لو بقالك فترة بتشتغل في الـ Front-end، أكيد مريت باللحظة

وداعاً للجافا سكريبت: شرح ميزة الـ CSS Anchor Positioning لعمل الـ Tooltips
Reading Count: 49

وداعاً للجافا سكريبت: شرح ميزة الـ CSS Anchor Positioning لعمل الـ Tooltips

أهلاً بك يا صديقي المبرمج. لو بقالك فترة بتشتغل في الـ Front-end، أكيد مريت باللحظة اللي بتحاول فيها تعمل Dropdown أو Tooltip وتلاقي نفسك مضطر تكتب كود JavaScript عشان تحسب مكان العنصر (Positioning) وتخليه يفضل لازق في الزرار بتاعك مهما عملت Scroll أو Resize للشاشة. الموضوع ده كان كابوس لسنوات، وبيخلي الـ DOM تقيل بسبب الـ Event Listeners اللي بنحتاجها عشان نحدث المكان.

النهارده هنتكلم عن ميزة ثورية جديدة في الـ CSS وهي الـ Anchor Positioning. الميزة دي بتخلينا نربط العناصر ببعضها برمجياً باستخدام الـ CSS فقط، وبطريقة Native سريعة جداً. يلا بينا نشوف إزاي نستغلها.

إيه هو الـ CSS Anchor Positioning؟

ببساطة، الـ Anchor Positioning هو مجموعة من الخصائص الجديدة (CSS Anchor Positioning API) بتسمح لعنصر معين إنه "يتعلق" أو يتربط بعنصر تاني (الـ Anchor) من غير ما نعتمد على الـ Parent Containers أو الحسابات المعقدة. الفكرة إنك بتحدد الـ Anchor، وبعدين بتقول للعنصر المنبثق: "يا باشا، خليك دايمًا جنب العنصر ده".

خطوات التنفيذ: كيف نستخدم الـ anchor-name و anchor()

عشان نستخدم الميزة دي، لازم نمر بخطوتين أساسيتين:

1. تعريف الـ Anchor: لازم نحدد العنصر الأساسي اللي هنربط بيه باستخدام الخاصية anchor-name.

2. وضع العنصر المنبثق: نستخدم الدالة anchor() عشان نحدد مكان الـ Tooltip أو الـ Dropdown بالنسبة للـ Anchor.

تعال نشوف مثال عملي بسيط لزرار ونافذة منبثقة:


/* تعريف الزرار كـ Anchor */
.my-button {
  anchor-name: --my-anchor;
}

/* ربط الـ Tooltip بالزرار */
.my-tooltip {
  position: absolute;
  position-anchor: --my-anchor;
  top: anchor(bottom);
  left: anchor(center);
}

مميزات استخدام هذه التقنية في مشاريعك

لما تعتمد على الـ CSS Anchor Positioning بدلاً من الـ JavaScript، إنت بتكسب حاجات كتير:

  • الأداء (Performance): الـ CSS بيتعامل مع الموضع مباشرة في الـ Rendering Engine، وده أسرع بكتير من الحسابات اللي بتتم في الـ Main Thread عن طريق الـ JS.
  • نظافة الكود (Clean Code): كود أقل يعني bugs أقل، ومفيش داعي تعمل Track للـ Resize events أو الـ Scroll events.
  • دعم المتصفحات: الميزة دي بدأت تتوفر في المتصفحات الحديثة، وده بيخلي الـ UI بتاعك يبان احترافي وبدون "رعشة" أو تأخير في ظهور العناصر.

تحديات وحلول في الـ Tooltip positioning

ممكن تسأل: "طب لو الزرار قريب من حافة الشاشة؟ هل الـ Tooltip هتختفي؟". الإجابة لا، لأن الـ CSS وفر لنا خاصية position-try-options. دي بتسمح للمتصفح إنه يغير مكان الـ Tooltip (مثلاً يخليها فوق بدل تحت) لو مفيش مساحة كافية، كل ده أوتوماتيكياً!


.my-tooltip {
  position-try-options: flip-block;
}

خاتمة ونصيحة من أخ

يا صديقي، عالم الـ Web Development بيتطور بسرعة رهيبة، والحاجات اللي كانت مستحيلة زمان بقت النهاردة سطرين CSS. نصيحتي ليك إنك متكتفيش بس باللي إنت عارفه، جرب الميزات الجديدة (Experimental Features) حتى لو لسه مش مدعومة في كل مكان، لأنها هي اللي هتميز شغلك وتخليه أسرع وأسهل في الصيانة. ابدأ جرب الـ Anchor Positioning في مشروع صغير النهاردة، وهتلاقي فرق كبير في طريقة تفكيرك في الـ UI.

بالتوفيق في كودك، ولو قابلتك أي مشكلة، إحنا هنا دايماً عشان نساعد بعض!


Share

Related posts

Aug 06, 2026 • 1 min read
Reading Count: 3
ازاي تخلي الـ Dialogs والـ Modals تفتح كـ Routes مستقلة في Inertia.js؟

ازاي تخلي الـ Dialogs والـ Modals تفتح كـ Routes مستقلة في Inertia.js؟ يا هلا بيك يا باشمهندس في مقا...

Aug 06, 2026 • 1 min read
Reading Count: 6
تحميل البيانات مسبقاً (Prefetching) في Inertia لزيادة سرعة التصفح

يا هلا بيك يا صديقي المبرمج! كام مرة حسيت إن تطبيق الويب اللي شغال عليه بطيء، والتأخير البسيط اللي ب...

Aug 06, 2026 • 1 min read
Reading Count: 6
ازاي تربح من تطبيقك من غير ما تطفش المستخدم: دليل دمج إعلانات جوجل أد موب (Google AdMob) في فلاتر (Flutter) باحترافية

ازاي تربح من تطبيقك من غير ما تطفش المستخدم: دليل دمج إعلانات جوجل أد موب (Google AdMob) في فلاتر (F...