نموذج الصندوق في CSS
مدرج تحت قسم: دروس
يعتبر نموذج الصندوق في CSS أو Box Model من أهم المبادئ الأساسية التي يجب أن يبدأ بها من يريد أن يحترف لغة الأنماط الإنسيابية CSS، ولدى منظمة الويب العالمية مقال مطول في هذا المجال لمن يريد أن يستفيد أكثر. في درسي هذا سأحاول تلخيص أهم هذه المبادئ وبعد انتهائك من هذا الدرس سوف تتعلم الفرق بين عناصر الكتلة وعناصر السرد، وظائف وخصائص كل من padding، margin، border، background.
من أهم المفاهيم التي يجب أن تعرفها وتحفظها عن ظهر غيب هي أن كل عنصر في HTML عبارة عن صندوق، ولكن الاختلاف هو نوعية هذا الصندوق أو العنصر، حسنا للتوضيح أكثر أنظر إلى الصورة التالية:
كما قلت سابقا فإن كل عنصر من عناصر HTML يعتبره المتصفح صندوق، وهذا الصندوق يكون محاطا بخصائص، كالطول، العرض، الإطار، وهكذا …
الفرق بين عناصر الكتلة وعناصر السرد
عناصر الكتلة
عناصر الكتلة أو Block elements هي العناصر التي تأخذ كل المساحة في العرض وتبدأ وتنتهي بسطر جديد، أي أنها تأخذ الحيز الكامل في المكان الموضوعة فيه من ناحية العرض مثل <p> أو <div> وتبدأ بسطر جديد من العناصر السابقة لها وتجبر العناصر اللاحقة بالنزول إلى سطر جديد من دون الحاجة إلى وسم مثل <br> ليفصل بينهم.
هذه العناصر يمكنها أن تحتوي عناصر كتلة أخرى أوعناصر سرد Inline elements، ويمكن التحكم بأبعادها من طول و عرض وهامش وحشو.
عناصر السرد
عناصر السرد أو Inline elements دائما ما تكون متحاذية بين بعضها البعض حتى تكون على نفس السطر مع النص، مثال <a> أو <span> حيث أنها لا تخرج عن النص أو المكان الموضوعة فيه. ولا يمكن التحكم بأبعاد هذه العناصر سواء من ناحية العرض أو الطول لأنها تأخذ أبعاد النص التي تحتويه.
يمكن لعناصر السرد أن تحتوي على عناصر سرد أخرى لكنها لا يمكن أن تحتوي على عناصر كتلة.
“الهدية”
الآن وبعدما عرفت الفرق بين عناصر HTML المختلفة ننتقل إلى الخصائص الأساسية لنموذج الصندوق والتي يمكنك من خلالها التحكم في موضع وشكل كل عنصر من عناصر HTML، سأحاول أن أشرح هذه الخصائص بمثال بسيط، تخيل أنك اشتريت هدية لمن تحب، ألا تريد أن تقدمها في أحلى صورة؟
منع احتكاك الهدية بالعلبة
خاصية padding تهتم بحشو الفراغ بحشو شفاف بين المحتوى والإطار الخارجي للصندوق بسمك محدد بحيث يبتعد المحتوى عن الإطار. ولخاصية padding أربع جهات، فوق، يمين، يسار، وتحت، وهناك طرق مختلفة لكتابة هذه الخاصية في CSS، فمن الممكن كتابة كل على حدى، أو كتابتهم باختصار:
.box-model {
padding-top: 10px;
padding-right: 20px;
padding-bottom: 10px;
padding-left: 20px;
}
الطريقة المختصرة هي كتابة الجهات في سطر واحد بالترتيب التالي: فوق 10px، يمين 20px، تحت 10px، يسار 20px، وللتوضيح أكثر سيكون كتابة المثال السابق كالتالي:
.box-model {
padding: 10px 20px 10px 20px;
}
وهناك أيضا طريقة مختصرة أكثر وهي أن تختصر الأربع جهات في جهتين، ويكون كتابة الطريقة: فوق تحت 10px، يمين يسار 20px، كتابة نفس المثال بهذه الطريقة:
.box-model {
padding: 10px 20px;
}
طريقة الكسالى، اكتب قيمة واحدة ودع الباقي على المتصفح، حيث أن هذه القيمة تحدد جميع الاتجاهات:
.box-model {
/* top = 10px, right = 10px, bottom = 10px, and left = 10px */
padding: 10px;
}
اختر العلبة جيدا
background-color و background-image يهتمان بلون وصورة الخلفية للصندوق، ويمكنك استخدام هاتين الخاصيتين معا، بحيث يكون لون الخلفية خلف الصورة.
.box-model {
background-color: #000;
background-image: url(images/bg.png);
}
الهدية في العلبة
الآن وبعدما انتهينا من حشو المحتوى وإبعاده عن إطار الصندوق، واخترنا لون وصورة للخلفية، تبقى أن نضع اللمسة الأخيرة وهي border أو الإطار للصندوق، حيث أن تطبيق الإطار يكون خارج الحشوة.
.box-model {
border: 3px solid #000;
}
ضعها في مساحة واسعة
أصبح المحتوى جاهزا للتقديم، وتبقى فقط أن نضعه في مساحة واسعة باستخدام margin أو الهامش، حيث تتيح لك هذه الخاصية إبعاد الصندوق كاملا في كل الجهات. وطريقة الكتابة تشبه طريقة كتابة الحشو padding مع اختلاف بسيط وهو السماح بأخذ قيم سالبة negative values.
.box-model {
margin: 8px 12px 7px 5px;
}
تقديم الهدية
مبروك، لقد انتهيت من الهدية ولم يتبقى سوى أن تتمنى أن تعجب هذه الهدية صاحبها، والا فسوف تخرج الهدية عن إطارها ومكانها ومن الممكن جدا أن تنتهي مرمية على نهاية الشارع.
أسوأ الاحتمالات
هناك احتمال قائم كما ذكرت في النقطة السابقة أن “الهدية” أو الصندوق لن يظهر بالصورة المطلوبة في بعض المتصفحات لعدم التزامهم بالمعايير الصحيحة، وللتحديد أكثر، متصفح الآنترنت اكسبلورر 6 وأقل، والموضوع في هذا المجال قد يحتاج إلى مقال آخر ولكن ببساطة لاستخدام نموذج الصندوق بالشكل الصحيح على الآنترنت اكسبلورر 6 عليك بالتعريف الصحيح لنوع المستند أو ما يسمى Document Type Definition في أعلى الصفحة ولكن للأسف انترنت اكسبلورر أقل من 6 سيعرض الصندوق بشكل خاطئ.
التعقيبات
- مشكلة في قالب ورد بريس عند تثبيت الخلفية.. - سوالف سوفت
- أفضل 20 إضافة للمتصفحات لتطوير الويب « ARAB LIBRARIANS
- غير معروف
- نموذج الصندوق في css | تقنيون


ما شاء الله .. شرح وافي وجميل ..
يعطيك العافية أخوي .. كنت محتاس كثير بي الـ padding والـ margin
الآن وضحت الفكرة ..
يعطيك العافية ..
جميل جدا اخي..
الله يعطيك العافية على الشرح الرائع..
تحياتي
ماشاء الله تبارك الله،
موضوع ممتاز اخي عبدالرحمن،
لقد شرحت النقاط والفقرات بشكل ملفت ودقيق ومميز يمكن القارئ من الاستمتاع بالقراءة والحصول على الفائدة المرجوة وكذلك بقاء الفكرة في الاذهان.
اتمنى لك دوام التوفيق والاستمرار.
أوافق ابوخالد الرأي..
بصراحة، لقد أجدت التعبير..
أتى الشرح بطريقة جميلة وسهلة وملفتة للنظر.. جذبني فعلاً وقرأت جزءاً منه ثم عدت لأقرأه من البداية..
حتى ولو كانت المعلومات نعرفها أو لا.. لكن أحببت أن أشيد بطريقة شرحك..
ولي ملاحظة:
- لعل تعريب الأسماء يسبب ارتباك ربما إلى حين قرائتنا للمحتوى، فلا أدري لو كانت بعض الكلمات كما هي بدون تعريب مثل block & inline elements .. ربما يكون أفضل والله أعلم
استفدت من الدرس وفهمته، ننتظر طرحك المميز الجديد
السلام عليكم ورحمة الله وبركاته
جزاك الله خير أخى الكريم على الشرح الممتع
بالتوفيق
جزاك الله خير شرح وافى
فى مصطلح اسمه ال nested elements نرجو منكم بعض التوضيح لهذا المصطلح
مقال رائع جدا ،
ومتميز في طريقة الشرح
لقد اصلح لي بعض المفاهيم الخاطئة
شكرا لك
أشكر جميع الأخوة على هذا الكلام الجميل وأتمنى من الله قد وفقت في توصيل المعلومة بالشكل الصحيح.
أما بالنسبة لسؤال الأخ judge0
< - عنصر أب 2
< - عنصر أب 1
< - العنصر
nested elements أو العناصر المتداخلة هي العناصر التي تكون داخل عناصر أخرى بحيث يتم تكوين شجرة عائلية من العناصر، مثال:
[html]
المحتوى
[/html]
أتمنى أن تكون الصورة قد وضحت، وﻻ تردد إذا كان لديك أي استفسار أو احتجت إلى توضيح أكثر.
السلام عليكم ..
اخي الكريم ..
شكرا لك على الشرح الحلو والمميز ..
اخي الكريم .. هل من الممكن وضع خلفيتين الى div واحد ؟ يعني خلفية بها يمين و يسار .؟
ولماذا يتم وضع # , قبل اسماء الكودات ؟؟
شكرا لك
وعليكم السلام ورحمة الله وبركاته
صادق الدرازي
للأسف غير ممكن وضع صورتين كخلفيتين في div واحدة، على الأقل ليس في CSS 2.1، ولكن هناك مناقشات حول احتمالية وضع هذه الخاصية في CSS 3، في الوقت الحالي أنصحك باستخدام عنصرين div متحاذيين.
أما بالنسبة للسؤال الثاني حول وضع #، فللأخ عبدالله المهيري بعض المقالات في هذا المجال، وسأقتبس منه التعريفات حول هذه النقطة من مقاله [تعلم CSS بسهولة (3)]، وأنصحك بالرجوع إألى المقالات كاملة:
ممكن ما معنى مصطلح liquid layouts انا بحثت عليه ولكن الانجليزية عندى مش قوية فممكن المساعدة
@judge0
في عالم تصميم مواقع الويب هناك عدة أنواع من التصاميم أو المخططات للصفحات، والنوعان المشهوران هما:
رائع
درس رائع كالعاده
تحيتى وتقديرى الشديدين :)
شكرا لك وننتضر المزيد من الدروس التطبيقية
تحياتي
بارك الله فيك أخي الغالي