امتحان CSS 3: التخطيط المتقدم والمستوى المتوسط (تمارين مركبة)

امتحان CSS 3: التخطيط المتقدم والمستوى المتوسط

يتكون هذا الامتحان من 13 تمرين شامل. كل تمرين يحتوي على عدة مطالب (أسئلة) يجب تنفيذها معاً في كود واحد.
التمارين 1-10: المستوى الأساسي | التمارين 11-13: المستوى المتوسط

تمرين 1 أساسيات الشبكة (CSS Grid Basics)

أنشئ شبكة (Grid) بالمواصفات التالية:

  1. اجعل الحاوية (.grid-container) تعرض كشبكة (display: grid).
  2. قسم الشبكة إلى 3 أعمدة متساوية العرض (1fr 1fr 1fr).
  3. أضف فجوة (gap) بمقدار 20px بين الأعمدة والصفوف.
الحل
.grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr; /* أو repeat(3, 1fr) */
    gap: 20px;
}
تمرين 2 تموضع عناصر الشبكة (Grid Placement)

تحكم في مكان عنصر داخل الشبكة:

  1. اجعل العنصر (.item1) يمتد من العمود الأول إلى العمود الثالث (يأخذ عمودين).
  2. اجعل العنصر (.item2) يمتد على صفين كاملين.
الحل
.item1 {
    grid-column: 1 / 3; /* أو span 2 */
}

.item2 {
    grid-row: span 2;
}
تمرين 3 مناطق الشبكة (Grid Areas)

استخدم `grid-template-areas` لتخطيط صفحة:

  1. عرف المناطق التالية: header, sidebar, main, footer.
  2. اجعل الـ header والـ footer يمتدان على كامل العرض.
  3. اجعل الـ sidebar على اليسار والـ main على اليمين.
الحل
.container {
    display: grid;
    grid-template-areas:
        "header header"
        "sidebar main"
        "footer footer";
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
تمرين 4 استعلامات الوسائط (Media Queries)

اجعل التصميم متجاوباً:

  1. بشكل افتراضي، خلفية الصفحة بيضاء.
  2. عندما يكون عرض الشاشة أقل من 768px (موبايل)، اجعل الخلفية زرقاء فاتحة.
  3. عندما يكون عرض الشاشة أكبر من 1200px (شاشة كبيرة)، اجعل حجم الخط 20px.
الحل
body {
    background-color: white;
}

@media (max-width: 768px) {
    body {
        background-color: lightblue;
    }
}

@media (min-width: 1200px) {
    body {
        font-size: 20px;
    }
}
تمرين 5 Flexbox المتقدم (Order & Grow)

تحكم في ترتيب وحجم عناصر Flex:

  1. اجعل العنصر (.item-last) يظهر في البداية (تغيير الترتيب البصري).
  2. اجعل العنصر (.item-grow) يملأ المساحة المتبقية في الحاوية (flex-grow: 1).
الحل
.item-last {
    order: -1;
}

.item-grow {
    flex-grow: 1;
}
تمرين 6 الصور المتجاوبة (Responsive Images)

اجعل الصورة تتكيف مع الحاوية:

  1. اجعل أقصى عرض للصورة 100% (max-width) لكي لا تخرج عن الحاوية.
  2. اجعل الارتفاع تلقائياً (height: auto) للحفاظ على الأبعاد.
  3. استخدم `object-fit: cover` لملء مربع الصورة دون تشويهها (مع تحديد أبعاد ثابتة للصورة).
الحل
img {
    max-width: 100%;
    height: auto;
}

.profile-pic {
    width: 200px;
    height: 200px;
    object-fit: cover;
}
تمرين 7 تخطيط البطاقات (Card Layout)

أنشئ تخطيطاً لشبكة بطاقات متجاوبة:

  1. استخدم Grid لإنشاء أعمدة تتكرر تلقائياً (auto-fit).
  2. اجعل الحد الأدنى لعرض العمود 250px والحد الأقصى 1fr (minmax).
  3. هذا يضمن أن البطاقات ستلتف تلقائياً بناءً على حجم الشاشة.
الحل
.cards-container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 20px;
}
تمرين 8 إخفاء العناصر بشكل متجاوب

تحكم في ظهور العناصر حسب الجهاز:

  1. أخفِ القائمة الجانبية (.sidebar) في شاشات الموبايل (أقل من 600px).
  2. أظهر زر القائمة (.menu-btn) فقط في شاشات الموبايل (أخفه في الشاشات الكبيرة).
الحل
/* إخفاء السايدبار في الموبايل */
@media (max-width: 600px) {
    .sidebar { display: none; }
}

/* إخفاء زر القائمة في الشاشات الكبيرة */
.menu-btn { display: none; }

/* إظهار زر القائمة في الموبايل */
@media (max-width: 600px) {
    .menu-btn { display: block; }
}
تمرين 9 محاذاة الشبكة (Grid Alignment)

قم بمحاذاة محتوى الشبكة:

  1. حاذِ محتوى الشبكة أفقياً في الوسط (justify-content: center).
  2. حاذِ العناصر داخل خلاياها عمودياً في الوسط (align-items: center).
الحل
.grid-container {
    display: grid;
    justify-content: center; /* محاذاة الشبكة نفسها */
    align-items: center; /* محاذاة العناصر داخل الخلايا */
}
تمرين 10 التخطيط المختلط (Flex inside Grid)

ادمج بين التقنيتين:

  1. لديك بطاقة (.card) هي عنصر داخل شبكة (Grid Item).
  2. اجعل محتوى البطاقة نفسها يستخدم Flexbox لتوزيع العنوان والزر متباعدين (space-between) وعمودياً (column).
الحل
.card {
    /* هذا العنصر هو ابن لشبكة، لكنه أب لمحتواه */
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    height: 100%;
}
تمرين 11 مرشحات CSS (CSS Filters) متوسط

استخدم مرشحات CSS لتأثيرات بصرية:

  1. أضف تأثير ضبابية (blur) بمقدار 5px للصورة.
  2. اجعل الصورة بالأبيض والأسود (grayscale) بنسبة 100%.
  3. أضف سطوع (brightness) بنسبة 150% عند hover.
  4. اجمع عدة فلاتر معاً (blur + brightness + contrast).
الحل
/* تأثير ضبابية */
.blur-image {
    filter: blur(5px);
}

/* أبيض وأسود */
.grayscale-image {
    filter: grayscale(100%);
}

/* سطوع عند hover */
.bright-on-hover {
    transition: filter 0.3s ease;
}

.bright-on-hover:hover {
    filter: brightness(150%);
}

/* جمع عدة فلاتر */
.multi-filter {
    filter: blur(2px) brightness(120%) contrast(110%);
}

/* مثال متقدم: تأثير sepia */
.vintage-photo {
    filter: sepia(80%) contrast(120%) brightness(90%);
}
تمرين 12 قص الأشكال (Clip-path) متوسط

استخدم clip-path لإنشاء أشكال مخصصة:

  1. اقطع صورة على شكل دائرة (circle).
  2. اقطع عنصر على شكل مثلث باستخدام polygon.
  3. أنشئ شكل سداسي (hexagon) باستخدام clip-path.
  4. أضف تأثير انتقال (transition) عند تغيير الشكل.
الحل
/* دائرة */
.circle-clip {
    clip-path: circle(50%);
}

/* مثلث */
.triangle-clip {
    clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}

/* سداسي */
.hexagon-clip {
    clip-path: polygon(
        50% 0%, 
        100% 25%, 
        100% 75%, 
        50% 100%, 
        0% 75%, 
        0% 25%
    );
}

/* تأثير انتقال */
.shape-morph {
    clip-path: circle(30%);
    transition: clip-path 0.5s ease;
}

.shape-morph:hover {
    clip-path: circle(50%);
}

/* أشكال إضافية */
.star-clip {
    clip-path: polygon(
        50% 0%, 
        61% 35%, 
        98% 35%, 
        68% 57%, 
        79% 91%, 
        50% 70%, 
        21% 91%, 
        32% 57%, 
        2% 35%, 
        39% 35%
    );
}
تمرين 13 الخصائص المخصصة المتقدمة (Advanced CSS Variables) متوسط

استخدم CSS Variables بشكل متقدم:

  1. أنشئ نظام ألوان كامل باستخدام متغيرات في :root.
  2. أنشئ متغيرات للمسافات (spacing scale) مثل --space-xs, --space-sm, --space-md.
  3. استخدم calc() مع المتغيرات لإنشاء قيم ديناميكية.
  4. أنشئ theme switcher بتغيير قيم المتغيرات في class مختلف.
الحل
/* نظام الألوان */
:root {
    /* Colors */
    --color-primary: #007bff;
    --color-secondary: #6c757d;
    --color-success: #28a745;
    --color-danger: #dc3545;
    --color-bg: #ffffff;
    --color-text: #212529;
    
    /* Spacing Scale */
    --space-xs: 0.25rem;  /* 4px */
    --space-sm: 0.5rem;   /* 8px */
    --space-md: 1rem;     /* 16px */
    --space-lg: 1.5rem;   /* 24px */
    --space-xl: 2rem;     /* 32px */
    
    /* Typography */
    --font-size-base: 16px;
    --font-size-lg: calc(var(--font-size-base) * 1.25);
    --font-size-xl: calc(var(--font-size-base) * 1.5);
}

/* استخدام المتغيرات */
.button {
    background-color: var(--color-primary);
    padding: var(--space-md) var(--space-lg);
    font-size: var(--font-size-base);
}

/* Dark Theme */
.dark-theme {
    --color-bg: #1a1a1a;
    --color-text: #ffffff;
    --color-primary: #4dabf7;
}

/* استخدام calc مع المتغيرات */
.container {
    padding: calc(var(--space-md) * 2);
    margin-bottom: calc(var(--space-lg) + var(--space-sm));
}

/* نظام Grid باستخدام المتغيرات */
:root {
    --grid-columns: 12;
    --grid-gap: var(--space-md);
}

.grid {
    display: grid;
    grid-template-columns: repeat(var(--grid-columns), 1fr);
    gap: var(--grid-gap);
}
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن