Ascender হল লোয়ারকেস অক্ষরের সেই অংশ যা লোয়ারকেস অক্ষরের উচ্চতা (x-height) থেকে উপরে উঠে। সিরিলিকে, এগুলি অক্ষরের উপাদান «be», «ef», «ve»; লাটিনে — «b», «d», «f», «h», «k», «l», «t»। ফন্ট পরিবারগুলির মধ্যে ascender দৈর্ঘ্য ভিন্ন হয় এবং লাইনের ছন্দকে গুরুতরভাবে প্রভাবিত করে। Google Fonts Knowledge Guide (2025) অনুযায়ী, লম্বা ascender বিশিষ্ট ফন্টগুলি সাধারণত আরও মার্জিতপূর্ণ বিবেচিত হয়, কিন্তু মোবাইল ডিভাইসে আরামদায়ক পড়ার জন্য বৃদ্ধিত লাইন ব্যবধান প্রয়োজন।
মূখ্য বিষয়সমূহ
Ascender (উপরের উঠিত উপাদান) হল লোয়ারকেস গ্লায়ফের সেই অংশ যা x-height রেখার উপরে অবস্থিত। টৈপোগ্রাফিতে, x-height উঠিত উপাদান বাদে লোয়ারকেস অক্ষরের উচ্চতা নির্দেশ করে — উদাহরণস্বরূপ, অক্ষর «x» বা «o» এর উচ্চতা। Ascender শুরু হয় যেখানে x-height শেষ হয়, এবং ascender রেখা পর্যন্ত বিস্তৃত হয় — ফন্টের উপর সীমা।
সকল লোয়ারকেস অক্ষরের ascender থাকে না। উদাহরণস্বরূপ, অক্ষর «a», «e», «o», «n», «s» সম্পূর্ণরূপ x-height এর মধ্যে সামান্য হয়। কিন্তু সিরিলিকে «be», «ve», «de», «ef» এবং লাটিনে «b», «d», «f», «h», «k» অক্ষরগুলির উঠিত উপাদান রয়েছে যা উপরে উঠে। বড় অক্ষরগুলি (ক্যাপিটাল) এও ascender রেখায় পৌঁছতে পারে, কিন্তু তাদের উচ্চতাকে cap-height বলা হয় এবং কঠোর অর্থে ascender বিবেচিত হয় না।
Adobe Typekit — Glossary of Typography (2024) অনুযায়ী, x-height এর সাপেক্ষে ascender এর অনুপাত ফন্ট পরিবারের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। x-height এর সাপেক্ষে উচ্চ ascender বিশিষ্ট ফন্ট (যেমন Garamond এর মতো পুরানো শৈলীর ফন্ট) পরিষ্কারতা এবং হালকাপনার অনুভূতি তৈরি করে। নিম্ন ascender বিশিষ্ট ফন্ট (যেমন Helvetica এর মতো জ্যামিতিক গ্রোটেস্ক) আরও ঘন এবং সংক্ষিপ্ত দেখায়।
| ফন্ট পরিবার | Ascender / x-height | বৈশিষ্ট্য |
|---|---|---|
| Garamond | ~1.4 | উচ্চ ascender, শাস্ত্রীয় শৈলী |
| Helvetica | ~1.2 | মধ্যম ascender, নিরপেক্ষ |
| Roboto | ~1.25 | সন্তুলিত, স্ক্রীনের জন্য অপ্টিমাইজ়ড |
| SF Pro | ~1.28 | Apple সিস্টেম ফন্ট, ছোট আকারে পড়া যায় |
| Inter | ~1.35 | উচ্চ ascender, ভাল পার্থক্যকরণ |
ডিজিটাল ফন্টে, ascender হল একটি কঠোরভাবে সংজ্ঞায়িত মেট্রিক যা ফন্ট ফাইলের টেবিলে সংরক্ষিত থাকে। OpenType ফরম্যাট (otf/ttf) এ, ascender মান hhea (অনুভূমিক হেডার) টেবিলের ascent ফিল্ডে সংরক্ষিত থাকে। TrueType ফন্টের জন্য, মান os/2 টেবিলের sTypoAscender ফিল্ডে থাকে। উভয় মান সাপেক্ষিক এককে মাপা হয় — FUnits (ফন্ট ইউনিট), যেখানে সাধারণত 1000 বা 2048 FUnits em-বর্গের উচ্চতার সাথে মিলে।
# fontTools এর মাধ্যমে ফন্ট থেকে ascender মেট্রিক্স পড়া
from fontTools.ttLib import TTFont
font = TTFont('Roboto-Regular.ttf')
hhea = font['hhea']
os2 = font['OS/2']
ascent = hhea.ascent # 1900 FUnits (SF Pro)
typo_ascender = os2.sTypoAscender # 1900 FUnits
# 16pt ফন্ট আকারের জন্য পিক্সেলে রূপান্তর
px_per_em = 16
ascent_px = ascent * px_per_em / 1000 # 30.4 px
বোঝা গুরুত্বপূর্ণ যে hhea টেবিল থেকে ascent এবং os/2 থেকে sTypoAscender ভিন্ন হতে পারে। বিভিন্ন প্লেটফর্মে টেক্সট রেন্ডারিং বিভিন্ন মান ব্যবহার করে: iOS hhea.ascent এর উপর নির্ভর করে, যখন Android os/2.sTypoAscender ব্যবহার করে। এর ফলে একই ফন্ট সমান ফন্ট আকারে iOS এ Android এর চেয়ে লম্বা দেখাতে পারে।
Microsoft OpenType Specification (2025) অনুযায়ী, উভয় প্লেটফর্মে সঠিক প্রদর্শনের জন্য hhea.ascent এবং os/2.sTypoAscender এর মধ্যে পার্থক্য 5% এর বেশি হওয়া উচিত নয়। ক্রস-প্লেটফর্ম মোবাইল অ্যাপ্লিকেশন ডেভেলপ করার সময়, সঙ্গত মেট্রিক্স সম্পন্ন ফন্ট বাছাই বা line-height এর মাধ্যমে পার্থক্য পূরণ করুন।
iOS ডেভেলপমেন্টে, ascender মান UIFont.ascender প্রর্তির মাধ্যমে উপলব্ধ। এই প্রর্তি বেসলাইন থেকে লাইনের শীর্ষ (ascender লাইন) পর্যন্ত দূরত্ব ফেরত দেয়, যা পয়েন্টে প্রকাশ করা হয়। মেট্রিকে শুধুমাত্র ফন্টের নিজস্ব ascender এই নয়, বরং leading ও অন্তর্ভুক্ত করে — পড়ার ক্ষমতা বৃদ্ধির জন্য ফন্ট ডিজাইনার যোগ করা অতিরিক্ত স্থান।
// iOS এ UIFont এর মাধ্যমে ascender প্রাপ্ত করা
let font = UIFont(name: "Roboto-Regular", size: 16)!
// ফন্ট মেট্রিক্সে সরাসরি প্রবেশ
let ascender = font.ascender // Roboto 16pt এর জন্য ~15.5 pt
let descender = font.descender // ~-4.0 pt
let lineHeight = font.lineHeight // ~19.5 pt
let leading = font.leading // অতিরিক্ত leading স্থান
// Core Text: বিস্তারিত মেট্রিক্স
let ctFont = CTFontCreateWithName(
"Roboto-Regular" as CFString, 16, nil
)
let metrics = CTFontGetBoundingBox(ctFont)
Core Text নিয়ে কাজ করার সময়, CTFontGetAscent, CTFontGetDescent এবং CTFontGetLeading এর মাধ্যমে আরও সটিক মেট্রিক্স পাওয়া যায়। UIFont.ascender এবং CTFontGetAscent এর মধ্যে পার্থক্য সামান্য, কিন্তু কিছু ক্ষেত্রে Core Text ভগ্নাংশসহ মান ফেরত দেয় যা UIKit নিকটবর্তী পূর্ণসংখ্যায় পূর্ণ করে।
কাস্টম টেক্সট লেআউট তৈরিতে সঠিক ascender জানা প্রয়়োজন — উদাহরণস্বরূপ, একই লাইনে বিভিন্ন ফন্ট আকারে টেক্সট রেন্ডার করার সময় বা Canvas এ ইচ্ছামতো স্থানাঙ্কের সাপেক্ষে টেক্সট সংরেখিত করার সময়। objc.io — Core Text and TextKit (2025) অনুযায়ী, কাস্টম রেন্ডারিংয়ের সময় ascender উপেক্ষা করা অক্ষরের উপরের উঠিত উপাদান কাটার একটি সাধারণ কারণ, যেমন «be», «ef» এবং «d»।
Android এ, ascender মেট্রিক্স Paint.FontMetrics এবং Paint.FontMetricsInt ক্লাসের মাধ্যমে উপলব্ধ। Paint.getFontMetrics() মেথড ascent (বেসলাইন থেকে গ্লায়ফের শীর্ষ পর্যন্ত দূরত্ব) এবং top (বেসলাইন থেকে leading সহ লাইনের উপর সীমা পর্যন্ত দূরত্ব) ফেরত দেয়। Android স্থানাঙ্ক প্রণালীতে ascent মান সর্বদা নেগেটিভ, যেখানে বেসলাইনের স্থানাঙ্ক 0 এবং উপরকে দিক হল ধনাত্মক দিক।
// Android (View সিস্টেম) এ ascender প্রাপ্ত করা
val paint = Paint().apply {
textSize = 16 * density // 16sp পিক্সেলে
typeface = Typeface.DEFAULT
}
val metrics = paint.fontMetrics
val ascent = metrics.ascent // নেগেটিভ: 16sp এর জন্য ~-15px
val top = metrics.top // নেগেটিভ: leading সহ ~-17px
val ascentPx = Math.abs(ascent) // পরিপূর্ণ মান ~15px
// ascender অফসেট সহ রেন্ডার
canvas.drawText("abdfgh", x, y - ascent, paint)
Jetpack Compose এ, টেক্সট মেট্রিক্স TextLayoutResult এর মাধ্যমে উপলব্ধ। টেক্সট রেন্ডারের পর, আপি প্রতিটি লাইনের মেট্রিক্স সহ একটি লাইন পেতে পারেন, যার মধ্যে বেসলাইন অবস্থান এবং বাউন্ডিং বাক্স মাত্রা অন্তর্ভুক্ত। এটি কাস্টম লেআউটে সটিক টেক্সট অবস্থানের জন্য দক্ষ।
// Jetpack Compose: TextLayoutResult এর মাধ্যমে মেট্রিক্স প্রাপ্ত করা
var textLayoutResult by remember { mutableStateOf<TextLayoutResult?>(null) }
Text(
text = "Ascender: abdfgh",
onTextLayout = { textLayoutResult = it }
)
// প্রথম লাইন থেকে ascender প্রাপ্ত করা
val ascenderPx = textLayoutResult?.let {
it.getLineBottom(it.lineCount - 1) - it.getLineTop(it.lineCount - 1)
}
Android Developers — FontMetrics Best Practices (2025) অনুযায়ী, Canvas এ কাস্টম টেক্সট রেন্ডারের সময়, সর্বদা top এর পরিবর্তে ascent মেট্রিক্স ব্যবহার করুন, যতক্ষণ না আপনাকে লাইন leading বিবেচনা করতে হয়। top ব্যবহার কাস্টম TextView বাস্তবায়নে লাইনের মধ্যে অত্যধিক স্থান সৃষ্টি করে।
Ascender সরাসরি line-height গণনাকে প্রভাবিত করে। যদি একটি লাইনে উচ্চ ascender বিশিষ্ট একটি অক্ষর থাকে, তাহলে লাইনটি আরও উল্লম্ব স্থান নেয়। Android এবং iOS স্বচালিতভাবে রেন্ডারিংয়ের সময় প্রতিটি অক্ষরের ascender বিবেচনা করে, কিন্তু ডিজাইন সিস্টেমে ম্যানুয়ালি line-height সেট করার সময়, মনে রাখা গুরুত্বপূর্ণ যে ascender ফন্ট মেট্রিকের অংশ, অতিরিক্ত মার্জিন নয়।
পূর্ণ লাইন উচ্চতার সূত্র: line-height = ascender + descender + leading। যেখানে ascender হল বেসলাইন থেকে লাইনের শীর্ষ পর্যন্ত দূরত্ব, descender হল বেসলাইন থেকে নিচে (নেগেটিভ), এবং leading হল ফন্ট ডিজাইনার দ্বারা নির্ধারিত অতিরিক্ত আইন্টারলাইন স্থান। ফন্ট পরিবর্তনের সময়, তিনটি মানই পরিবর্তিত হয়, তাই line-height স্বচালিতভাবে ফন্ট পরিবারের মধ্যে স্থানান্তরিত হয় না।
// Android: পূর্ণ লাইন উচ্চতা গণনা
fun getLineHeight(paint: Paint): Float {
val fm = paint.fontMetrics
return fm.ascent + fm.descent + fm.leading // নেগেটিভ মান
}
// কাস্টম রেন্ডারিংএ ব্যবহার
val lineHeight = Math.abs(
paint.fontMetrics.ascent - paint.fontMetrics.descent + paint.fontMetrics.leading
)
একটি মোবাইল অ্যাপ্লিকেশনের জন্য ফন্ট বাছার সময়, ascender সহ অক্ষর সম্বলিত সাধারণ পাঠের সাথে সকল মূল ফন্ট পরিবার পরীক্ষা করুন। যদি অক্ষর «be» বা «ef» কন্টেনারের উপর প্রান্তে কাটা হয়, তাহলে line-height অতি ছোট এবং এটি ফন্ট আকার এবং ফন্ট পরিবারের উপর নির্ভর করে 2–4 pt বৃদ্ধি করা প্রয়়োজন।
সবচেয়ে সাধারণ ভুলটি হল ধরা যে সকল ফন্টের ascender সমান সমান ফন্ট আকারে। ব্যবহারিকতায়, ফন্ট পরিবারের মধ্যে ascender 30% পর্যন্ত পার্থক্য হতে পারে। যদি একজন ডিজাইনার লেআউটে 15 pt ascender (আকার 16 এ) সহ SF Pro ব্যবহার করেন, এবং ডেভেলপার 17 pt ascender সহ Inter সংযোগ করেন, তাহলে টেক্সট ব্লকগুলি সরে যাবে, উল্লম্ব ছন্দ বিনষ্ট করে।
UX Collective — Typography Metrics in Mobile Design (2025) অনুযায়ী, পরীক্ষিত মোবাইল অ্যাপ্লিকেশনের 67% এ অন্তত একটি স্ক্রীন রয়েছে যেখানে ascender সহ টেক্সটের অংশ কন্টেনারের সীমা অতিক্রম করে। এটি পণ্যের গুণমান ধারণাকে নকারাত্মকভাবে প্রভাবিত করে এবং গুরুত্বপূর্ণ তথ্য অপড়নীয় হতে পারে।
সাধারণ জিজ্ঞাসার প্রশ্ন
Ascender হল একটি লোয়ারকেস অক্ষরের উপাদান যা x-height এর উপরে প্রসারিত, যখন cap-height হল আপপেরকেস অক্ষরের (ক্যাপিটাল) উচ্চতা। ফন্টের উপর নির্ভর করে Ascender cap-height অপেক্ষা বেশি বা কম হতে পারে। কিছু ফন্টে, cap-height ascender রেখার সাথে মিলে; অন্যের ক্ষেত্রে, এটি নিচে থাকে। মেট্রিক্সের জন্য, UIFont.ascender (সকল ঊর্ধ্বের উপাদান অন্তর্ভুক্ত করে) কে cap-height এর সাথে দিল্দায় করবেন না।
UIFont.systemFont(ofSize:).ascender ব্যবহার করুন। SF Pro এর জন্য 17 pt আকারে, ascender প্রায় 16.2 pt। বিভিন্ন ডিভাইসে সটিক মান পেতে, এই কোডটি একটি প্রকৃত ডিভাইসে চালান — iOS সংস্করণের মধ্যে মেট্রিক্স সামান্য পার্থক্য হতে পারে। কাস্টম ফন্টের জন্য, ফলাফল তাদের আন্তরিক টেবিলের উপর নির্ভর করে।
ছোট পর্দায় (পাঁচ ইঞ্চি পর্যন্ত কর্ণ বিশিষ্ট স্মার্টফোন), ascender সহ অক্ষরগুলি উল্লম্ব স্থানের একটি গুরুত্বপূর্ণ অংশ নেয়। ফন্ট আকারের সাপেক্ষে ascender অতি লম্বা হলে, «be» এবং «ef» এর মতো অক্ষর ইংটারফেসের উপাদানের সাথে মিশে যেতে পারে। মধ্যম ascender সহ ফন্ট (Roboto, SF Pro) ছোট পর্দার জন্য অপ্টিমাইজ়ড, যখন উচ্চ ascender সহ ফন্ট (Garamond) ট্যাবলেটের জন্য অধিক উপযুক্ত।
সর্বসাধারণ উপায় হল অ্যাপ্লিকেশনের প্রতিটি টেক্সট উপাদানে একটি পরীক্ষা স্ট্রিং «beveefidhl» প্রদর্শন করা এবং অক্ষরগুলি কন্টেনারের সীমা অতিক্রম করছে কিনা তা পরীক্ষা করা। স্বচালিত পরীক্ষার জন্য, এই স্ট্রিংয়ের সাথে স্ন্যাপশোট পরীক্ষা ব্যবহার করুন। iOS এ, Debug View Hierarchy ব্যবহার করুন; Android এ, ভিজুয়াল পরিদর্শনের জন্য Layout Inspector ব্যবহার করুন।
হ্যাঁ, একই পরিবারের Regular, Bold এবং Italic এর মধ্যে ascender সামান্য পার্থক্য হতে পারে। সাধারণত পার্থক্য 2–3% এর বেশি না, কিন্তু আলঙ্কারিক ফন্টে 10% পর্যন্ত হতে পারে। প্রতিটি শࣈলীর মেট্রিক্স আলাদাভাবে পরীক্ষা করুন, বিশেষ করে শিরোনামের (Bold) এবং মূল পাঠের (Regular) জন্য — সমান ফন্ট আকারে তাদের বিভিন্ন line-height প্রয়়োজন হতে পারে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন