الكيرنينغ هو الضبط الانتقائي للمسافة بين أزواج محددة من الأحرف لتحقيق التوازن البصري في النص. على عكس التتبع، الذي يغير المسافة بشكل موحد بين جميع الأحرف، يراعي الكيرنينغ شكل كل زوج من الحروف: A و V و T و o و W و a. بدون الكيرنينغ، تبدو التركيبات ذات العناصر البارزة غير متساوية — تظهر فراغات بصرية أو انضغاط بين الحروف. وفقاً لوثائق Apple NSAttributedString، يتم ضبط الكيرنينغ في iOS عبر السمة .kern ويدعم القيم الموجبة والسالبة.
الخلاصة
الكيرنينغ هو عملية الضبط اليدوي أو التلقائي للمسافة بين أزواج محددة من الأحرف لإزالة التشوهات البصرية. تنشأ المشكلة لأن كل حرف له هندسة فريدة: A لها قمة، V لها ميلان يميني، T لها عارضة عريضة. عندما تكون هذه الحروف جنباً إلى جنب، تبدو المسافة بين محيطها غير متساوية، على الرغم من أن العرض المحدد هو نفسه.
تحتوي جداول كيرنينغ الخطوط على أزواج أحرف بقيم ضبط محددة مسبقاً. قد تحتوي الخطوط الجيدة على 300 إلى 2000 زوج كيرنينغ. الخطوط الاحترافية — مثل SF Pro من Apple أو Roboto من Google — تتضمن جداول كيرنينغ مصممة بدقة تغطي جميع التركيبات الممكنة للحروف اللاتينية والسيريلية. وفقاً لدليل Fontshop Guide to Kerning، جودة جداول الكيرنينغ هي أحد المؤشرات الرئيسية للخط الاحترافي.
يكون التأثير البصري للكيرنينغ ملحوظاً بشكل خاص في العناوين والشعارات والنص ذي الأحجام الكبيرة (24 نقطة وما فوق). في النص الصغير (12–14 نقطة) يكون التباعد بين الحروف أضيق والكيرنينغ أقل وضوحاً، رغم أنه لا يزال يعمل. تطبق متصفحات الويب وأنظمة تشغيل الجوال الكيرنينغ المدمج افتراضياً، لكن يمكن للمطور تعطيله أو تعديله لتصميم معين.
غالباً ما يخلط المطورون المبتدئون بين الكيرنينغ والتتبع، لكنهما معاملان طباعيان مختلفان جوهرياً. يعمل الكيرنينغ على مستوى أزواج الأحرف ويضبط المسافة فقط بين تركيبات محددة حيث تخلق هندسة الحروف اختلالاً بصرياً. التتبع (تباعد الأحرف) يغير الفاصل بين جميع الأحرف في المقطع المحدد بشكل متساوٍ — يزيده أو ينقصه بشكل موحد.
متى يُستخدم التتبع: لتحسين قراءة النص الصغير (تتبع موجب)، لإنشاء عناوين بارزة (تتبع سالب)، لتنسيق النص في تصميم الواجهات. يُحدد التتبع بقيمة رقمية ويُطبق على كل حرف، بما في ذلك الأزواج المعدلة بالكيرنينغ — تظل تصحيحات الكيرنينغ محفوظة ولكن يُضاف إزاحة عامة فوقها.
| المعامل | الكيرنينغ | التتبع |
|---|---|---|
| النطاق | أزواج أحرف فردية | جزء النص بأكمله |
| القيمة | فريدة لكل زوج | موحدة لجميع الأحرف |
| الغرض | التوازن البصري | ضبط كثافة النص |
| سمة iOS | .kern في NSAttributedString | letter-spacing في CSS |
| الوضوح | في العناوين من 24pt | في جميع الأحجام |
قاعدة مهمة: مع التتبع السالب (الانضغاط)، راقب أزواج الكيرنينغ — فقد تخلق تراكبات غير مرغوب فيها للأحرف. في CSS، تُطبق خاصية letter-spacing فوق جدول كيرنينغ الخط، ومع الانضغاط القوي (letter-spacing: -1px) قد تؤدي تصحيحات الكيرنينغ إلى اندماج الأحرف.
في iOS، يُدار الكيرنينغ عبر السمة .kern في NSAttributedString. قيمة السمة هي Float، حيث الرقم الموجب يزيد التباعد، والرقم السالب يقلله، و 0 يعطل الكيرنينغ. القيمة الافتراضية هي nil، مما يعني استخدام جدول كيرنينغ الخط. الواجهة البرمجية الرئيسية للعمل مع الكيرنينغ هي NSMutableAttributedString مع إضافة السمة إلى نطاق نصي.
let text = "Kerning in mobile interfaces"
let attributedText = NSMutableAttributedString(
string: text
)
// تفعيل الكيرنينغ (يستخدم جدول الخط)
attributedText.addAttribute(
.kern,
value: 0.5,
range: NSRange(
location: 0,
length: text.count
)
)
// تطبيق على UILabel
label.attributedText = attributedText
القيمة الافتراضية .kern = nil تفعل الكيرنينغ من جدول الخط. إذا كنت بحاجة لتعطيل الكيرنينغ تماماً، اضبط .kern = 0. القيمتان 0.0 و nil حالتان مختلفتان: nil تستخدم الجدول، 0 تُصفّر جميع أزواج الكيرنينغ إجبارياً. وفقاً لدليل Apple Text Programming Guide، الضبط الصريح 0 مفيد للنص أحادي المسافة أو الحالات التي يعيق فيها الكيرنينغ — مثلاً، في الأزرار ذات العرض الثابت.
SwiftUI يوفر المُعدّل .kerning() للنص Text. على عكس UIKit، في SwiftUI يُحدد الكيرنينغ على مستوى العرض وليس على سلسلة منسقة. يقبل المُعدّل CGFloat ويُطبق على كل النص داخل كتلة Text. للكيرنينغ الجزئي في SwiftUI، يُستخدم مزيج من عامل + على Text ومُعدّلات فردية.
struct KerningView: View {
var body: some View {
Text("عنوان مع كيرنينغ")
.kerning(1.0)
.font(.title)
}
}
الأداء: NSAttributedString بسمة كيرنينغ يعيد حساب مواضع الأحرف أثناء العرض. للنص الثابت يحدث هذا مرة واحدة. للنص الديناميكي (نص متغير في UICollectionView) — في كل مرة يتغير فيها. استخدام نطاق كبير مع كيرنينغ في سلاسل طويلة (أكثر من 500 حرف) قد يقلل من FPS أثناء التمرير.
في Android، يُدار الكيرنينغ عبر الخاصية letterSpacing في TextView وتخطيطات XML. السمة من نوع Float وتعمل كمُضاعف لحجم em للخط. القيمة 0 تقابل الكيرنينغ الافتراضي، القيمة الموجبة تزيد التباعد، السالبة تقلله. letterSpacing متاح بدءاً من API Level 21 (Android 5.0 Lollipop).
التطبيق عبر SpannableString يسمح بتطبيق الكيرنينغ على جزء من السلسلة بدلاً من النص بأكمله. يُستخدم الصنف ScaleXSpan أو ReplacementSpan مخصص للتحكم الدقيق. وفقاً لدليل Android Developer Guide، يقوم ScaleXSpan بقياس الأحرف أفقياً، محاكياً تغيير التباعد بين الأحرف، لكنه لا يوفر تحكماً مباشراً في أزواج الكيرنينغ.
// في تخطيط XML
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text with kerning"
android:letterSpacing="0.05" />
// برمجياً في Kotlin
val textView = findViewById<TextView>(R.id.myTextView)
textView.letterSpacing = 0.05f
القيد: Android لا يدعم جداول الكيرنينغ مباشرة — يعمل letterSpacing كتتبع لجميع الأحرف. للكيرنينغ الزوجي في Android، تُستخدم الخطوط ذات جداول الكيرنينغ المضمنة (OpenType GPOS feature kern). يعتمد الدعم على إصدار نظام التشغيل ومحرك العرض: في Android 10+ يُستخدم Minikin بدعم كامل لميزات OpenType، في الإصدارات الأقدم HarfBuzz مع قيود. توصية: اختبر عرض الكيرنينغ على أجهزة تعمل بنظام Android أقل من 8.0.
في الويب، يُتحكم في الكيرنينغ عبر خاصية CSS font-kerning التي تفعل أو تعطل جداول الكيرنينغ المضمنة في الخط. القيم: auto (المتصفح يقرر)، normal (الكيرنينغ مفعل)، none (الكيرنينغ معطل). الخاصية مدعومة من جميع المتصفحات الحديثة منذ 2016. وفقاً لـ MDN Web Docs، font-kerning يُطبق فقط على خطوط OpenType ذات جدول كيرنينغ.
خاصية CSS letter-spacing هي مماثل التتبع، لكنها تُستخدم أيضاً لتأثيرات شبيهة بالكيرنينغ. على عكس font-kerning، تغير letter-spacing الفاصل بين جميع الأحرف بشكل موحد، دون مراعاة أزواج الكيرنينغ. عند استخدام كلتا الخاصيتين، تُطبق font-kerning أولاً، ثم تضيف letter-spacing إزاحة موحدة فوقها.
/* Enable kerning for headings */
h1 {
font-kerning: normal;
letter-spacing: 0.02em;
}
/* Disable kerning for monospace */
code, pre {
font-kerning: none;
}
أداة TypeScript لحساب letter-spacing الأمثل مع مراعاة الكيرنينغ يمكنها تحليل جدول كيرنينغ الخط عبر Canvas API. لكن عملياً، يعتمد مطورو الويب على font-kerning: normal في معظم الحالات يعطي نتائج مثلى. الضبط الإضافي لـ letter-spacing مطلوب فقط للّمسات التصميمية — مثلاً، في الصفحات المقصودة ذات الطباعة الكبيرة.
الكيرنينغ أداة ضبط دقيق، وتطبيقه غير الصحيح يضعف القراءة. القاعدة الأولى: لا تغير الكيرنينغ لنص الجسم. جداول كيرنينغ الخطوط الاحترافية تحتوي بالفعل على قيم مثلى لأحجام 12–16pt. التدخل في كيرنينغ نص الجسم يؤدي إلى عدم الانتظام وتشويش بصري.
القاعدة الثانية: للعناوين من 24pt فما فوق، استخدم كيرنينغ موجب (0.5–1.5 pt حسب نوع الخط). النص الكبير يتطلب تباعداً أكبر بين الحروف للقراءة. الخطوط ذات x-height المنخفضة (مثل Didot) تتطلب كيرنينغ أكثر من الخطوط ذات x-height العالية (مثل Helvetica). بيانات مرجعية: في تطبيق iOS Apple Music، تستخدم العناوين كيرنينغ 0.8 pt.
القاعدة الثالثة: اختبر الكيرنينغ دائماً على سلاسل حقيقية، وليس على Lorem Ipsum. التركيبات المختلفة للأحرف تعطي تأثيرات بصرية مختلفة. انتبه بشكل خاص للأزواج مع حروف العلة والحروف الساكنة ذات العناصر البارزة: AV، Te، To، Wa، LT. مع الكيرنينغ السالب، راقب الأزواج fi، fl، fj — في بعض الخطوط قد تندمج دون رباط.
جانب إمكانية الوصول: المستخدمون المصابون بعسر القراءة يقرؤون النص بكيرنينغ موجب طفيف (0.3–0.5 pt) بشكل أفضل. iOS و Android يدعمان إعدادات إمكانية الوصول التي يمكنها تجاوز كيرنينغ التطبيق. استخدم UIFontDescriptor مع Dynamic Type وراعِ الكيرنينغ في إعدادات إمكانية الوصول عبر UIAccessibility. مهم: لا تمنع إعدادات الكيرنينغ النظامية — هذا ينتهك إرشاد WCAG 2.2 Guideline 1.4.12 بشأن تكييف النص.
الأسئلة الشائعة
اضبط السمة .kern = 0 في NSAttributedString. القيمة 0 تُصفّر جميع أزواج الكيرنينغ إجبارياً، بما في ذلك جداول الخط المضمنة. للتعطيل الكامل على مستوى النص بأكمله، اضبط .kern = 0 في معاملات UILabel عبر attributedText.
الكيرنينغ يغير المسافة بين الأحرف مع إبقاء أشكالها دون تغيير. الربط الطباعي يستبدل حرفين أو أكثر برسم بياني واحد. تُستخدم الروابط غالباً حيث لا يستطيع الكيرنينغ إزالة الاندماج غير المرغوب فيه — مثلاً، الزوج fi.
نعم، بدءاً من Android 10 (API 29) يُستخدم Minikin مع دعم كامل لميزة OpenType GPOS kern. في الإصدارات الأقدم، يعتمد الدعم على مُصنّع الجهاز وإصدار HarfBuzz. يُوصى بالاختبار على أجهزة متعددة.
استخدم السلسلة AVOWaToLt — فيها أزواج كيرنينغ إشكالية. إذا كانت الفجوات البصرية مرئية بالعين المجردة، فإن جدول كيرنينغ الخط منخفض الجودة. للتحقق الاحترافي، استخدم أدوات FontForge أو Glyphs.
نعم. عند التحديث الديناميكي لـ NSAttributedString مع الكيرنينغ في UICollectionView، إعادة حساب مواضع الأحرف قد تقلل FPS أثناء التمرير. للقوائم الطويلة، خزّن السلاسل المنسقة مؤقتاً أو استخدم UILabel بالإعدادات الافتراضية.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا