امتحان CSS 2: نموذج الصندوق والمستوى المتوسط (20 تمرين)
امتحان CSS 2: نموذج الصندوق والمستوى المتوسط
يتكون هذا الامتحان من 20 تمرين شامل. كل تمرين يحتوي على عدة مطالب (أسئلة) يجب تنفيذها معاً في كود واحد.
التمارين 1-10: المستوى الأساسي |
التمارين 11-15: المستوى المتوسط |
التمارين 16-20: المستوى المتقدم
قم بتعيين خصائص الصندوق لعنصر (div):
- عرض (width) 300px وارتفاع (height) 200px.
- حاشية داخلية (padding) بمقدار 20px من جميع الجهات.
- حدود (border) بسمك 5px ولون أسود.
- هامش خارجي (margin) بمقدار 50px.
div {
width: 300px;
height: 200px;
padding: 20px;
border: 5px solid black;
margin: 50px;
}
تحكم في كيفية حساب حجم العنصر:
- اجعل جميع العناصر (*) في الصفحة تستخدم خاصية `border-box`.
- اشرح في تعليق لماذا نستخدم `border-box` بدلاً من `content-box` الافتراضي.
* {
box-sizing: border-box;
}
/*
نستخدم border-box لكي يتم احتساب الـ padding والـ border
ضمن العرض والارتفاع المحدد للعنصر، مما يسهل عملية التخطيط.
*/
غيّر سلوك عرض العناصر التالية:
- اجعل الروابط (a) تتصرف كعناصر كتلية (block) لتأخذ سطرًا كاملاً.
- اجعل القوائم (li) تظهر بجانب بعضها (inline-block).
- أخفِ العناصر التي تحمل الفئة (.hidden) تماماً من الصفحة (لا تحجز مساحة).
a {
display: block;
}
li {
display: inline-block;
}
.hidden {
display: none;
}
قم بإنشاء حاوية مرنة (Flex Container):
- اجعل العنصر (.container) يستخدم نظام Flexbox.
- اجعل اتجاه العناصر عمودياً (column).
- اسمح للعناصر بالالتفاف (wrap) إذا لم تكن هناك مساحة كافية.
.container {
display: flex;
flex-direction: column;
flex-wrap: wrap;
}
داخل حاوية Flex، قم بمحاذاة العناصر:
- حاذِ العناصر أفقياً في المنتصف (justify-content).
- حاذِ العناصر عمودياً في المنتصف (align-items).
- اجعل الحاوية تملأ كامل ارتفاع الشاشة (100vh).
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
استخدم خصائص التموضع المختلفة:
- اجعل شريط التنقل (nav) ثابتاً في أعلى الصفحة (fixed) بعرض 100%.
- اجعل الزر (.btn) يتموضع بشكل مطلق (absolute) في الزاوية اليمنى السفلية للحاوية الأب (التي يجب أن تكون relative).
nav {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.parent {
position: relative;
}
.btn {
position: absolute;
bottom: 0;
right: 0;
}
استخدم الطفو لتخطيط صورة ونص:
- اجعل الصورة (img) تطفو إلى اليسار (left).
- أضف هامشاً يمين الصورة بمقدار 15px.
- تأكد من أن العنصر التالي (.clearfix) يقوم بإلغاء تأثير الطفو (clear: both).
img {
float: left;
margin-right: 15px;
}
.clearfix {
clear: both;
}
تحكم في المحتوى الزائد عن حجم العنصر:
- اجعل العنصر (div) بأبعاد ثابتة 100x100 بكسل.
- أضف شريط تمرير (scroll) إذا زاد المحتوى عن الحجم المحدد.
- أخفِ المحتوى الزائد أفقياً فقط (overflow-x).
div {
width: 100px;
height: 100px;
overflow: scroll; /* أو auto */
overflow-x: hidden;
}
تحكم في ترتيب ظهور العناصر فوق بعضها:
- لديك عنصران متداخلان (.box1 و .box2).
- اجعل .box1 يظهر فوق .box2 باستخدام z-index. (ملاحظة: تأكد من تحديد position).
.box1 {
position: relative; /* ضروري لعمل z-index */
z-index: 2;
}
.box2 {
position: relative;
z-index: 1;
}
استخدم وحدات قياس مختلفة ومناسبة:
- اجعل عرض الحاوية 50% من عرض الصفحة.
- اجعل حجم الخط 1.2rem (نسبة إلى جذر المستند).
- اجعل عرض العنصر 30vw (30% من عرض نافذة العرض).
.container {
width: 50%;
}
p {
font-size: 1.2rem;
}
.box {
width: 30vw;
}
أنشئ تصميماً متجاوباً باستخدام Media Queries:
- اجعل عرض الحاوية 90% على الشاشات الصغيرة (أقل من 768px).
- غيّر اتجاه Flexbox من row إلى column على الشاشات الصغيرة.
- أخفِ العناصر التي تحمل الفئة (.desktop-only) على الشاشات الصغيرة.
- اجعل حجم الخط 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;
}
}
أنشئ تأثيرات حركية:
- أضف انتقالاً سلساً (transition) للون الخلفية عند hover بمدة 0.3 ثانية.
- أنشئ حركة (animation) باسم "fadeIn" تجعل العنصر يظهر تدريجياً من opacity 0 إلى 1.
- اجعل الحركة تستمر لمدة 2 ثانية وتتكرر مرة واحدة فقط.
- أضف تأثير تكبير (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;
}
استخدم تحويلات CSS المتقدمة:
- قم بتدوير عنصر بمقدار 45 درجة (rotate).
- قم بإمالة عنصر بمقدار 10 درجات على المحور X (skewX).
- قم بترجمة (تحريك) عنصر بمقدار 50px لليمين و 30px للأسفل (translate).
- اجمع عدة تحويلات في سطر واحد (rotate + scale + translate).
- استخدم 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);
}