CSS من الصفر: الألوان والخطوط والصندوق
درس 3 من 8
3CSS من الصفر: الألوان والخطوط والصندوق
الصورة الكبيرةHTML بنى الهيكل، وCSS يقرّر شكله: اللون والخط والمسافات والحدود. نفس ملف HTML يمكن أن يبدو كموقع بنك جاد أو كتطبيق ألعاب ملوّن، والفرق كله في CSS.
ماذا تشاهد في الرسم: كل قاعدة CSS تمرّ بنفس الرحلة: تختار عناصر بمحدّد، تقول أي خاصية تريد تغييرها وإلى أي قيمة، والمتصفح يطبّقها على كل عنصر يطابق.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
لو كان HTML هيكل البيت، فـ CSS هو الدهان والأثاث والإضاءة. تقول لعامل الدهان: «كل الأبواب (محدّد) لونها (خاصية) بني (قيمة)»، و«غرفة النوم بالذات (صنف) جدرانها زرقاء». وحين يأتيه أمران متعارضان يتبع الأدق: «باب غرفة النوم» أدق من «كل الأبواب».
CSS لغة تصريحية من قواعد (rulesets): محدّد ثم كتلة تصريحات خاصية: قيمة;. المتصفح يبني CSSOM ويطابقه مع DOM ليحسب «القيمة المحسوبة» لكل خاصية في كل عنصر. التعارض يحسمه التتالي (cascade): الأصل والأهمية، ثم الطبقات @layer، ثم الخصوصية (specificity) كثلاثية (id، صنف/خاصية/حالة، عنصر)، ثم ترتيب الظهور. بعض الخصائص تُورَّث للأبناء (اللون والخط) وبعضها لا (الحدود والهوامش). نموذج الصندوق: content-box افتراضيًا يضيف الحشوة والإطار فوق width، وborder-box يحتويها داخله. الوحدات: مطلقة (px) ونسبية (rem لحجم خط الجذر، em لحجم خط الأب، %، vw/vh).
قبل أن تبدأ
📄أول صفحة ويب
تكتب صفحة بعناوين وفقرات وقوائم.
🧱HTML الدلالي
تعرف header وnav وmain.
الفكرة الجوهرية
1أين تكتب CSS؟ ثلاثة أماكن، وواحد هو الصحيح
(1) داخل الوسم بخاصية style: سريع لتجربة لكنه يخلط الشكل بالمحتوى. (2) في وسم <style> داخل head: مناسب لصفحة واحدة. (3) في ملف منفصل styles.css تربطه بـ <link>: الطريقة الصحيحة لأي موقع، لأن ملفًا واحدًا يلبس كل الصفحات، والمتصفح يحفظه فلا يحمّله مرتين.
<!-- 1. on the tag (avoid) -->
<p style="color: brown;">نص بني</p>
<!-- 2. in the page's head -->
<style>
p { color: brown; }
</style>
<!-- 3. a separate file (the right way) -->
<link rel="stylesheet" href="styles.css">شكل القاعدة: محدّد يختار العناصر، ثم أقواس معقوفة { }، وفي داخلها سطر لكل خاصية: اسم الخاصية، نقطتان، القيمة، فاصلة منقوطة.
h1 { /* selector: every h1 */
color: #b4532a; /* property: value; */
font-size: 32px;
}2المحدّدات: كيف تختار ما تريد تلوينه
العنصر p يختار كل الفقرات. الصنف .price (بنقطة) يختار كل عنصر عليه class="price"، ويُستخدم لعدة عناصر. المعرّف #total (بشبّاك) يختار العنصر الوحيد الذي id="total". السليل nav a يختار الروابط التي داخل nav فقط. الحالة a:hover حين تمرّ الفأرة، و:focus حين يُركَّز العنصر. وتجمع عدة محدّدات بفاصلة: h1, h2.
ستة محدّدات في صفحة واحدة
غيّر لون .price ولاحظ أن السعرين تغيّرا معًا. ثم مرّر الفأرة على الروابط لترى :hover.
3الألوان والخلفيات
تكتب اللون بأربع طرق: اسم مثل tomato وnavy، أو سداسي #b4532a (أحمر أخضر أزرق بالست عشري)، أو rgb(180 83 42) بأرقام من 0 إلى 255، أو hsl(20 62% 44%) بدرجة اللون ثم التشبّع ثم الإضاءة، وهو الأسهل للتعديل: غيّر الرقم الأخير لتفتح اللون أو تغمّقه. وcolor لون النص وbackground لون الخلفية أو صورتها أو تدرّجها.
ألوان وتدرّج
غيّر الرقم الأول في hsl للخلفية (30) إلى 200 فتصير زرقاء، ثم غيّر 92% إلى 80% لتغمق قليلًا.
4الخطوط والنص والوحدات
font-family نوع الخط مع بدائل إن لم يوجد، وfont-size حجمه، وfont-weight سُمكه (400 عادي، 700 عريض)، وline-height المسافة بين الأسطر (1.6 مريحة للقراءة)، وtext-align المحاذاة. وللخطوط العربية الجميلة استخدم Google Fonts مثل «IBM Plex Sans Arabic» أو «Tajawal».
الوحدات: px بكسل ثابت. rem مضاعف لحجم الخط الأساسي في المتصفح (16 بكسل عادة)، فـ 1.5rem = 24 بكسل، ويكبر إن كبّر المستخدم الخط من إعداداته، لذلك هو الأفضل للنص. % نسبة من الأب. vw نسبة من عرض الشاشة: 50vw نصفها.
الخط والحجم والمسافة بين الأسطر
غيّر line-height في .lead إلى 1 ثم إلى 2.4 وقارن الراحة في القراءة.
5نموذج الصندوق: كل عنصر صندوق
أهم فكرة في CSS كلها: كل عنصر صندوق مستطيل من أربع طبقات، من الداخل للخارج: المحتوى (النص أو الصورة)، ثم الحشوة padding (مسافة بين المحتوى والإطار، تأخذ لون الخلفية)، ثم الإطار border، ثم الهامش margin (مسافة شفافة بين الصندوق وجيرانه).
┌──────────────── margin (شفاف) ────────────────┐ │ ┌──────────── border (الإطار) ────────────┐ │ │ │ ┌──────── padding (الحشوة) ─────────┐ │ │ │ │ │ │ │ │ │ │ │ content (المحتوى) │ │ │ │ │ │ │ │ │ │ │ └───────────────────────────────────┘ │ │ │ └─────────────────────────────────────────┘ │ └───────────────────────────────────────────────┘
العب بالحشوة والإطار والهامش
احذف سطر box-sizing الأول ولاحظ أن الصندوق صار أعرض من 220. ثم غيّر border-radius إلى 50px.
box-sizing: border-box يجعل width يشمل الحشوة والإطار، فـ 220 تعني 220 فعلًا. بدونها، 220 + حشوة 40 + إطار 8 = 268! ضعه على كل العناصر في أول كل ملف CSS تكتبه. والاختصار margin: 10px 20px يعني أعلى وأسفل 10، ويمين ويسار 20.
6من يفوز؟ التتالي والأولوية والوراثة
حين تقول قاعدتان لونين مختلفين لنفس العنصر، المتصفح يحسم بالترتيب: (1) الأخصّ يفوز: المعرّف # أقوى من الصنف .، والصنف أقوى من اسم العنصر. (2) إن تساوتا في الخصوصية، الأخيرة في الملف تفوز. والوراثة: بعض الخصائص تنتقل من الأب لأبنائه مثل color وfont-family، لذلك يكفي أن تضعها على body.
اختبر الأولوية بنفسك
توقّع قبل أن تغيّر: لو حذفت سطر #main-note، ما لون الفقرة الأخيرة؟ احذفه وتأكّد.
!important. بعد أسبوع تحتاج !important أقوى منه ويصير الملف حربًا. خفّض الخصوصية واعتمد على الأصناف، وافتح أدوات المطوّر لترى أي قاعدة شُطبت ولماذا.مثال محلول
المسألة: بطاقة عرضها width: 300px وفيها padding: 24px وborder: 3px، ومع ذلك تخرج عن الحاوية التي عرضها 300. وعنوانها .card h2 { color: brown } لا يتلوّن لأن في الملف #offers h2 { color: black }. التحليل: بلا border-box يصير العرض الحقيقي 300 + 48 + 6 = 354. والمعرّف #offers أخصّ من الصنف .card فيفوز رغم أن قاعدة البطاقة بعده. الحل: border-box للعرض، ونزول بالخصوصية إلى أصناف فقط:
البطاقة بعد الإصلاح
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| CSS مجرد ألوان وليست برمجة حقيقية. | لا متغيرات معقّدة فيها، لكن التتالي والتخطيط والتجاوب مهارة يُوظَّف لها مختصّون. |
| px أدق فاستخدمه لكل شيء. | rem للنص يحترم إعداد المستخدم لحجم الخط، وهذا مهم لضعيف النظر. |
| الألوان بالأسماء أسهل فلا حاجة لغيرها. | الأسماء محدودة؛ hsl يعطيك أي درجة ويسهّل صنع ظلال من لون واحد. |
أين تقابله في العمل
🎨هوية العلامة التجارية
ألوان الشركة وخطوطها تُكتب مرة في CSS وتظهر في كل صفحة.
🌙الوضع الليلي
نفس HTML بألوان مختلفة حسب تفضيل المستخدم.
🧑🎨وظيفة مطوّر واجهات
تحويل تصميم Figma إلى صفحة مطابقة هو CSS بالدرجة الأولى.
اختبر فهمك
أي محدّد يختار كل العناصر التي عليها class="price"؟
النقطة للصنف، والشبّاك للمعرّف، والاسم وحده للعنصر.
صندوق width: 200px وpadding: 10px وborder: 5px بلا border-box. كم عرضه الحقيقي؟
200 + حشوة 10 من كل جهة (20) + إطار 5 من كل جهة (10) = 230.
.note { color: blue } ثم #tip { color: red } على نفس العنصر. ما اللون؟
المعرّف أخصّ من الصنف فيفوز، بغض النظر عن الترتيب.
أي وحدة تكبر إذا كبّر المستخدم الخط من إعدادات متصفحه؟
rem مضاعف لحجم الخط الأساسي الذي يضبطه المستخدم.
أي طبقة من الصندوق تأخذ لون الخلفية؟
الخلفية تمتد تحت المحتوى والحشوة حتى الإطار، والهامش شفاف دائمًا.
بطاقات مراجعة سريعة
تحقق من فهمك
لماذا نضع CSS في ملف منفصل؟
ملف واحد يلبس كل الصفحات، والمتصفح يحفظه فلا يُحمَّل مرتين، والمحتوى يبقى منفصلًا عن الشكل.
ما الفرق بين padding وmargin؟
الحشوة مسافة داخل الإطار تأخذ لون الخلفية، والهامش مسافة شفافة خارج الإطار تفصل الصندوق عن جيرانه.
قاعدتك لا تُطبَّق. كيف تعرف السبب؟
افحص العنصر في أدوات المطوّر: في Styles ترى القاعدة مشطوبة والقاعدة التي غلبتها فوقها.
لماذا يكفي وضع font-family على body؟
لأن الخط خاصية موروثة تنتقل من الأب لكل أبنائه.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
أدوات2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.