امتحان CSS 2: نموذج الصندوق والمستوى المتوسط (20 تمرين)

امتحان CSS 2: نموذج الصندوق والمستوى المتوسط

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

تمرين 1 نموذج الصندوق (Box Model)

قم بتعيين خصائص الصندوق لعنصر (div):

  1. عرض (width) 300px وارتفاع (height) 200px.
  2. حاشية داخلية (padding) بمقدار 20px من جميع الجهات.
  3. حدود (border) بسمك 5px ولون أسود.
  4. هامش خارجي (margin) بمقدار 50px.
الحل
div {
    width: 300px;
    height: 200px;
    padding: 20px;
    border: 5px solid black;
    margin: 50px;
}
تمرين 2 حساب الحجم الكلي (Box Sizing)

تحكم في كيفية حساب حجم العنصر:

  1. اجعل جميع العناصر (*) في الصفحة تستخدم خاصية `border-box`.
  2. اشرح في تعليق لماذا نستخدم `border-box` بدلاً من `content-box` الافتراضي.
الحل
* {
    box-sizing: border-box;
}

/* 
   نستخدم border-box لكي يتم احتساب الـ padding والـ border 
   ضمن العرض والارتفاع المحدد للعنصر، مما يسهل عملية التخطيط.
*/
تمرين 3 العرض (Display Property)

غيّر سلوك عرض العناصر التالية:

  1. اجعل الروابط (a) تتصرف كعناصر كتلية (block) لتأخذ سطرًا كاملاً.
  2. اجعل القوائم (li) تظهر بجانب بعضها (inline-block).
  3. أخفِ العناصر التي تحمل الفئة (.hidden) تماماً من الصفحة (لا تحجز مساحة).
الحل
a {
    display: block;
}

li {
    display: inline-block;
}

.hidden {
    display: none;
}
تمرين 4 أساسيات Flexbox (الحاوية)

قم بإنشاء حاوية مرنة (Flex Container):

  1. اجعل العنصر (.container) يستخدم نظام Flexbox.
  2. اجعل اتجاه العناصر عمودياً (column).
  3. اسمح للعناصر بالالتفاف (wrap) إذا لم تكن هناك مساحة كافية.
الحل
.container {
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
}
تمرين 5 محاذاة العناصر في Flexbox

داخل حاوية Flex، قم بمحاذاة العناصر:

  1. حاذِ العناصر أفقياً في المنتصف (justify-content).
  2. حاذِ العناصر عمودياً في المنتصف (align-items).
  3. اجعل الحاوية تملأ كامل ارتفاع الشاشة (100vh).
الحل
.container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}
تمرين 6 التموضع (Positioning)

استخدم خصائص التموضع المختلفة:

  1. اجعل شريط التنقل (nav) ثابتاً في أعلى الصفحة (fixed) بعرض 100%.
  2. اجعل الزر (.btn) يتموضع بشكل مطلق (absolute) في الزاوية اليمنى السفلية للحاوية الأب (التي يجب أن تكون relative).
الحل
nav {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
}

.parent {
    position: relative;
}

.btn {
    position: absolute;
    bottom: 0;
    right: 0;
}
تمرين 7 الطفو (Float & Clear)

استخدم الطفو لتخطيط صورة ونص:

  1. اجعل الصورة (img) تطفو إلى اليسار (left).
  2. أضف هامشاً يمين الصورة بمقدار 15px.
  3. تأكد من أن العنصر التالي (.clearfix) يقوم بإلغاء تأثير الطفو (clear: both).
الحل
img {
    float: left;
    margin-right: 15px;
}

.clearfix {
    clear: both;
}
تمرين 8 تجاوز المحتوى (Overflow)

تحكم في المحتوى الزائد عن حجم العنصر:

  1. اجعل العنصر (div) بأبعاد ثابتة 100x100 بكسل.
  2. أضف شريط تمرير (scroll) إذا زاد المحتوى عن الحجم المحدد.
  3. أخفِ المحتوى الزائد أفقياً فقط (overflow-x).
الحل
div {
    width: 100px;
    height: 100px;
    overflow: scroll; /* أو auto */
    overflow-x: hidden;
}
تمرين 9 ترتيب الطبقات (Z-Index)

تحكم في ترتيب ظهور العناصر فوق بعضها:

  1. لديك عنصران متداخلان (.box1 و .box2).
  2. اجعل .box1 يظهر فوق .box2 باستخدام z-index. (ملاحظة: تأكد من تحديد position).
الحل
.box1 {
    position: relative; /* ضروري لعمل z-index */
    z-index: 2;
}

.box2 {
    position: relative;
    z-index: 1;
}
تمرين 10 وحدات القياس (Units)

استخدم وحدات قياس مختلفة ومناسبة:

  1. اجعل عرض الحاوية 50% من عرض الصفحة.
  2. اجعل حجم الخط 1.2rem (نسبة إلى جذر المستند).
  3. اجعل عرض العنصر 30vw (30% من عرض نافذة العرض).
الحل
.container {
    width: 50%;
}

p {
    font-size: 1.2rem;
}

.box {
    width: 30vw;
}
تمرين 11 التصميم المتجاوب (Responsive Design) متوسط

أنشئ تصميماً متجاوباً باستخدام Media Queries:

  1. اجعل عرض الحاوية 90% على الشاشات الصغيرة (أقل من 768px).
  2. غيّر اتجاه Flexbox من row إلى column على الشاشات الصغيرة.
  3. أخفِ العناصر التي تحمل الفئة (.desktop-only) على الشاشات الصغيرة.
  4. اجعل حجم الخط 14px على الشاشات الصغيرة و 16px على الشاشات الكبيرة.
الحل
/* الأنماط الافتراضية (للشاشات الكبيرة) */
.container {
    width: 70%;
}

.flex-container {
    display: flex;
    flex-direction: row;
}

body {
    font-size: 16px;
}

/* Media Query للشاشات الصغيرة */
@media (max-width: 768px) {
    .container {
        width: 90%;
    }
    
    .flex-container {
        flex-direction: column;
    }
    
    .desktop-only {
        display: none;
    }
    
    body {
        font-size: 14px;
    }
}

/* Media Query للشاشات الكبيرة جداً */
@media (min-width: 1200px) {
    .container {
        max-width: 1140px;
        margin: 0 auto;
    }
}
تمرين 12 الحركات والانتقالات (Animations & Transitions) متوسط

أنشئ تأثيرات حركية:

  1. أضف انتقالاً سلساً (transition) للون الخلفية عند hover بمدة 0.3 ثانية.
  2. أنشئ حركة (animation) باسم "fadeIn" تجعل العنصر يظهر تدريجياً من opacity 0 إلى 1.
  3. اجعل الحركة تستمر لمدة 2 ثانية وتتكرر مرة واحدة فقط.
  4. أضف تأثير تكبير (scale) عند hover باستخدام transform.
الحل
/* Transition للون الخلفية */
.button {
    background-color: #007bff;
    transition: background-color 0.3s ease;
}

.button:hover {
    background-color: #0056b3;
}

/* تعريف الحركة */
@keyframes fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

/* تطبيق الحركة */
.fade-element {
    animation: fadeIn 2s ease-in-out 1;
}

/* تأثير التكبير عند hover */
.card {
    transition: transform 0.3s ease;
}

.card:hover {
    transform: scale(1.05);
}

/* مثال متقدم: حركة دوران */
@keyframes rotate {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}

.spinner {
    animation: rotate 2s linear infinite;
}
تمرين 13 التحويلات (CSS Transforms) متوسط

استخدم تحويلات CSS المتقدمة:

  1. قم بتدوير عنصر بمقدار 45 درجة (rotate).
  2. قم بإمالة عنصر بمقدار 10 درجات على المحور X (skewX).
  3. قم بترجمة (تحريك) عنصر بمقدار 50px لليمين و 30px للأسفل (translate).
  4. اجمع عدة تحويلات في سطر واحد (rotate + scale + translate).
  5. استخدم transform-origin لتغيير نقطة الأصل للتحويل.
الحل
/* تدوير */
.rotate-element {
    transform: rotate(45deg);
}

/* إمالة */
.skew-element {
    transform: skewX(10deg);
}

/* ترجمة (تحريك) */
.translate-element {
    transform: translate(50px, 30px);
}

/* جمع عدة تحويلات */
.multi-transform {
    transform: rotate(15deg) scale(1.2) translate(20px, 10px);
}

/* تغيير نقطة الأصل */
.custom-origin {
    transform: rotate(45deg);
    transform-origin: top left; /* بدلاً من center الافتراضي */
}

/* مثال متقدم: بطاقة قابلة للقلب */
.flip-card {
    perspective: 1000px;
}

.flip-card-inner {
    transition: transform 0.6s;
    transform-style: preserve-3d;
}

.flip-card:hover .flip-card-inner {
    transform: rotateY(180deg);
}

/* تحويلات ثلاثية الأبعاد */
.3d-element {
    transform: rotateX(30deg) rotateY(45deg) translateZ(50px);
}
المحرر الذكي

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

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

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

انضم الآن