কার্নিং হল টেক্সটে ভিজুয়াল সামঞ্জস্য অর্জনের জন্য নির্দিষ্ট অক্ষর জোড়ার মধ্যে স্থানের নির্বাচনী সমন্বয়। ট্র্যাকিং-এর বিপরীতে, যা সমস্ত অক্ষরের মধ্যে দূরত্ব সমানভাবে পরিবর্তন করে, কার্নিং প্রতিটি অক্ষর জোড়ার আকৃতি বিবেচনা করে: A এবং V, T এবং o, W এবং a। কার্নিং ছাড়া, প্রসারিত উপাদান সহ সংমিশ্রণগুলি অসম দেখায় — অক্ষরের মধ্যে ভিজুয়াল ফাঁক বা সংকোচন দেখা যায়। Apple NSAttributedString ডকুমেন্টেশন অনুসারে, iOS-এ কার্নিং .kern অ্যাট্রিবিউটের মাধ্যমে কনফিগার করা হয় এবং এটি ধনাত্মক এবং ঋণাত্মক উভয় মান সমর্থন করে।
মূল বিষয়
কার্নিং হল অপটিক্যাল আর্টিফ্যাক্ট দূর করার জন্য নির্দিষ্ট অক্ষর জোড়ার মধ্যে দূরত্ব ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে সামঞ্জস্য করার প্রক্রিয়া। সমস্যাটি দেখা দেয় কারণ প্রতিটি অক্ষরের একটি অনন্য জ্যামিতি রয়েছে: A-এর একটি শীর্ষবিন্দু রয়েছে, V-এর ডানদিকে ঢাল রয়েছে, T-এর একটি প্রশস্ত ক্রসবার রয়েছে। যখন এই ধরনের অক্ষর পাশাপাশি থাকে, তখন তাদের রূপরেখার মধ্যে দূরত্ব অসম মনে হয়, যদিও set width একই থাকে।
ফন্ট কার্নিং টেবিলে পূর্বনির্ধারিত সমন্বয় মান সহ অক্ষর জোড়া থাকে। একটি ভাল টাইপফেসে 300 থেকে 2000 কার্নিং জোড়া থাকতে পারে। পেশাদার টাইপফেস — যেমন Apple-এর SF Pro বা Google-এর Roboto — তে ল্যাটিন এবং সিরিলিক অক্ষরের সমস্ত সম্ভাব্য সংমিশ্রণ কভার করে সাবধানে তৈরি কার্নিং টেবিল অন্তর্ভুক্ত থাকে। Fontshop Guide to Kerning-এর মতে, কার্নিং টেবিলের গুণমান একটি পেশাদার ফন্টের প্রধান সূচকগুলির মধ্যে একটি।
কার্নিং-এর ভিজুয়াল প্রভাব বিশেষ করে শিরোনাম, লোগো এবং বড় ফন্ট সাইজে (24 pt এবং তার উপরে) লক্ষণীয়। ছোট টেক্সটে (12–14 pt) অক্ষরের ফাঁক কম থাকে এবং কার্নিং কম লক্ষণীয় হয়, যদিও এটি এখনও কাজ করে। ওয়েব ব্রাউজার এবং মোবাইল OS ডিফল্টরূপে বিল্ট-ইন কার্নিং প্রয়োগ করে, তবে ডেভেলপার নির্দিষ্ট ডিজাইনের জন্য এটি নিষ্ক্রিয় বা সামঞ্জস্য করতে পারে।
নবীন ডেভেলপাররা প্রায়শই কার্নিং এবং ট্র্যাকিংকে গুলিয়ে ফেলেন, কিন্তু এগুলি মৌলিকভাবে ভিন্ন টাইপোগ্রাফিক প্যারামিটার। কার্নিং অক্ষর-জোড়া স্তরে কাজ করে এবং শুধুমাত্র নির্দিষ্ট সংমিশ্রণের মধ্যে ব্যবধান সামঞ্জস্য করে যেখানে অক্ষর জ্যামিতি অপটিক্যাল ভারসাম্যহীনতা তৈরি করে। ট্র্যাকিং (letter-spacing) নির্বাচিত টুকরোর মধ্যে সমস্ত অক্ষরের ব্যবধান সমানভাবে পরিবর্তন করে — এটি সমানভাবে বাড়ায় বা কমায়।
কখন ট্র্যাকিং প্রয়োগ করা হয়: ছোট টেক্সটের পঠনযোগ্যতা উন্নত করতে (ধনাত্মক ট্র্যাকিং), জোরালো শিরোনাম তৈরি করতে (ঋণাত্মক ট্র্যাকিং), ইন্টারফেস ডিজাইনে টেক্সট স্টাইল করতে। ট্র্যাকিং একটি সংখ্যাসূচক মান হিসাবে সেট করা হয় এবং প্রতিটি অক্ষরে প্রয়োগ করা হয়, যার মধ্যে ইতিমধ্যে কার্ন করা জোড়া অন্তর্ভুক্ত — কার্নিং সংশোধন সংরক্ষিত থাকে তবে তাদের উপরে একটি বৈশ্বিক স্থানান্তর যোগ করা হয়।
| প্যারামিটার | কার্নিং | ট্র্যাকিং |
|---|---|---|
| পরিধি | পৃথক অক্ষর জোড়া | সম্পূর্ণ টেক্সট টুকরা |
| মান | প্রতি জোড়ার জন্য অনন্য | সব অক্ষরের জন্য অভিন্ন |
| উদ্দেশ্য | ভিজুয়াল সামঞ্জস্য | টেক্সট ঘনত্ব সমন্বয় |
| iOS অ্যাট্রিবিউট | NSAttributedString-এ .kern | CSS-এ letter-spacing |
| দৃশ্যমানতা | 24pt থেকে শিরোনামে | সব ফন্ট সাইজে |
গুরুত্বপূর্ণ নিয়ম: ঋণাত্মক ট্র্যাকিং (সংকোচন) এর সাথে, কার্নিং জোড়ার দিকে নজর রাখুন — তারা অক্ষরের অবাঞ্ছিত ওভারল্যাপ তৈরি করতে পারে। CSS-এ, letter-spacing প্রপার্টি ফন্টের কার্নিং টেবিলের উপরে প্রয়োগ হয় এবং শক্তিশালী সংকোচনের (letter-spacing: -1px) সাথে কার্নিং সংশোধন অক্ষর একীভূত হতে পারে।
iOS-এ, কার্নিং NSAttributedString-এ .kern অ্যাট্রিবিউটের মাধ্যমে পরিচালিত হয়। অ্যাট্রিবিউটের মান একটি Float, যেখানে ধনাত্মক সংখ্যা ব্যবধান বাড়ায়, ঋণাত্মক সংখ্যা কমায় এবং 0 কার্নিং নিষ্ক্রিয় করে। ডিফল্ট মান হল nil, যার অর্থ ফন্টের কার্নিং টেবিল ব্যবহার করা। কার্নিং নিয়ে কাজ করার প্রাথমিক API হল 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 Text-এর জন্য .kerning() মডিফায়ার প্রদান করে। UIKit-এর বিপরীতে, SwiftUI-এ কার্নিং ভিউ স্তরে সেট করা হয়, অ্যাট্রিবিউটেড স্ট্রিং-এ নয়। মডিফায়ার একটি CGFloat গ্রহণ করে এবং Text ব্লকের ভিতরের সমস্ত টেক্সটে প্রয়োগ হয়। SwiftUI-এ আংশিক কার্নিংয়ের জন্য, Text-এ + অপারেটর এবং পৃথক মডিফায়ারের সংমিশ্রণ ব্যবহার করা হয়।
struct KerningView: View {
var body: some View {
Text("কার্নিং সহ শিরোনাম")
.kerning(1.0)
.font(.title)
}
}
কার্যক্ষমতা: কার্নিং অ্যাট্রিবিউট সহ NSAttributedString রেন্ডারিংয়ের সময় অক্ষর অবস্থান পুনঃগণনা করে। স্ট্যাটিক টেক্সটের জন্য এটি একবার হয়। ডায়নামিক টেক্সটের (UICollectionView-এ পরিবর্তনশীল টেক্সট) জন্য — প্রতিবার এটি পরিবর্তিত হলে। দীর্ঘ স্ট্রিংয়ে (500 অক্ষরের বেশি) কার্নিং সহ বড় রেঞ্জ ব্যবহার স্ক্রল করার সময় FPS কমাতে পারে।
Android-এ, কার্নিং TextView এবং XML লেআউটে letterSpacing প্রপার্টির মাধ্যমে পরিচালিত হয়। অ্যাট্রিবিউটটি 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) সহ ফন্ট ব্যবহার করা হয়। সমর্থন OS সংস্করণ এবং রেন্ডারিং ইঞ্জিনের উপর নির্ভর করে: 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 অ্যাক্সেসিবিলিটি সেটিংস সমর্থন করে যা অ্যাপের কার্নিং ওভাররাইড করতে পারে। Dynamic Type-সহ UIFontDescriptor ব্যবহার করুন এবং UIAccessibility-এর মাধ্যমে অ্যাক্সেসিবিলিটি সেটিংসে কার্নিং বিবেচনা করুন। গুরুত্বপূর্ণ: সিস্টেম কার্নিং সেটিংস ব্লক করবেন না — এটি টেক্সট অভিযোজন সংক্রান্ত WCAG 2.2 নির্দেশিকা 1.4.12 লঙ্ঘন করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
NSAttributedString-এ .kern = 0 অ্যাট্রিবিউট সেট করুন। মান 0 জোর করে সমস্ত কার্নিং জোড়া শূন্য করে, বিল্ট-ইন ফন্ট টেবিল সহ। সম্পূর্ণ টেক্সট স্তরে সম্পূর্ণ নিষ্ক্রিয়তার জন্য, attributedText-এর মাধ্যমে UILabel প্যারামিটারে .kern = 0 সেট করুন।
কার্নিং অক্ষরের মধ্যে দূরত্ব পরিবর্তন করে, তাদের আকার অপরিবর্তিত রাখে। লিগেচার দুই বা ততোধিক অক্ষরকে একটি单一的 গ্লিফ দিয়ে প্রতিস্থাপন করে। লিগেচার প্রায়শই সেখানে ব্যবহৃত হয় যেখানে কার্নিং অবাঞ্ছিত একীকরণ দূর করতে পারে না — উদাহরণস্বরূপ, fi জোড়া।
হ্যাঁ, Android 10 (API 29) থেকে Minikin রেন্ডারিং OpenType GPOS feature kern-এর সম্পূর্ণ সমর্থন সহ ব্যবহৃত হয়। পুরানো সংস্করণে, সমর্থন ডিভাইস প্রস্তুতকারক এবং HarfBuzz সংস্করণের উপর নির্ভর করে। একাধিক ডিভাইসে পরীক্ষা করার সুপারিশ করা হয়।
AVOWaToLt স্ট্রিং ব্যবহার করুন — এতে সমস্যাযুক্ত কার্নিং জোড়া রয়েছে। যদি ভিজুয়াল ফাঁক খালি চোখে লক্ষণীয় হয়, ফন্টের কার্নিং টেবিল নিম্নমানের। পেশাদার পরীক্ষার জন্য FontForge বা Glyphs টুল ব্যবহার করুন।
হ্যাঁ। UICollectionView-এ কার্নিং সহ NSAttributedString গতিশীলভাবে আপডেট করার সময়, অক্ষর অবস্থান পুনঃগণনা স্ক্রল করার সময় FPS কমাতে পারে। দীর্ঘ তালিকার জন্য, অ্যাট্রিবিউটেড স্ট্রিং ক্যাশে করুন বা ডিফল্ট সেটিংস সহ UILabel ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন