جاري التحميل...
جاري التحميل...
:has()، :is()، :where()، CSS Nesting، @layer، @scope
المحددات الحديثة في CSS هي مجموعة من الأدوات التي تتيح لك استهداف العناصر بطرق أذكى وأكثر مرونة. بدلاً من الاعتماد فقط على الفئات والمعرّفات، يمكنك الآن استخدام محددات متقدمة تصل إلى عناصر الأب، وتجمع عدة محددات معاً، وتتحكم في النوعية بذكاء.
أيضاً، CSS Nesting متوفر الآن في جميع المتصفحات الحديثة دون الحاجة إلى معالجات مثل Sass، مما يجعل الكود أكثر تنظيماً وقابلية للصيانة.
في هذه الدرس، ستتعلم:
:has(), :is(), :where()@layer - التحكم في ترتيب النوعية@scope - تضييق نطاق الأنماطتحل المحددات الحديثة عدة مشاكل حقيقية واجهها المطورون لسنوات:
:is() لجمع المحددات:has():where() و @layer تمنح تحكماً دقيقاًدعنا نرى مشكلة حقيقية واجهها المطورون قبل المحددات الحديثة:
:has()، كنت مضطراً لإضافة فئات يدوياًدعنا نغوص في شرح تفصيلي لكل أداة مع مفاهيم أساسية سريعة:
:has() مع محددات معقدة - اجعلها بسيطة:is() مع :where() - :is() تأخذ النوعية، :where() لها صفر:is():has() مع ::before/::after - هذه ليست عناصر DOM@layer لتنظيم النوعية:where() لإعادة التعيين - النوعية الصفرية تجعلها سهلة التجاوز:is() أو :where() بوعي حسب احتياجات النوعية:has() لتحسين تجربة المستخدم - النماذج، القوائم، الصفحات@scope لمنع تسرب الأنماط!important مع :has()ما هو الاستخدام الصحيح لمحدد :has() في CSS؟
ما الفرق بين :is() و :where() في CSS؟
أنشئ نموذج تسجيل دخول احترافي باستخدام CSS Nesting والمحددات الحديثة و @layer. يجب أن يتضمن النموذج حالات التحقق وتأثيرات التركيز وأزرار تسجيل الدخول الاجتماعية.
الحل:
/* Modern Selectors Challenge */
/* 1. Use :has() to style cards with images */
.card:has(img) {
display: grid;
grid-template-columns: 200px 1fr;
}
/* 2. Use :is() to group selectors */
:is(.nav, .footer) a:is(:hover, :focus, :active) {
color: var(--accent);
}
/* 3. Use :where() for resets */
:where(h1, h2, h3) {
margin: 0;
}
/* 4. Use CSS Nesting */
.card {
background: white;
border-radius: 8px;
& h2 {
color: navy;
}
&:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
}
/* 5. Use @layer for specificity control */
@layer reset, base, components;
@layer reset {
* { margin: 0; padding: 0; }
}
@layer components {
.card h2 { margin-bottom: 1rem; }
}المحددات الأساسية:
عنصر - p { }فئة - .btn { }معرّف - #header { }سمة - [type="text"]المحرّكات:
ابن > - .nav > li (ابنة مباشرة)تابع - .nav a (أي تابع)مجاور + - h2 + p (الأخ المجاور التالي)عام ~ - h2 ~ p (جميع الإخوة التاليين)المحددات الحديثة:
:has() - محدد الأب (ينسّق الأب بناءً على الأبناء):is() - تجميع المحددات (يأخذ أعلى نوعية):where() - نوعية صفرية (ممتاز لإعادة التعيين)CSS Nesting:
.parent {
background: white;
& .child { color: red; }
&:hover { background: gray; }
&::before { content: ""; }
&.active { color: blue; }
}