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

خاصية overflow في CSS: hidden وscroll وauto وclip وellipsis

تقرر overflow ما يحدث للمحتوى الذي لا يتسع في صندوقه: عرضه، أو قصّه، أو إضافة أشرطة تمرير. تعلّم visible وhidden وscroll وauto وclip، وoverflow-x وoverflow-y، وعلامة الحذف للنص، والآثار الجانبية لـ overflow على التخطيط.

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

ماذا تفعل overflow

حين يكون المحتوى أكبر من صندوقه (ارتفاع ثابت، كلمة طويلة، جدول عريض)، فإنه يفيض. تقرر الخاصية overflow ما يحدث للجزء الزائد:

القيمةما تراهحاوية تمرير
visible (الافتراضي)يفيض المحتوى خارج الصندوق ويتداخل مع ما يليهلا
hiddenيُقص عند حافة الحشو، بلا أشرطة تمرير (ما زال السكربت يستطيع تمريره)نعم
clipيُقص، ولا تمرير على الإطلاق، حتى بالسكربتلا
scrollيُظهر أشرطة التمرير دائمًا، حتى لو اتسع المحتوىنعم
autoأشرطة التمرير فقط حين لا يتسع المحتوىنعم

على macOS والهواتف تطفو أشرطة التمرير فوق المحتوى وتتلاشى، فقد تبدو scroll وauto متطابقتين حتى تبدأ بالتمرير.

صنع صندوق قابل للتمرير

لا يفيض الصندوق إلا إذا حدّ شيء من حجمه. height أو max-height، مع overflow-y: auto، يحوّلان قائمة طويلة إلى لوحة قابلة للتمرير:

max-height أفضل من height هنا: القائمة القصيرة تبقى قصيرة، والطويلة وحدها تتمرر. المنطقة القابلة للتمرير التي ليس بداخلها محتوى قابل للتركيز يجب أن تأخذ tabindex="0" كي يتمكن مستخدمو لوحة المفاتيح من تمريرها أيضًا.

overflow-x وoverflow-y

يمكن ضبط المحورين بشكل منفصل. الاستخدام الشائع جدول عريض يتمرر جانبيًا داخل حاويته بدل توسيع الصفحة كلها:

قاعدة واحدة يجب تذكرها: إذا كان أحد المحورين hidden أو scroll أو auto، تصبح القيمة visible على المحور الآخر auto. لذلك قد تعطيك overflow-x: hidden وحدها شريط تمرير عموديًا غير متوقع. أما overflow-x: clip فليس لها هذا الأثر:

.a { overflow-x: hidden; }  /* overflow-y computes to auto */
.b { overflow-x: clip; }    /* overflow-y stays visible */

قص النص مع علامة حذف

تستبدل text-overflow: ellipsis نهاية السطر المقصوصة بـ «…». تحتاج إلى ثلاثة أمور معًا: عرض محدود، ونص لا يمكنه الالتفاف، وفائض مخفي:

قص الأسطر ذو البادئة -webkit- يعمل في Chrome وFirefox وSafari. وقارئات الشاشة ما زالت تقرأ النص كاملًا، فلا تضيع الكلمات المقصوصة عليها.

الآثار الجانبية لـ overflow

ضبط overflow على أي قيمة غير visible أو clip يغيّر أكثر من القص:

  • يحتوي العناصر العائمة وهوامش الأبناء. يشكّل العنصر سياق تنسيق كتلي جديدًا، فيكبر ليحيط بأبنائه العائمين. وتفعل display: flow-root الشيء نفسه من دون قص أي شيء.
  • يُفسد position: sticky تحته. الابن اللاصق يلتصق بأقرب حاوية تمرير؛ وإن لم تكن تلك الحاوية تتمرر، لا يلتصق شيء.
  • يقص الأبناء ذوي الموضع المطلق (حين يكون العنصر الفائض كتلتهم الحاوية أيضًا)، بما فيها القوائم المنسدلة والتلميحات، ويقص ظلال الصناديق للأبناء أيضًا.

إخفاء شريط التمرير

يمكنك إبقاء الصندوق قابلًا للتمرير مع إخفاء شريطه عبر scrollbar-width: none. استخدم ذلك باعتدال: من دون شريط تمرير لا يدرك كثير من القراء أن هناك محتوى إضافيًا. وتؤدي scrollbar-gutter: stable المهمة المعاكسة: تحجز مساحة شريط التمرير كي لا يتحرك المحتوى حين يظهر الشريط.

أخطاء شائعة

  • توقع الفيض من دون حد للحجم. الصندوق الذي بلا height أو max-height يكبر بدل أن يفيض.
  • overflow: hidden على body «لإصلاح» التمرير الأفقي. ابحث بدلًا من ذلك عن العنصر العريض جدًا (غالبًا width ثابتة، أو رابط URL طويل، أو 100vw مع شريط تمرير).
  • علامة الحذف من دون white-space: nowrap. يلتف النص، فلا يفيض شيء أفقيًا ولا تظهر علامة الحذف.
  • overflow-x: hidden تنشئ شريط تمرير عموديًا. استخدم clip.
  • قائمة منسدلة تقصّها بطاقتها. تقصّها overflow: hidden الخاصة بالبطاقة؛ انقل قاعدة overflow أو اعرض القائمة خارج البطاقة.

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

ماذا تفعل overflow: hidden؟

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

ما الفرق بين overflow auto وscroll؟

تحجز scroll أشرطة التمرير دائمًا، حتى حين يتسع المحتوى. أما auto فتُظهر شريط التمرير فقط حين يكون المحتوى أكبر من الصندوق، وهذا ما تريده عادةً.

كيف أجعل div قابلًا للتمرير؟

حدد حجمه واسمح بالتمرير: max-height: 300px; overflow-y: auto;. من دون حد للارتفاع أو max-height، يكبر الـ div مع محتواه ولا يفيض أبدًا.

لماذا تضيف overflow-x: hidden شريط تمرير عموديًا أيضًا؟

إذا كان أحد المحورين hidden أو scroll أو auto، تُحسب القيمة visible على المحور الآخر على أنها auto. استخدم overflow-x: clip بدلًا من ذلك، فهي لا تنشئ حاوية تمرير وتترك المحور الآخر ظاهرًا.

كيف أضيف علامة حذف (...) للنص الفائض؟

لسطر واحد: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; على عنصر محدود العرض. ولعدة أسطر استخدم display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.

Coddy programming languages illustration

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

ابدأ الآن