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

تضمين الخطوط المخصصة في لغة CSSCSS Web Fonts

تعلّم استضافة الخطوط المخصصة محلياً عبر قاعدة @font-face بصيغة WOFF2، وربط الأوزان المتغيرة ومنع اختفاء النص بخاصية swap مع الحفاظ على خصوصية الزوار.
أقسام الدرس
7
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
2
محتوى الدرس
في هذا الدرس 7تصفّح المواضيع

في جوهرها، تعتمد جميع منصات الخطوط السحابية خلف الكواليس على قاعدة أصيلة في لغة CSS يمكنك كتابتها بنفسك مباشرةً، وهي قاعدة @font-face. تتيح لك هذه القاعدة وضع ملفات الخطوط داخل مجلدات مشروعك المحلي (مثل المجلد /fonts/) وتعريفها للمتصفح دون الاعتماد على أي خادم خارجي.

تتم عملية تضمين الخط المخصص عبر خطوتين متكاملتين — أولاً تكتب كتلة @font-face في مطلع ملف الأنماط لتمنح العائلة اسماً من اختيارك عبر font-family وتربطها بمسار الملف في الواصف src باستخدام دالة url() ودالة format("woff2")؛ وثانياً تستدعي هذا الاسم مع عائلة احتياطية داخل محددات الصفحة مثل body و h1.

مخطط خطوات تضمين الخطوط المحلية بقاعدة @font-face بدءاً من ربط ملف WOFF2 المحلي وضبط الأوزان وخاصية swap وصولاً إلى العرض الآمن
CSS
@font-face {
  font-family: "BrandCairo";
  src: url("fonts/cairo-400.woff2")
    format("woff2");
  font-display: swap;
}
body {
  font-family: "BrandCairo", sans-serif;
}

تستخدم أنظمة التشغيل المكتبية عادةً ملفات خطوط غير مضغوطة بصيغتي TTF و OTF، وهي أحجام ثقيلة تبطئ فتح صفحات الويب. لذلك أصبحت صيغة WOFF2 المعيار القياسي الأول للويب الحديث؛ إذ تدمج خوارزمية ضغط Brotli المتطورة داخل بنية الخط نفسه، مما يقلص حجم الملف بنحو 30% مقارنةً بالجيل الأول WOFF وبأكثر من النصف مقارنةً بملفات سطح المكتب الخام.

وعند كتابة الدالة format("woff2") مباشرةً بعد url()، فإنك تُخبر المتصفح مسبقاً بنوع الملف الرقمي ليتحقق من دعمه الصريح قبل الشروع في تنزيله.

صيغة ملف الخطتقنية الضغط الداخليحجم الملف النسبيوضعها في الويب الحديث
WOFF2ضغط Brotli مدمج ومعالجة للجداولالأصغر حجماً والأسرع تنزيلاًالمعيار الأساسي الكافي لجميع المتصفحات الحديثة
WOFFضغط zlib التقليدي الأقدمأكبر بنحو 30% من WOFF2بديل تاريخي نادر الحاجة اليوم
TTF / OTFملفات مكتبية خام غير مضغوطةكبير وثقيل على الشبكةمخصص لتثبيت النظام المحلي وليس للويب

إذا عرّفت ملف الخط العادي ذي الوزن 400 وحده تحت الاسم "BrandCairo"، ثم طلبت لعنوان h1 سماكة عريضة font-weight: 700;، فلن يجد المتصفح رسماً حقيقياً للحروف العريضة؛ فيلجأ إلى التسميك الصناعي (Faux Bold) عبر نفخ حدود الحرف آلياً. يؤدي هذا التسميك المصطنع في الحروف العربية المتصلة إلى طمس فتحات الحروف وتلاصق النقاط وتشوه جماليات الكلمة.

لمنع هذا التشوه، اربط كل ملف وزن حقيقي بكتلة @font-face مستقلة تحمل اسم font-family ذاته تماماً، مع تحديد الواصف font-weight: 400; للملف العادي و font-weight: 700; للملف العريض ليختار المتصفح الملف الأصيل تلقائياً:

CSS
@font-face {
  font-family: "BrandCairo";
  src: url("fonts/cairo-400.woff2")
    format("woff2");
  font-weight: 400;
}
@font-face {
  font-family: "BrandCairo";
  src: url("fonts/cairo-700.woff2")
    format("woff2");
  font-weight: 700;
}

تقدّم تقنية الخطوط المتغيرة (Variable Fonts) حلاً هندسياً أكثر كفاءة؛ فبدلاً من رفع أربعة أو خمسة ملفات منفصلة للأوزان الثابتة، يجمع ملف .woff2 متغير واحد كامل طيف السماكات بسلاسة متصلة. يقلل هذا النهج عدد طلبات الشبكة إلى ملف وحيد، ويمنحك حرية استخدام أوزان وسطية دقيقة مثل 450 أو 650 أو 750.

لتعريف مدى الأوزان داخل قاعدة @font-face، اكتب الحد الأدنى متبوعاً بمسافة ثم الحد الأعلى على الصورة font-weight: 100 900; دون وضع شرطة بين الرقمين:

CSS
@font-face {
  font-family: "CairoVar";
  src: url("fonts/cairo-var.woff2")
    format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
h1 {
  font: 750 26px/1.3 "CairoVar",
    sans-serif;
}

عند تحميل خط مخصص عبر شبكة هاتف بطيئة دون تحديد سلوك العرض، قد تُخفي المتصفحات النصوص تماماً لعدة ثوانٍ بانتظار وصول ملف الخط — وهي ظاهرة مزعجة تُعرف بوميض النص المخفي (FOIT). يعالج الواصف font-display: swap; داخل كتلة @font-face هذه المشكلة جذرياً؛ إذ يعرض النص فوراً بالخط الاحتياطي المحلي منذ اللحظة الأولى ثم يستبدله بالخط المخصص فور اكتمال تنزيله.

قارن بين الإعدادات الثلاثة عملياً في المختبر التفاعلي التالي:

تمنحك استضافة ملفات .woff2 محلياً داخل مجلدات مشروعك نفسه (مثل المسار /fonts/cairo-var.woff2) ثلاث مزايا جوهرية تتفوق بها على استدعاء الخطوط من خوادم طرف ثالث:

  • حماية كاملة لخصوصية الزوار: تبقى جميع طلبات جلب الخط داخل نطاق موقعك ذاته، فلا يُكشف عنوان IP الخاص بالزائر ولا يُرسل رأس Referer إلى أي شركة خارجية.
  • توفير مصافحات الاتصال الإضافية: بدلاً من فتح اتصالات جديدة بنطاقات خارجية، يحمّل المتصفح ملفات الخط عبر قناة الاتصال نفسها المفتوحة مسبقاً لجلب صفحات موقعك.
  • العمل الموثوق في الشبكات المعزولة: تظهر الخطوط المحلية بكامل أناقتها داخل الشبكات المؤسسية الداخلية وبيئات التطوير المحلية دون أدنى تأثر بانقطاع الإنترنت الخارجي.

لأن وجود العائلة الاحتياطية يُبقي النص مقروءاً حتى لو كان مسار ملف الخط خاطئاً، لا تكتفِ بالنظر السريع إلى الصفحة للتأكد من نجاح قاعدة @font-face، بل تحقّق عملياً عبر خطوتين داخل أدوات المطور DevTools:

  1. فحص تبويب Network مع مرشح Font: أعد تحميل الصفحة وتأكد من ظهور ملف .woff2 المحلي بحالة نجاح 200 وعدم رجوع خطأ مسار مفقود 404.
  2. فحص قسم Rendered Fonts أسفل لوحة Computed: حدد عنصر العنوان أو الفقرة في فاحص العناصر وانتقل إلى نهاية قائمة الأنماط المحسوبة؛ فهناك يذكر المتصفح صراحةً اسم الخط الفعلي المرسوم على الشاشة وعدد الحروف المأخوذة من ملف الشبكة أو من خط النظام البديل.
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

اختتمت بهذا الدرس فصل خطوط CSS بإتقان تعريف الخطوط المحلية عبر @font-face وصيغة WOFF2، وربط الأوزان الحقيقية والمتغيرة 100 900، وتفعيل العرض الفوري عبر font-display: swap; مع حماية الخصوصية وفحص التحميل في DevTools. في الخطوة التالية نفتتح فصلاً جديداً مع درس لون الخلفية في لغة CSS.

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 @font-face At-Rule قاعدة @font-face
قاعدة في لغة CSS تعرّف اسم عائلة خط مخصصة وتربطها بملفات الخطوط وأوزانها وسلوك عرضها.
للمراجعة
02 Faux Bold (Synthetic Bolding) التسميك الصناعي (Faux Bold)
تسميك آلي مصطنع يطبّقه المتصفح على الحروف العادية عند طلب وزن عريض غير مربوط بملف خط حقيقي.
للمراجعة
03 Variable Font الخط المتغير (Variable Font)
ملف خط حديث واحد يضم مدى متصلاً من الأوزان مثل 100 إلى 900 بدلاً من تعدد الملفات الثابتة.
للمراجعة
04 Font Display Swap العرض التبادلي الفوري (swap)
ضبط الواصف font-display على القيمة swap لإظهار النص فوراً بالخط الاحتياطي ريثما يكتمل تنزيل الخط المخصص.
للمراجعة

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

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

الاختصارات3

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

0 / 3 مفهومةأول بطاقة، أول خطوة
01 WOFF2 WOFF2
Web Open Font Format 2.0
الجيل الثاني من صيغة خطوط الويب المفتوحة ويعتمد ضغط Brotli لتوفير أصغر حجم وأعلى سرعة تحميل.
للمراجعة
02 FOIT FOIT
Flash of Invisible Text
اختفاء مؤقت لنصوص الصفحة ريثما ينتهي المتصفح من تنزيل ملف الخط المخصص عبر الشبكة.
للمراجعة
03 FOUT FOUT
Flash of Unstyled Text
ظهور النص مباشرةً بخط النظام الاحتياطي ثم تحوّله إلى الخط المخصص فور اكتمال تنزيله.
للمراجعة

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

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

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

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

0/2مهام منجزة
  1. اكتب قاعدة @font-face باسم "CairoVar" تشير إلى المسار /fonts/cairo-var.woff2 بصيغة woff2 ومدى أوزان 100 900 مع font-display: swap.

  2. افحص عنصر عنوان في لوحة Computed قسم Rendered Fonts وتحقّق من مصدر الخط المرسوم بالتوازي مع مرشح Font في تبويب Network.

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

مساحة التحدي

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

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

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

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

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

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

ما صيغة ملفات الخطوط التي تمثل المعيار الحديث الأفضل للويب بفضل ضغط Brotli المدمج وصغر حجمها؟

02

كيف تمنع تشوه التسميك الصناعي للحروف العربية عند استضافة ملفات خطوط ثابتة الأوزان؟

03

ما الصياغة الصحيحة داخل قاعدة @font-face لتعريف خط متغير يغطي مدى الأوزان من 100 إلى 900؟

04

ما وظيفة الواصف font-display: swap; داخل قاعدة @font-face عند بطء الشبكة؟

05

لماذا تعزز الاستضافة المحلية لملفات WOFF2 داخل مشروعك خصوصية الزوار مقارنةً بخدمات الخطوط الخارجية؟

06

أي قسم في أدوات المطور DevTools يؤكد لك صراحةً اسم ملف الخط الذي رُسمت به حروف العنصر المحدد فعلياً؟

07

مجرّد كتابة كتلة @font-face في أعلى ملف التنسيق يُجبر المتصفح فوراً على تنزيل ملف WOFF2 حتى لو لم يستخدمه أي عنصر في الصفحة.

08

إضافة الدالة format("woff2") داخل الواصف src تتيح للمتصفح التحقق من دعمه للصيغة قبل تنزيل ملف الخط.