Menu
flag Ar iconالعربيةdown icon

خاصية margin في CSS: الاختصار وmargin auto وانهيار الهوامش

الهامش margin هو المسافة الشفافة خارج حد العنصر التي تدفع العناصر الأخرى بعيدًا. تعلّم اختصار margin، والتوسيط بـ margin: 0 auto، والهوامش السالبة، وmargin auto في flexbox، ولماذا تنهار الهوامش العمودية.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

ما هو margin

الهامش margin هو المسافة خارج حد العنصر. شفاف دائمًا، ووظيفته دفع العناصر الأخرى بعيدًا. في المثال تظهر الحاوية الرمادية عبر الهامش المحيط بالصندوق الأزرق:

الشريط الرمادي ليس جزءًا من الصندوق: خلفية الصندوق نفسها تتوقف عند حده. للمسافة التي تأخذ خلفية العنصر استخدم الحشو padding.

اختصار margin

تقبل margin من قيمة إلى أربع قيم، بترتيب عقارب الساعة نفسه الذي في padding:

التصريحالأعلىاليمينالأسفلاليسار
margin: 10px;10101010
margin: 10px 20px;10201020
margin: 10px 20px 30px;10203020
margin: 10px 20px 30px 40px;10203040

لكل جانب أيضًا خاصيته (margin-top وmargin-right وmargin-bottom وmargin-left) ونسخ منطقية تتبع اتجاه النص (margin-inline-start وmargin-inline-end وmargin-block وmargin-inline). في صفحة عربية تكون البداية start هي الجانب الأيمن.

على عكس padding، يقبل margin القيمة auto والقيم السالبة:

القيمةمثالملاحظات
طول16px، 1.5remالأكثر شيوعًا
نسبة مئوية5%من عرض الكتلة الحاوية، للجوانب الأربعة
automargin: 0 autoالمتصفح يملأ المساحة المتبقية
سالبةmargin-top: -10pxتسحب العنصر أو جاره أقرب، وقد يحدث تداخل

التوسيط بـ margin: 0 auto

margin: 0 auto هي الطريقة الكلاسيكية لتوسيط عنصر كتلي أفقيًا. القيمة auto على الجانبين تخبر المتصفح بقسمة المساحة المتبقية بالتساوي. تحتاج إلى عرض أصغر من الحاوية، وإلا فلا يبقى شيء للقسمة:

الهوامش auto لا توسّط عموديًا في التدفق العادي (الهوامش العمودية auto تصبح 0) ولا تفعل شيئًا على العناصر السطرية. لنظرة كاملة على التوسيط راجع كيفية توسيط div.

انهيار الهوامش

حين يتلامس هامشان عموديان لا يُجمعان. يحتفظ المتصفح بالأكبر منهما فقط. هنا للصندوق الأول margin-bottom: 30px وللثاني margin-top: 20px، والفجوة بينهما 30px لا 50px:

الانهيار مقصود: يسمح للفقرات والعناوين بأن تحمل كل منها مسافتها من دون مضاعفتها حيث تلتقي. لكنه يفاجئ الناس في حالة ثانية، حين يفلت الهامش العلوي للابن من أبيه:

في الأب الأول انهار هامش الابن البالغ 30px عبر الحافة العلوية للأب، فدفع الأب كله إلى الأسفل بدل أن ينشئ مسافة رمادية داخله. أي من هذه يوقفه:

  • display: flow-root على الأب (على عكس overflow: hidden، لا يقص شيئًا).
  • حشو أو حد على الحافة العلوية للأب.
  • أب من نوع flex أو grid: هوامش عناصر flex وgrid لا تنهار أبدًا.

الهوامش الأفقية لا تنهار أبدًا، ولا هوامش العناصر العائمة أو ذات الموضع المطلق.

الهوامش السالبة

الهامش السالب يسحب في الاتجاه المعاكس. على الجانب العلوي أو جانب البداية يحرّك العنصر نفسه؛ وعلى الجانب السفلي أو جانب النهاية يسحب العنصر التالي أقرب. قد تتداخل الصناديق:

margin auto في flexbox

داخل حاوية flex، يأخذ الهامش auto كل المساحة الحرة على جانبه. إنها أبسط طريقة لدفع عنصر واحد إلى الطرف البعيد من الصف، وفي flexbox تعمل auto عموديًا أيضًا:

تضع margin-inline-start: auto المساحة الحرة قبل «Log in»، فيقع في نهاية الصف سواء كانت الصفحة من اليسار إلى اليمين أو من اليمين إلى اليسار.

أخطاء شائعة

  • margin: 0 auto على عنصر بلا عرض. العنصر الكتلي يملأ حاويته أصلًا؛ اضبط width أو max-width.
  • margin: auto على عنصر سطري. الهوامش auto على span أو a أو img متروكة سطرية تساوي 0. اجعله display: block.
  • جمع هامشين عموديين وتوقع المجموع. ينهاران إلى الأكبر؛ استخدم gap في flex أو grid، أو اتجاهًا واحدًا للهوامش باستمرار.
  • هامش الابن يدفع أباه. هذا انهيار بين الأب والابن؛ أضف display: flow-root إلى الأب.
  • استخدام الهامش لمسافة يجب أن تكون لها خلفية. الهامش شفاف؛ استخدم الحشو.

الأسئلة الشائعة

ما هو margin في CSS؟

الهامش margin هو المسافة خارج حد العنصر. شفاف ويدفع العناصر المجاورة بعيدًا. يُضبط عبر margin أو خصائص الجانب الواحد margin-top وmargin-right وmargin-bottom وmargin-left.

ماذا يفعل margin: 0 auto؟

يضبط الهامشين العلوي والسفلي على 0 ويقسم المساحة الأفقية المتبقية بالتساوي بين الهامشين الأيسر والأيمن، فيتوسط العنصر الكتلي أفقيًا. يحتاج العنصر إلى عرض أصغر من حاويته، مثلًا max-width: 600px.

لماذا لا يوسّط margin auto العنصر عندي؟

عادةً لأن العنصر بلا عرض (العنصر الكتلي يملأ حاويته، فلا يبقى شيء للقسمة)، أو لأنه سطري (span وa وimg افتراضيًا)، والهوامش auto فيه تساوي 0. أعطه عرضًا وdisplay: block، أو وسّطه من الأب باستخدام flexbox أو grid.

ما هو انهيار الهوامش margin collapsing؟

حين يلتقي هامشان عموديان، مثل الهامش السفلي لفقرة والهامش العلوي للفقرة التالية، يستخدم المتصفح الأكبر منهما فقط بدل جمعهما. يحدث هذا للهوامش العمودية للصناديق الكتلية في التدفق العادي فقط، لا في تخطيطات flex أو grid.

هل يمكن أن يكون margin سالبًا؟

نعم. الهامش السالب يسحب العنصر نحو ذلك الجانب، أو يسحب العنصر التالي فوقه، فقد تتداخل الصناديق. يفيد في تصحيحات المحاذاة الصغيرة وفي جعل عنصر يتجاوز حشو حاويته.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن