قصّ النصّ
Truncation (Ellipsis and Line Clamp)text-overflow: ellipsis
اسمه كماناقتطاع النصّ، تقصير النصّ، النقاط الثلاث، حصر الأسطر، لاين كلامب، إليبسس، ellipsis، line clamp، text overflow، clamped text، shortened label، cut off text
قصّ النصّ هو عرض جزء من نصّ أطول ممّا تتّسع له مساحته، مع علامة تقول إنّ هناك بقيّة: محرف الحذف «…». والنصّ الكامل يبقى في الـ DOM كما هو، لأن القطع يحدث في طبقة العرض وحدها، ولهذا يجده البحث بـ Ctrl+F ويأخذه النسخ كاملاً ويقرأه قارئ الشاشة كاملاً. وله ثلاثة أشكال لكلٍّ منها تقنية مختلفة: قطع من النهاية على سطر واحد بـ text-overflow، وحصر على عدد أسطر بـ line-clamp، وقطع من الوسط يُبقي أوّل الاسم وامتداده معاً، وليس له في CSS خاصّية أصلاً. وهو ليس القطع الصامت (overflow: hidden وحده)، فذاك يشطر الحرف في منتصفه ولا يترك أي علامة، فلا يعرف المستخدم أن شيئاً نقص. وليس مقتطفاً (excerpt) مبنيّاً في الخادم بـ substring، لأن المقتطف يحذف البقيّة من الاستجابة نفسها فلا سبيل إلى استرجاعها في المتصفّح. وليس كتلة «اقرأ المزيد» القابلة للطيّ، فتلك عنصر بحالتين وزرّ يبدّل بينهما، أمّا القصّ فحالة عرض واحدة يجوز أن يُلحق بها زرّ توسيع. والقاعدة التي تحسم استعماله: النصّ المقصوص يجب أن يبقى قابلاً للقراءة كاملاً في مكان ما، وإلّا فأنت تخفي معلومة لا تختصرها.
لو قلت عليه…
العيّنة الحيّة
تفاعل مع الديمو. كل الأجزاء حقيقية ومرقّمة.
المرفقات
يسري هذا العرض حتى ١٢ سبتمبر ٢٠٢٦، ويشمل تصميم الصفحات وتنفيذها واختبارها على المتصفّحات المذكورة في الملحق. وأي طلب خارج النطاق المتّفق عليه يُسعَّر على حدة بعد موافقة كتابية منك.
تشريح العنصر: كل جزء واسمه
مرّر على أي سطر ليتحدّد مكانه في الديمو فوق.
برومبت البناء
سلوكه في الاتجاه من اليمين لليسار
الجزء ده حصري عندنا.
جهة القطع
ينعكسالقطع يقع عند النهاية المنطقية للسطر، وهي الحافّة اليسرى في العربية، و text-overflow يتكفّل بذلك وحده دون قاعدة إضافية منك. والذي يُفسده هو direction: ltr التي يضعها كثيرون على الحاوية لضبط شكل الأرقام أو أسماء الملفّات: نهاية السطر تنتقل إلى اليمين، فتأكل النقاط أوّل الجملة العربية وتُبقي آخرها. وإذا كانت القيمة قد تأتي بأي اتجاه، ضع dir="auto" أو unicode-bidi: plaintext على العنصر المقصوص نفسه؛ ولا يكفي لفّ القيمة بـ <bdi> هنا لأنه يعزل ترتيبها ولا ينقل النقاط، فالحافّة التي تُقصّ تتبع اتجاه الكتلة.
قناع التلاشي
ينعكسبعض التصاميم تستبدل النقاط بتلاشٍ تدريجي عند الحافّة، وهذا الشكل لا ينعكس من تلقاء نفسه لأن التدرّجات لا تقبل الكلمات المنطقية: في linear-gradient لا يوجد إلّا to right و to left، ولا وجود لـ to inline-end. فالقناع المكتوب to right يبقى على اليمين في العربية بينما القطع يقع على اليسار، فترى تلاشياً فوق نصّ سليم وحرفاً مبتوراً بلا تمويه. اكتب قاعدة صريحة داخل [dir="rtl"] تقلبه إلى to left، وينطبق الأمر نفسه على mask-image. والمساحة المحجوزة للقناع تُكتب padding-inline-end، فـ padding-right ثابتة تترك الفجوة عند الحافّة الخطأ.
القطع من الوسط بالترتيب المنطقي
لا ينعكسسلسلة JavaScript مخزّنة بالترتيب المنطقي دائماً: أوّل عنصر فيها هو أوّل محرف يُقرأ، في العربية كما في الإنجليزية. فابنِ القطع من الوسط على هذا الترتيب مباشرةً، ولا تحاول «تصحيحه» بعكس السلسلة أو بالاعتماد على ما تراه على الشاشة، لأن الترتيب البصري ناتج خوارزمية bidi لحظة الرسم وليس طريقة تخزين النصّ. والفخّ الحقيقي أن موضع الفصل قد يقع داخل عنقود رسومي واحد، فتنفصل الشدّة أو الفتحة عن حرفها وتظهر معلّقة على النقاط؛ قسّم بـ Intl.Segmenter بدقّة grapheme قبل أن تقصّ.
اسم لاتيني داخل سطر عربي
لا ينعكسtext-overflow يحذف ما وقع عند الطرف البصري للسطر بعد أن ترتّبه خوارزمية bidi، والطرف البصري ليس بالضرورة آخر السلسلة منطقياً. ضع اسم ملفّ لاتينياً مثل Q4-report-final.pdf في آخر جملة عربية ودع السطر يفيض: القطع يبدأ من أوّل حروف الاسم، لأن المقطع اللاتيني يُرسم من اليسار إلى اليمين بينما ينتهي السطر عند اليسار، فيبقى الامتداد ظاهراً ويضيع الجزء الذي كان يفرّق بين ملفّ وآخر. لُفّ الاسم في <bdi> فهو يعزله ويحمل dir="auto" معاً، فيُحسب ترتيبه داخل حدوده وتتوقّف علامات الترقيم المجاورة عن الانتقال عبره؛ وإذا كان أوّل الاسم هو المهمّ فاقطع من الوسط في JavaScript ولا تترك الأمر لـ text-overflow.
ارتفاع السطر في فقرة محصورة
لا ينعكسالحصر بـ line-clamp يقصّ كل ما زاد عن ارتفاع مشتقّ من line-height، والحروف العربية تنزل تحت خطّ الأساس أكثر من اللاتينية: ذيول ج و ح و ي والنقاط تحتها. ومع line-height: 1.2 المألوف في الفقرات الإنجليزية يحلق overflow: hidden أسفل السطر الأخير فيبدو النصّ مبتوراً من تحت. ابدأ من line-height: 1.7 أو 1.8 في الفقرة العربية، وتذكّر أن الارتفاع الكلّي يكبر بنفس النسبة، فقد تحتاج سطرين حيث كانت الإنجليزية ثلاثة لتبقى البطاقة بنفس الطول.
أسماؤه في الكود
كل سطر هو كلمة مكتبة واحدة عن نفس الشيء. خد السطر اللي بيكلّم مشروعك.
شوف كمان
آخر تحديث · 2026-08-19