انتقل إلى محتوى الدرس
الدرس 148
دورة لغة CSS

العدادات التلقائية في لغة CSSCSS Counters

أتقن الترقيم التلقائي بالعدادات في لغة CSS لترتيب عناوين المقالات ومؤشرات الخطوات المتتابعة والفهارس الهرمية المتداخلة تلقائياً عبر أوراق الأنماط دون تعديل الأرقام يدوياً أو كتابة نصوص برمجية.
أقسام الدرس
6
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

كتابة الأرقام يدوياً داخل العناوين مثل كتابة Section 1 ثم Section 2 في ملف HTML تتحول إلى عبء مرهق فور إدراج قسم جديد في المنتصف أو إعادة ترتيب الفقرات. وهنا تبرز العدادات التلقائية في CSS بوصفها متغيرات رقمية صحيحة يديرها محرك الأنماط مباشرة، فتزيد تلقائياً بحسب تسلسل ظهور العناصر في المستند.

تعمل أي دورة ترقيم بثلاث خطوات مترابطة: تهيئة عداد مسمى على الحاوية الأب عبر counter-reset، ثم زيادة قيمته عند كل عنصر مستهدف عبر counter-increment، وأخيراً إخراج الرقم منسقاً داخل ::before أو ::after باستخدام دالة counter() أو counters().

مخطط من ثلاث مراحل يوضح تهيئة counter-reset على الحاوية وزيادة counter-increment ثم إخراج الرقم عبر counter

تنشئ خاصية counter-reset نطاق عداد جديد على العنصر وتضبط قيمته الابتدائية على الصفر 0 افتراضياً عند عدم تحديد رقم. فعلى سبيل المثال تبدأ القاعدة counter-reset: section من الصفر، بينما تبدأ القاعدة counter-reset: section 4 من الرقم 4 ليحمل أول عنوان تالٍ الرقم 5.

ويمكنك كذلك تهيئة عدة عدادات مستقلة في تصريح واحد تفصل بينها مسافات دون فواصل مثل counter-reset: chapter 0 figure 0 على الحاوية نفسها.

كلما صادف المتصفح عنصراً يطابق counter-increment: section فإنه يضيف 1 افتراضياً إلى أقرب نطاق نشط للعداد section. ويمكنك تمرير أي خطوة موجبة أو سالبة؛ فالقيمة counter-increment: score 10 تعد بالعشرات، بينما يتيح الجمع بين counter-reset: countdown 4 على الأب وcounter-increment: countdown -1 على الأبناء بناء عد تنازلي أنيق 3, 2, 1.

انتبه كذلك لتأثير حالات الإخفاء: فالعنصر المخفي عبر display: none لا ينشئ صندوقاً في التخطيط ولذلك لا يهيئ العداد ولا يزيده، بينما يظل العنصر ذو visibility: hidden حاضراً في التخطيط فيزيد العداد كالمعتاد.

CSS
.guide { counter-reset: sec; }
.guide-h2 { counter-increment: sec; counter-reset: sub; }
.guide-h2::before { content: counter(sec) ". "; }
.guide-h3 { counter-increment: sub; }
.guide-h3::before {
  content: counter(sec) "." counter(sub) " ";
}

تُخرج دالة counter() القيمة الحالية للعداد كنص داخل خاصية content. وتستخدم الدالة الأرقام القياسية decimal افتراضياً، لكن يمكنك تمرير معامل ثانٍ اختياري لتحديد نمط الترقيم مثل counter(step, decimal-leading-zero) لإظهار صفر بادئ 01, 02, 03، أو counter(part, upper-roman) للأرقام اللاتينية، أو counter(opt, upper-alpha) للحروف الأبجدية الكبيرة A, B, C.

ويمكن دمج كلمات ثابتة قبل الدالة أو بعدها في السطر نفسه مثل content: "Step " counter(step, decimal-leading-zero) " - " لإنتاج تسميات أنيقة ومتسقة.

مختبر العدادات التلقائية التفاعلي

عند بناء فهارس الكتب أو العقود القانونية أو الوثائق التقنية المتفرعة إلى عدة مستويات، يصبح ابتكار اسم عداد منفصل لكل مستوى أمراً مرهقاً وغير مرن. ولهذا توفر اللغة دالة الجمع counters()؛ فعندما تعيد كل قائمة متداخلة <ol> تهيئة العداد بالاسم نفسه counter-reset: item ينشئ المتصفح نسخة فرعية متداخلة دون مسح قيمة المستوى الأعلى.

وعند استدعاء counters(item, ".") تجمع الدالة جميع القيم النشطة للعداد من المستوى الخارجي حتى الداخلي مفصولة بالنقطة، فتنتج تلقائياً 1 ثم 1.1 ثم 1.2.1 مهما بلغ عمق التداخل.

CSS
.toc {
  list-style: none;
  counter-reset: item;
}
.toc-entry { counter-increment: item; }
.toc-entry::before {
  content: counters(item, ".") " ";
  font-weight: 700;
}

من أبرز التطبيقات العملية للعدادات في واجهات الويب تصميم شريط خطوات التسجيل أو إتمام الطلب. فعند دمج تخطيط الصندوق المرن على قائمة مرتبة مع counter-reset: step وتنسيق .step::before كشارة دائرية متوسطة، يؤدي إدراج خطوة جديدة أو حذف خطوة إلى تحديث جميع الأرقام تلقائياً في الواجهتين العربية والإنجليزية معاً.

CSS
.stepper { display: flex; gap: 12px; counter-reset: step; }
.step { counter-increment: step; }
.step::before {
  content: counter(step);
  width: 28px;
  height: 28px;
  border-radius: 50%;
}
الأداةمثال الصياغةموضع التطبيقالوظيفة الأساسية
counter-resetcounter-reset: step 0الحاوية الأبإنشاء نطاق العداد وضبط قيمته الابتدائية
counter-incrementcounter-increment: step 1العنصر المتكررزيادة قيمة العداد أو إنقاصها عند كل عنصر
counter()counter(step, decimal)::before أو ::afterإخراج قيمة عداد أحادي المستوى وتنسيقه
counters()counters(item, ".")عناصر القوائم المتداخلةدمج مستويات التداخل الهرمية مثل 1.2.1
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

في ملخص الدرس أتقنت تهيئة نطاقات الترقيم عبر counter-reset، والتحكم في خطوة الزيادة أو العد التنازلي عبر counter-increment، وتنسيق الأرقام بدالة counter()، وبناء الفهارس الهرمية المتداخلة بدالة counters(). وتتمثل الخطوة التالية في الانتقال إلى درس القوائم المنسدلة في لغة CSS لبناء قوائم تنقل احترافية تدعم الفأرة ولوحة المفاتيح معاً.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Counter Scope Initialization تهيئة نطاق العداد
إنشاء عداد رقمي مسمى على العنصر الأب عبر خاصية counter-reset بقيمة ابتدائية تساوي الصفر افتراضياً.
للمراجعة
02 Counter Step Advancement خطوة زيادة العداد
إضافة عدد صحيح موجب أو سالب إلى العداد النشط في كل مرة يطابق فيها المحدد عنصراً مستهدفاً.
للمراجعة
03 Hierarchical Counter Joining دمج الترقيم المتداخل
ربط جميع النسخ المتداخلة النشطة لعداد يحمل الاسم نفسه باستخدام دالة الجمع counters مع فاصل نصي كالنقطة.
للمراجعة
04 Decimal Leading Zero نمط الصفر البادئ
نمط تنسيق رقمي يمرر لدالة العداد ليضيف صفراً على يسار الأرقام المفردة فتظهر بصورة 01 حتى 09.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 TOC TOC
Table of Contents
فهرس محتويات متعدد المستويات يُرقم تلقائياً عبر القوائم المتداخلة ودالة counters في أوراق الأنماط.
للمراجعة
02 RTL RTL
Right-to-Left
اتجاه التخطيط من اليمين إلى اليسار في الواجهات العربية حيث تنعكس أشرطة الخطوات المرقمة تلقائياً.
للمراجعة
03 UI UI
User Interface
عناصر واجهة المستخدم مثل أشرطة مراحل التسجيل التي تحافظ على تسلسل أرقامها تلقائياً عبر العدادات.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. هيئ عداد sec على المقالة وزده مع تصفير sub عند كل h2 ثم اعرض ترقيماً بصيغة 1.1 أمام العناوين الفرعية h3::before.

  2. نسق قوائم ol متداخلة بخاصية counter-reset: item واستخدم دالة الجمع counters بفاصل نقطي لإظهار ترقيم 1.2.1 تلقائياً.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

أين يجب وضع خاصية counter-reset عند الرغبة في ترقيم جميع عناوين h2 داخل مقالة؟

02

ما القيمة الابتدائية الافتراضية لخاصية counter-reset عند عدم كتابة رقم بجانب اسم العداد؟

03

ماذا يحدث إذا وضعت counter-reset: sec مع counter-increment: sec على عنصر h2 نفسه؟

04

أي دالة في CSS تخرج تلقائياً ترقيماً هرمياً مثل 1.2.1 عبر القوائم المتداخلة؟

05

كيف يؤثر إخفاء عنصر بخاصية display: none في قيمة عداد CSS النشط؟

06

أي كلمة مفتاحية لتنسيق العداد تعرض الأرقام المفردة بصورة 01 و02 و03؟

07

تمرير عدد صحيح سالب مثل counter-increment: step -1 يسمح لعداد CSS بالعد التنازلي.

08

تصلح عدادات CSS في المتصفح لأن تحل محل تسلسل قاعدة البيانات في الخادم لأرقام الفواتير الرسمية.