overflow في CSS: التحكم في المحتوى الزائد
أعطيت صندوقاً ارتفاعاً ثابتاً، ثم كتبت فيه نصاً طويلاً. أين يذهب النص الزائد؟ يخرج من الصندوق ويغطي ما تحته، وتبدو الصفحة مكسورة. هذه المشكلة تسمى الفيضان (Overflow)، وكل مطور ويب يقابلها مراراً. في هذا الدرس ستتعلم كيف تتحكم فيها بالخاصية overflow.
متى يحدث الفيضان؟
Section titled “متى يحدث الفيضان؟”الأصل أن الصندوق يتمدد ليسع محتواه، ولهذا لا ترى المشكلة عادةً. لكن الفيضان يحدث عندما تقيّد الصندوق:
- أعطيته
heightثابتاً والنص أطول منه. - أعطيته
widthثابتاً وبداخله كلمة طويلة جداً أو صورة عريضة.
تخيّل كوب ماء: إذا سكبت فيه أكثر من حجمه فاض الماء على الطاولة. الخاصية overflow تحدد ماذا تفعل بالماء الزائد.
القيم الأربع
Section titled “القيم الأربع”| القيمة | ماذا يحدث للمحتوى الزائد؟ |
|---|---|
visible |
يخرج من الصندوق ويظهر فوق ما حوله. وهي القيمة الافتراضية |
hidden |
يُقص ويختفي، ولا يمكن الوصول إليه |
scroll |
يُقص، ويظهر شريط تمرير دائماً، حتى لو لم تكن له حاجة |
auto |
يُقص، ويظهر شريط التمرير عند الحاجة فقط |
.terms { height: 150px; overflow: auto;}هذا صندوق شروط الاستخدام المعروف: ارتفاعه ثابت، ونصه الطويل يُقرأ بالتمرير داخله.
والقاعدة العملية: عندما تريد تمريراً فاختر auto، لأن scroll تعرض أشرطة فارغة لا حاجة لها.
اتجاه واحد: overflow-x و overflow-y
Section titled “اتجاه واحد: overflow-x و overflow-y”تستطيع أن تتحكم في كل اتجاه وحده:
overflow-x: الاتجاه الأفقي.overflow-y: الاتجاه الرأسي.
وأهم استخدام لذلك الجداول العريضة على الموبايل. الجدول الذي فيه ستة أعمدة لا تسعه شاشة هاتف، فتضعه في حاوية تمرر أفقياً:
.table-wrapper { overflow-x: auto;}<div class="table-wrapper"> <table>...</table></div>الجدول يُمرَّر داخل حاويته، وباقي الصفحة يبقى ثابتاً في مكانه.
قص النص بثلاث نقاط
Section titled “قص النص بثلاث نقاط”عنوان طويل في بطاقة صغيرة؟ الحل المعروف أن تقصه وتضع في آخره ثلاث نقاط. وهذا يحتاج ثلاث خصائص معاً:
.title { white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}white-space: nowrap: تمنع النص من النزول إلى سطر جديد.overflow: hidden: تقص ما خرج عن الصندوق.text-overflow: ellipsis: تضع النقاط الثلاث عند موضع القص.
إذا نقصت واحدة منها لم تظهر النقاط.
الكلمات الطويلة جداً
Section titled “الكلمات الطويلة جداً”رابط طويل أو كلمة بلا مسافات قد تخرج من صندوقها وتسبب تمريراً أفقياً للصفحة كلها. الحل:
.comment { overflow-wrap: anywhere;}هذه الخاصية تسمح للمتصفح بكسر الكلمة الطويلة في أي موضع إذا لم يجد حلاً آخر.
قص الزوايا الدائرية
Section titled “قص الزوايا الدائرية”overflow: hidden لها استخدام جمالي شهير. إذا أعطيت بطاقة زوايا دائرية ووضعت فيها صورة، فزوايا الصورة الحادة تخرج من الزوايا الدائرية. القص يحل المشكلة:
.card { border-radius: 16px; overflow: hidden;}الآن كل ما بداخل البطاقة يُقص على شكل زواياها.
التمرير الأفقي غير المقصود
Section titled “التمرير الأفقي غير المقصود”أكثر مشكلة مزعجة على الموبايل: الصفحة تتحرك يميناً ويساراً بلا سبب ظاهر. السبب دائماً عنصر واحد أعرض من الشاشة. وأشهر المتهمين:
- صورة بلا
max-width: 100%. - عنصر عرضه ثابت بالبكسل، مثل
width: 500px. - كلمة طويلة أو رابط طويل.
- عنصر عرضه
100vw.
جرّب بنفسك
Section titled “جرّب بنفسك”غيّر قيمة overflow في الكلاس box إلى visible ثم hidden ثم scroll، وراقب الفرق. ثم احذف أحد الأسطر الثلاثة من الكلاس title وشاهد ما يحدث للنقاط:
الناتج
أخطاء شائعة
Section titled “أخطاء شائعة”- ارتفاع ثابت لصندوق فيه نص: النص يتغير طوله مع حجم الشاشة واللغة. استخدم
min-heightليتمدد الصندوق عند الحاجة. - overflow: hidden تخفي محتوى مهماً: الزائر لا يملك أي طريقة للوصول إلى ما قُص. إذا كان المحتوى مهماً فاستخدم
auto. - نقاط القص لا تظهر: نسيت
white-space: nowrapأوoverflow: hidden، أو أن العنصرinlineبلا عرض محدد. - علاج التمرير الأفقي بالإخفاء: السبب الحقيقي يبقى، ويظهر في مكان آخر.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما الفرق بين overflow: scroll و overflow: auto؟
auto تُظهر شريط التمرير فقط عندما يزيد المحتوى على الصندوق، ولذلك هي الاختيار الأفضل غالباً.
سؤال
أي خاصية من الثلاث تمنع النص من النزول إلى سطر جديد عند القص بثلاث نقاط؟
white-space: nowrap تُبقي النص في سطر واحد، ثم تقصه overflow: hidden، ثم تضيف text-overflow: ellipsis النقاط.
الخلاصة
Section titled “الخلاصة”- الفيضان يحدث عندما يكون المحتوى أكبر من صندوق مقيّد العرض أو الارتفاع.
overflowلها أربع قيم:visibleوhiddenوscrollوauto.overflow-x: autoعلى حاوية الجدول يحل مشكلة الجداول العريضة.- قص النص بنقاط يحتاج
nowrapوhiddenوellipsisمعاً. - التمرير الأفقي غير المقصود سببه عنصر أعرض من الشاشة: أصلحه ولا تخفه.