لو HTML هو الهيكل العظمي للموقع، فـ CSS هو "الملابس والألوان والمكياج" اللي بيخلي الموقع يبقى جذاب ويقدم تجربة مستخدم (UX) ممتازة. من خلال 8 سنوات في تصميم المواقع، لاحظت إن 70% من قرار المستخدم في البقاء في الموقع أو مغادرته بيتخذ في أول 3 ثواني — وده بيعتمد 100% على التصميم (CSS).
في الدرس ده هنتعلم:
⚠️ نصيحة من خبرة: موقع بـ HTML نظيف بس بدون CSS بيبقى شكله زي موقع 1995! CSS مش بس "تجميل" — هو أداة قوية لتحسين تجربة المستخدم، سرعة التحميل، وحتى SEO (جوجل بتحب المواقع المريحة للمستخدم).
CSS (Cascading Style Sheets) هي لغة تنسيق تتحكم في مظهر عناصر HTML. الكلمة "Cascading" (متتالية) مهمة — معناها إن CSS بيتبع قواعد ترتيبية: لو فيه تضارب في الأنماط، المتصفح بيختار الأنماط الأقرب للعنصر.
💡 لماذا نفصل CSS عن HTML؟ في 1990s، كان التنسيق داخل HTML (باستخدام وسوم زي <font>). ده كان بيخلي الكود فوضى وصعب التحديث. CSS جت عشان تفصل "المحتوى" عن "التصميم" — وده بيخلي الموقع أسهل في الصيانة وأسرع في التحميل.
في 3 طرق لإضافة CSS لصفحتك. كل طريقة لها استخداماتها، بس فيه طريقة واحدة هي "المعيار الذهبي" في 2026.
مناسب للصفحات المستقلة أو التجارب السريعة. بس مش مناسب للمواقع الكبيرة لأنك هتكرر نفس الكود في كل صفحة.
⚡ متى نستخدمه؟ لو عندك صفحة Landing Page واحدة أو صفحة تأكيد (Thank You Page) — CSS داخلي بيكون أسرع لأن المتصفح مش محتاج يحمل ملف إضافي.
ده المعيار الذهبي في 2026. بتكتب CSS في ملف منفصل (مثلاً style.css) وتربطه بكل صفحات HTML. ده بيخلي:
🌟 لماذا box-sizing: border-box؟ الخاصية دي بتخلي العرض (width) والارتفاع (height) يشملوا الـ padding والـ border — مش بس المحتوى. ده بيخلّي حساب الأبعاد أسهل بكتير وبيمنع المفاجآت في التصميم!
أقل طريقة مستحسنة — بتستخدم فقط للتعديلات السريعة جدًا أو الأنماط الديناميكية (من JavaScript).
❌ تجنب CSS المباشر: بيخلي الكود صعب القراءة، صعب الصيانة، وما بيقدرش يتخزن في Cache. استخدمه فقط لو بتعدل من JavaScript ديناميكيًا.
| المعيار | داخلي (Internal) | خارجي (External) ⭐ | مباشر (Inline) |
|---|---|---|---|
| السرعة الأولية | ✅ سريع | ⚡ سريع (مع Cache) | ✅ سريع |
| إعادة الاستخدام | ❌ لكل صفحة | ✅ موقع كامل | ❌ عنصر واحد |
| سهولة الصيانة | ⚠️ متوسطة | ✅ سهلة جدًا | ❌ صعبة |
| SEO / أداء | ⚠️ متوسط | ✅ ممتاز | ❌ سيء |
| متى نستخدمه؟ | صفحة واحدة | كل المشاريع | JavaScript فقط |
المحدد هو "العنوان" اللي بتكتبه في CSS عشان تقول للمتصفح: "طبّق الأنماط دي على العناصر دي". فيه أنواع كتير من المحددات — هنتعلم الأهم.
| المحدد | الوظيفة | مثال CSS | مثال HTML |
|---|---|---|---|
| عنصر (Element) | جميع الوسوم من نوع واحد | p { } |
<p>نص</p> |
| class (.) | عناصر بنفس الصنف | .btn { } |
<button class="btn"> |
| id (#) | عنصر واحد فريد | #header { } |
<header id="header"> |
| * (Universal) | جميع العناصر | * { } |
— |
| مجموعة (,) | أكتر من محدد | h1, h2 { } |
— |
💡 متى نستخدم id ومتى class؟ استخدم id للعناصر الفريدة (زي #header, #footer). استخدم class للأنماط المتكررة (زي .btn, .card). في المشاريع الكبيرة، class بيكون أكثر مرونة — id صعب يتغير لو احتجت تكراره في مكان تاني.
CSS فيها مئات الخصائص — بس فيه 20 خاصية بس هما اللي هتستخدمهم 80% من الوقت. هنا أهمها:
🎯 لماذا rem أفضل من px؟ rem بيحسب الحجم نسبة لحجم الخط الأساسي (root). لو المستخدم غيّر حجم الخط في المتصفح (لضعف البصر)، rem بتتكيف تلقائيًا — px ثابتة ومش بتتكيف. ده بيحسن الوصولية (Accessibility) وبيحسن SEO!
كل عنصر في HTML بيتعامل معاه المتصفح كـ "صندوق" — والصندوق ده بيتكون من 4 طبقات:
الـ Padding (التباعد الداخلي)
الـ Border (الحدود)
الـ Margin (التباعد الخارجي)
| الطبقة | الوظيفة | الخاصية في CSS |
|---|---|---|
| Content | المحتوى الفعلي (نص، صورة، إلخ) | width, height |
| Padding | التباعد الداخلي (بين المحتوى والحدود) | padding |
| Border | الحدود المحيطة بالصندوق | border |
| Margin | التباعد الخارجي (بين الصندوق والعناصر التانية) | margin |
box-sizing: border-box في بداية الملفrem للأحجام بدل px (للوصولية):focus styles (للمستخدمين اللي بيستخدمون Keyboard)max-width: 100% (متجاوبة)margin: 0 auto للتوسيط بدل text-align: center على الحاوية| الخطأ ❌ | الصح ✅ | السبب |
|---|---|---|
| استخدام px لكل الأحجام | استخدام rem للنصوص و px للحدود فقط | rem بتتكيف مع إعدادات المستخدم |
| نسيان box-sizing: border-box | إضافته في بداية كل مشروع | بيمنع المفاجآت في حساب الأبعاد |
| تكرار نفس الأنماط | استخدام class مشترك (مثل .btn, .card) | صيانة أسهل وملف أصغر |
| استخدام !important كتير | تنظيم Selectors بشكل هرمي | !important بيخرب الترتيب الطبيعي ويصعب التصحيح |
| نسيان :focus للروابط والحقول | تعريف styles واضحة لـ :focus | مهم جدًا للمستخدمين اللي بيستخدمون Keyboard فقط |
طبق اللي اتعلمته في درس عملي. حاول تبني بطاقة ملف شخصي بسيطة تحتوي على: