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

خاصية display في CSS: block وinline وinline-block وnone وflex

تقرر الخاصية display كيف يشارك العنصر في التخطيط. تعلّم block وinline وinline-block مع صناديق مقيسة جنبًا إلى جنب، والفرق بين display none وvisibility hidden، وأين تقع flex وgrid وflow-root وcontents.

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

ماذا تفعل display

لكل عنصر قيمة display تقرر كيف يُرتَّب في التخطيط. القيم الثلاث التي تقابلها أولًا هي block وinline وinline-block. هذه ثلاثة صناديق متطابقة، لها width وheight وpadding وmargin نفسها، وdisplay وحدها تختلف:

blockinlineinline-block
يبدأ في سطر جديدنعملالا
العرض الافتراضييملأ الحاويةبقدر المحتوىبقدر المحتوى
width وheightتُطبقانتُتجاهلانتُطبقان
الهامش العمودييُطبقيُتجاهليُطبق
الحشو العمودييدفع المحتوىيُطلى، لكنه لا يباعد بين الأسطريدفع المحتوى
عناصر نموذجيةdiv، p، h1، ul، sectionspan، a، strong، embutton، input، img (العناصر المستبدلة تتصرف هكذا)

في المعاينة يقع صندوق block في سطره الخاص بعرض 120px. أما صندوق inline فيتجاهل العرض والارتفاع ويحيط بكلمته فقط، ويبرز حشوه العمودي وحده فوق السطر وتحته من دون أن يزيد ارتفاع السطر. ويبقى صندوق inline-block في سطر النص لكنه يحتفظ بحجمه الكامل.

display: block

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

.menu a {
  display: block;       /* the full row is the link */
  padding: 10px 16px;
}

يمكن ضبط عرض العنصر الكتلي، وmargin: 0 auto توسّطه حين يكون له عرض، كما تعرض صفحة توسيط div.

display: inline-block

inline-block هي الحل الوسط: تنساب في السطر كالكلمة، لكن يمكنك تحديد حجمها. تفيد في الشارات والأزرار والأيقونات داخل النص:

عدة صناديق inline-block في صف واحد تحصل على فجوة صغيرة بينها من المسافات البيضاء في HTML. لصفوف الصناديق، display: flex على الأب هي الأداة الأفضل.

display: none مقابل visibility: hidden

كلاهما يجعل العنصر غير مرئي. الفرق هو هل يحتفظ بمساحته:

display: nonevisibility: hiddenopacity: 0
يشغل مساحةلانعمنعم
يمكن النقر عليهلالانعم
تقرؤه قارئات الشاشةلالانعم
يمكن تحريكه بسلاسةلالانعم

السمة hidden في HTML تفعل ما تفعله display: none عبر ملف أنماط المتصفح، وهذا يعني أن أي قاعدة CSS تضبط display على العنصر (مثلًا .card { display: flex; }) تتجاوزها فيظهر العنصر من جديد. أضف [hidden] { display: none !important; } إن واجهتك هذه المشكلة.

لإخفاء شيء بصريًا مع إبقائه لقارئات الشاشة (تسمية لزر أيقونة مثلًا)، استخدم فئة «مخفي بصريًا» بدل display: none.

display: flex وdisplay: grid

هاتان القيمتان تحوّلان العنصر إلى حاوية تخطيط لأبنائه:

  • ترتّب display: flex الأبناء في صف أو عمود واحد، مع التحكم في المحاذاة والمسافات. راجع flexbox.
  • تضع display: grid الأبناء على صفوف وأعمدة في الوقت نفسه.

تبقى الحاوية نفسها block. وتفعل inline-flex وinline-grid الشيء نفسه للأبناء لكن تجعل الحاوية تنساب سطريًا، مثل inline-block.

القيم الأخرى

القيمةماذا تفعل
flow-rootعنصر كتلي يحتوي عناصره العائمة ويمنع تسرب هوامش الأبناء إلى الخارج؛ هو «clearfix» الحديث
contentsيختفي صندوق العنصر نفسه ويتصرف أبناؤه كأبناء لأبيه. تجنبها على الأزرار والقوائم والجداول: بعض المتصفحات تُسقط معنى العنصر لقارئات الشاشة
list-itemعنصر كتلي مع علامة قائمة، وهي القيمة الافتراضية لـ li
table، table-row، table-cellتخطيط الجداول على عناصر ليست جداول
inline-flex، inline-gridحاوية flex أو grid تقع سطريًا

أخطاء شائعة

  • ضبط width أو height على span أو a. العناصر السطرية تتجاهلهما. استخدم inline-block أو block.
  • هامش عمودي على عنصر سطري. يُتجاهل أيضًا. والحل نفسه.
  • استخدام display: none لإخفاء نص مخصص لقارئات الشاشة. تخفيه عنها أيضًا.
  • توقع ظهور ابن داخل أب عليه display: none. لا يُعرض شيء داخل أب مخفي.
  • قاعدة display تتجاوز السمة hidden. قاعدة CSS هي التي تفوز.
  • محاولة تحريك display. ضبط display: none يخفي العنصر فورًا، بلا تلاشٍ؛ حرّك opacity وبدّل display (أو visibility) في النهاية.

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

ما الفرق بين block وinline وinline-block؟

العنصر block يبدأ في سطر جديد ويملأ العرض المتاح. والعنصر inline ينساب داخل النص ويتجاهل width وheight والهوامش العمودية. أما inline-block فينساب داخل النص مثل inline لكنه يقبل العرض والارتفاع والحشو والهوامش مثل block.

ماذا تفعل display: none؟

تزيل العنصر من الصفحة تمامًا: لا يشغل مساحة، ولا يُعرض، ويُخفى عن قارئات الشاشة. يُخفى أبناؤه معه ولا يمكن إظهارهم بقيمة display خاصة بهم.

ما الفرق بين display: none وvisibility: hidden؟

تزيل display: none العنصر ومساحته. أما visibility: hidden فتجعله غير مرئي لكنها تحفظ مساحته في التخطيط، فلا يتحرك شيء.

هل div عنصر block أم inline افتراضيًا؟

block. العناصر div وp والعناوين وul وsection وform من نوع block افتراضيًا؛ أما span وa وstrong وem وimg وinput وbutton فمن نوع inline أو inline-block.

لماذا توجد فجوة بين عناصر inline-block؟

المسافات البيضاء بين الوسوم في HTML تُعرض كمسافة، تمامًا كما بين الكلمات. استخدم display: flex مع gap على الأب بدلًا من ذلك، أو احذف المسافات البيضاء.

Coddy programming languages illustration

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

ابدأ الآن