امتحان CSS 5: الإتقان والميزات الحديثة (10 تمارين مركبة)
امتحان CSS 5: الإتقان والميزات الحديثة
اختبر معرفتك بأحدث تقنيات CSS التي تغير طريقة بناء الويب، مثل استعلامات الحاويات والطبقات والخصائص المنطقية.
تمرين 1
استعلامات الحاويات (Container Queries)
اجعل العنصر يستجيب لحجم حاويته وليس الشاشة:
- عرف الحاوية (.card-container) كحاوية استعلام (container-type: inline-size).
- استخدم `@container` لتغيير لون خلفية الابن (.card) إلى الأحمر إذا كان عرض الحاوية أقل من 300px.
الحل
.card-container {
container-type: inline-size;
}
@container (max-width: 300px) {
.card {
background-color: red;
}
}
تمرين 2
الطبقات المتتالية (Cascade Layers)
نظم أولويات CSS باستخدام الطبقات:
- عرف طبقات بالترتيب: base, components, utilities.
- ضع قاعدة في طبقة `base` تجعل لون النص أزرق.
- ضع قاعدة في طبقة `utilities` تجعل لون النص أحمر (يجب أن تفوز لأنها معرفة لاحقاً).
الحل
@layer base, components, utilities;
@layer base {
p { color: blue; }
}
@layer utilities {
p { color: red; } /* هذا اللون سيفوز */
}
تمرين 3
الخصائص المنطقية (Logical Properties)
استخدم الخصائص المنطقية لدعم تعدد اللغات (LTR/RTL):
- بدلاً من `margin-left`، استخدم الخاصية المنطقية لبداية السطر (inline-start).
- بدلاً من `padding-top`، استخدم الخاصية المنطقية لبداية الكتلة (block-start).
الحل
.box {
margin-inline-start: 20px; /* يسار في LTR، يمين في RTL */
padding-block-start: 10px; /* أعلى */
}
تمرين 4
تداخل CSS (CSS Nesting)
استخدم ميزة Nesting الحديثة في CSS (بدون Preprocessor):
- داخل قاعدة `.card`، قم بتنسيق العنوان `.title` الموجود بداخلها.
- داخل نفس القاعدة، استخدم `&` لتنسيق حالة `hover` للبطاقة نفسها.
الحل
.card {
background: white;
.title {
font-weight: bold;
}
&:hover {
background: gray;
}
}
تمرين 5
دالة التثبيت (Clamp Function)
اجعل حجم الخط متجاوباً بذكاء:
- استخدم دالة `clamp()` لتعيين حجم الخط.
- الحد الأدنى: 1rem.
- القيمة المفضلة: 2.5vw (تتغير مع عرض الشاشة).
- الحد الأقصى: 2rem.
الحل
h1 {
font-size: clamp(1rem, 2.5vw, 2rem);
}
تمرين 6
الشبكة الفرعية (Subgrid)
اجعل الابن يرث شبكة الأب:
- لديك أب `.grid` معرف كشبكة.
- لديك ابن `.item` يمتد على 3 أعمدة.
- اجعل الابن نفسه شبكة، ولكن اجعل أعمدته تتبع أعمدة الأب باستخدام `subgrid`.
الحل
.item {
display: grid;
grid-template-columns: subgrid;
}
تمرين 7
نسبة العرض للارتفاع (Aspect Ratio)
تحكم في أبعاد الصندوق:
- اجعل العنصر يحافظ دائماً على نسبة عرض إلى ارتفاع 16:9.
- بغض النظر عن عرضه المتغير.
الحل
.video-container {
width: 100%;
aspect-ratio: 16 / 9;
}
تمرين 8
تخصيص شريط التمرير (Scrollbar Styling)
خصص مظهر شريط التمرير (للمتصفحات الحديثة):
- اجعل عرض شريط التمرير رفيعاً (thin).
- اجعل لون الشريط (thumb) أزرق ولون المسار (track) شفافاً.
الحل
/* Standard Property */
html {
scrollbar-width: thin;
scrollbar-color: blue transparent;
}
تمرين 9
دالة الحساب (Calc Function)
قم بإجراء عمليات حسابية للقيم:
- اجعل عرض العنصر يساوي 100% ناقص 50px.
- هذا مفيد جداً عند دمج وحدات مختلفة.
الحل
.sidebar {
width: calc(100% - 50px);
}
تمرين 10
فئة :has() (The Parent Selector)
حدد الأب بناءً على حالة ابنه:
- حدد العنصر (.card) فقط إذا كان يحتوي على صورة (img) بداخله.
- اجعل حدود هذه البطاقة حمراء.
الحل
.card:has(img) {
border: 2px solid red;
}