0Pricing
CSS Academy · درس

الفئة الزائفة العلاقية :has()

حدّد العناصر الأصلية استنادًا إلى عناصرها الفرعية باستخدام الفئة الزائفة العلاقية القوية :has().

الفئة الزائفة العلاقية :has() درس مجاني في CSS Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في CSS Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة CSS Academy 4 دروس في المجموع.

ما :has()؟

يحدد الصنف الزائف :has() عنصرًا إذا كان يحتوي على عنصر سليل يطابق الوسيط. ويُسمى غالبًا «محدد العنصر الأصل»، إذ يتيح تنسيق العنصر الأصل استنادًا إلى عناصره السليلة، وهي قدرة لم تكن CSS تمتلكها من قبل.

الصيغة الأساسية

يحدد .card:has(img) أي عنصر .card يحتوي على عنصر سليل من نوع img. والوسيط عبارة عن قائمة محددات نسبية، أي أي محدد CSS صالح يصف عناصر بالنسبة إلى العنصر موضوع التحديد.

تنسيق العناصر الأصلية

نسّقوا حاوية نموذج عندما تحتوي على إدخال غير صالح: form:has(:invalid) { border-color: red; }. ونسّقوا قسمًا يحتوي على عنوان: section:has(h2) { padding-top: 2rem; }. يتغير مظهر العنصر الأصل استنادًا إلى حالة العنصر السليل.

تحديد العناصر الشقيقة

يمكن لـ :has() تحديد العناصر الشقيقة السابقة، وهو أمر لا يستطيع + و~ فعله. يحدد h2:has(+ p) عناصر h2 التي يتبعها عنصر p مباشرةً. ويحدد li:has(~ .active) عناصر li التي لها عنصر شقيق لاحق يحمل الصنف .active.

تنسيق حالة النموذج

تفاعلوا مع صلاحية النموذج الأصلية من دون JavaScript: ينسّق input:has(~ .error-msg) حقل إدخال له رسالة خطأ شقيقة. وينسّق label:has(+ input:required) التسميات التي يكون حقل الإدخال المرتبط بها مطلوبًا، وكل ذلك باستخدام CSS وحدها.

حالة التنقل

أبرزوا حاويات التنقل استنادًا إلى العنصر السليل النشط: يطبق nav:has(.active) التنسيقات على عنصر nav بأكمله عندما يحمل أي عنصر سليل الصنف active. وهذا مفيد للإشارة إلى قسم التنقل الحالي على مستوى الحاوية.

الدمج مع الأصناف الزائفة الأخرى

ينسّق .grid:has(.card:focus-within) الشبكة بأكملها عندما تتلقى أي بطاقة تركيزًا من لوحة المفاتيح. ويحافظ .dropdown:has(:hover) على بقاء القائمة المنسدلة مفتوحة أثناء تمرير المؤشر فوق أي عنصر سليل، وهو أوضح من سلاسل معاملات الأشقاء المعقدة.

بديل استعلام الوسائط في CSS

يطبق .sidebar:has(nav) تخطيطًا مختلفًا عن .sidebar:not(:has(nav)). يتيح ذلك تخطيطًا شرطيًا من دون JavaScript؛ إذ يقود وجود عناصر سليلة محددة أو غيابها تخطيط العنصر الأصل، ما يتيح CSS متكيفة فعلًا وواعية بالمحتوى.

اعتبارات الأداء

قد يكون استخدام :has() مع محددات وسيط عامة (مثل :has(*)) مكلفًا؛ إذ يجب على المتصفح فحص كل عنصر. اجعلوا وسائط :has() محددة. وفضّلوا :has(> .specific-child) (عنصر سليل مباشر) على :has(.specific-child) (أي عنصر سليل) متى أمكن.

دعم المتصفحات

يتوفر دعم :has() في Chrome 105+ وSafari 15.4+ وFirefox 121+، مع دعم كامل ضمن خط الأساس منذ أواخر 2023. لا يوجد polyfill لهذه الميزة (لأنه سيتطلب محاكاة باستخدام JavaScript)، لذا استخدموها مع التحسين التدريجي في المتصفحات الأقدم عندما لا تكون الميزة ضرورية.

استبدال أنماط JavaScript

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

اختبار المعرفة

ما الذي يجعل :has() فريدًا مقارنةً بمعاملات CSS الموجودة مثل + و~؟

الملخص

يُعد :has() أول صنف زائف علائقي حقيقي في CSS، إذ يتيح تحديد العناصر الأصلية والعناصر الشقيقة السابقة. وهو يدعم التنسيق القائم على المحتوى، والتفاعل مع حالات النماذج، وإبراز التنقل، والعديد من الأنماط التي كانت تتطلب سابقًا معالجة DOM باستخدام JavaScript، وكل ذلك بطريقة تصريحية داخل CSS.

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

هل درس «الفئة الزائفة العلاقية :has()» مجاني؟

نعم — نص درس «الفئة الزائفة العلاقية :has()» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة CSS Academy، انتقل إلى CoddyKit PRO. تتضمن دورة CSS Academy 4 دروس في المجموع.

ماذا ستتعلم في «الفئة الزائفة العلاقية :has()»؟

حدّد العناصر الأصلية استنادًا إلى عناصرها الفرعية باستخدام الفئة الزائفة العلاقية القوية :has(). تتمرن على CSS Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ CSS Academy؟

لا تُشترط خبرة سابقة. CSS Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الفئة الزائفة العلاقية :has()»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس CSS Academy هذا؟

نعم. كل درس في CSS Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التداخل الأصلي في CSS
  2. الفئة الزائفة العلاقية :has()
  3. @scope للأنماط ذات النطاق المحدد
  4. واجهة View Transitions API
← العودة إلى CSS Academy