الفرق في صورة واحدة
الحشو داخل الحد. الهامش خارجه. للصندوقين أدناه المحتوى نفسه والقيمة نفسها 24px؛ الخاصية وحدها تختلف. الرمادي هو الحاوية التي خلفهما.
مع الحشو تكون الـ 24px زرقاء: فهي جزء من الصندوق، داخل الحد، والصندوق يكبر. ومع الهامش تكون الـ 24px رمادية: يبقى الصندوق ملتصقًا بنصه والمسافة الخارجية تدفع حواف الحاوية بعيدًا.
جرّب الاثنين على صندوق واحد
حرّك المنزلقين. الحشو يكبّر الصندوق الأزرق؛ والهامش يبعد الصندوق عن الحواف الرمادية من دون أن يغيّره.
راقب سطر الحجم: يتغير حين تحرك منزلق الحشو ويبقى كما هو حين تحرك منزلق الهامش.
margin وpadding بنظرة سريعة
| الحشو padding | الهامش margin | |
|---|---|---|
| المكان | داخل الحد | خارج الحد |
| الخلفية | تظهر فيه خلفية العنصر | شفاف دائمًا |
| جزء من مساحة النقر | نعم | لا |
| يضيف إلى حجم العنصر | نعم، مع content-box | لا |
يمكن أن يكون auto | لا | نعم (margin: 0 auto يوسّط) |
| يمكن أن يكون سالبًا | لا | نعم |
| انهيار القيم العمودية | أبدًا | نعم، الهوامش العمودية المتجاورة تنهار |
| النسب المئوية نسبةً إلى | عرض الكتلة الحاوية | عرض الكتلة الحاوية |
| الاستخدام المعتاد | المسافة داخل الأزرار والبطاقات وحقول الإدخال | المسافة بين العناصر، والتوسيط |
لكل خاصية صفحتها بكل التفاصيل: padding في CSS وmargin في CSS.
أيهما تستخدم
اسأل سؤالًا واحدًا: هل المسافة تخص العنصر، أم تقع بين العناصر؟
- المساحة حول تسمية الزر، وداخل البطاقة، والمسافة بين نص حقل الإدخال وحده: الحشو. يأخذ الخلفية ويكبّر الهدف.
- المسافة بين فقرتين، وبين البطاقات، وحول قسم: الهامش، أو
gapحين يكون الأب حاوية flex أو grid.
مساحة النقر هي حيث يهم الاختيار أكثر. الرابطان أدناه يشغلان المساحة نفسها في الصفحة، لكن مسافة الأول حشو ومسافة الثاني هامش. الأول وحده سهل الإصابة:
الإطار الكهرماني المتقطع هو حافة العنصر، وهي المنطقة التي تستجيب للنقرات واللمسات. الهامش حول الرابط الثاني مساحة فارغة لا تفعل شيئًا.
المسافة بين العناصر: margin أم gap
لصف أو شبكة من العناصر، تكون gap على أب flex أو grid عادةً أنظف من الهوامش على كل ابن: فهي تقع بين العناصر فقط، لا قبل الأول ولا بعد الأخير، فلا يوجد ما تحتاج إلى إلغائه.
هنا تستخدم الحاوية الرمادية الحشو (مسافة داخلها، رمادية)، والعناصر تستخدم الحشو (مسافة داخل كل منها، خضراء)، وgap تتولى المسافة بينها.
أخطاء شائعة
- استخدام الهامش لمسافة يجب أن تكون ملونة. الهامش شفاف. إن كانت المسافة يجب أن تُظهر الخلفية فهي حشو.
- استخدام الهامش لتكبير رابط. مساحة النقر تنتهي عند الحد؛ استخدم الحشو.
- توقع أن يصنع هامشان عموديان بـ 20px مسافة 40px. الهوامش العمودية المتجاورة تنهار إلى 20px. الحشو لا ينهار أبدًا.
- محاولة
padding: autoللتوسيط. الهامش وحده يقبلauto. - نسيان أن الحشو يكبّر الصندوق. أضف
box-sizing: border-boxكي تشملهwidth.
الأسئلة الشائعة
ما الفرق بين margin وpadding؟
الحشو padding هو المسافة بين محتوى العنصر وحده، داخل العنصر. والهامش margin هو المسافة خارج الحد، بين العنصر وجيرانه. تظهر في الحشو خلفية العنصر؛ أما الهامش فشفاف دائمًا.
متى أستخدم padding بدل margin؟
استخدم الحشو للمسافة التي تخص العنصر: المساحة حول نص الزر، وداخل البطاقة، وكل ما يجب أن يشارك الخلفية أو يكون قابلًا للنقر. واستخدم الهامش (أو gap في flex وgrid) للمسافة بين العناصر المنفصلة.
هل يزيد padding أم margin حجم العنصر؟
الحشو يزيده، مع القيمة الافتراضية box-sizing: content-box: يُضاف إلى العرض والارتفاع. أما الهامش فلا يُضاف أبدًا إلى حجم العنصر؛ بل يضيف مسافة حوله (والعنصر الكتلي الذي عرضه width: auto يصبح أضيق، لأن هوامشه تأخذ جزءًا من العرض المتاح). ومع box-sizing: border-box يُقتطع الحشو من داخل العرض بدلًا من ذلك.
هل يمكن أن يكون padding سالبًا مثل margin؟
لا. الحشو السالب غير صالح ويُتجاهل، بينما الهوامش السالبة مسموحة وقد تجعل العناصر تتداخل. ولا يمكن أن يكون الحشو auto أيضًا، ولهذا يستخدم التوسيط margin: 0 auto.