Baseline ایک غیر مرئی افقی لکیر ہے جس پر فونٹ کے تمام حروف واقع ہوتے ہیں۔ زیادہ تر حروف baseline پر کھڑے ہوتے ہیں، جبکہ نیچے کی طرف جانے والے عناصر (descenders) اس کے نیچے پھیلے ہوتے ہیں۔ موبائل انٹرفیس میں، baseline کا استعمال ٹیکسٹ کو دوسرے عناصر — آئیکنز، بٹن، تصاویر — کے ساتھ صحیح طریقے سے سیدھ میں لانے کے لیے کیا جاتا ہے۔ Material Design Typography Guidelines (2025) کے مطابق، baseline کے مطابق مستقل صف بندی انٹرفیس کے بصری درجہ بندی کو بہتر بناتی ہے اور مواد کو اسکین کرتے وقت علمی بوجھ کو کم کرتی ہے۔
اہم نکات
Baseline (بنیادی لکیر) ٹائپوگرافی کا ایک بنیادی تصور ہے جو افقی محور کی وضاحت کرتا ہے جس پر فونٹ کے حروف واقع ہوتے ہیں۔ ڈیجیٹل فونٹ میں ہر گلائف کا baseline سے ایک منسلک نقطہ ہوتا ہے — ٹیکسٹ رینڈر کرتے وقت حروف اسی لکیر کے ساتھ سیدھ میں آتے ہیں۔ زیادہ تر چھوٹے حروف (ا، ب، پ، ت، س) براہ راست baseline پر کھڑے ہوتے ہیں، جبکہ نیچے والے عناصر (پ، ی، گ، ج جیسے حروف میں) اس کے نیچے پھیلے ہوتے ہیں۔
بنیادی لکیر فونٹ میٹرکس میں واحد حوالہ نقطہ نہیں ہے۔ اس کے علاوہ موجود ہیں: x-height (چھوٹے حروف کی اونچائی)، cap-height (بڑے حروف کی اونچائی)، ascender-line (اوپری عناصر کی لکیر) اور descender-line (نیچے والے عناصر کی لکیر)۔ baseline اور descender-line کے درمیان فاصلہ نیچے والے عنصر کا تعین کرتا ہے، اور baseline اور ascender-line کے درمیان فاصلہ اوپر والے عنصر کا تعین کرتا ہے۔ یہ میٹرکس مکمل سطر کی اونچائی بناتے ہیں اور line-height کے حساب کو متاثر کرتے ہیں۔
Bringhurst — The Elements of Typographic Style (2024) کے مطابق، baseline واحد عالمگیر میٹرک ہے جو ایک ہی ٹائپ فیس کے تمام فونٹس کے لیے یکساں ہے۔ جہاں x-height اور cap-height ایک اسٹائل سے دوسرے اسٹائل میں بدلتے ہیں، وہاں baseline فونٹ کے کوآرڈینیٹ گرڈ کے نسبت ایک مستقل پوزیشن برقرار رکھتا ہے۔ یہ baseline کو انٹرفیس میں عناصر کے درمیان صف بندی کے لیے ایک قابل اعتماد حوالہ بناتا ہے۔
موبائل انٹرفیس میں، baseline کو غیر متنی عناصر کے ساتھ ٹیکسٹ کو سیدھ میں لانے کے لیے ایک حوالہ لکیر کے طور پر استعمال کیا جاتا ہے۔ جب ٹیکسٹ کے ساتھ کوئی آئیکن، بٹن یا تصویر رکھی جاتی ہے، تو صرف انہیں مرکز میں رکھنا کافی نہیں ہے — ٹیکسٹ بصری طور پر منتقل نظر آتا ہے اگر اس کا baseline ملحقہ جزو کے مرکز یا baseline سے مماثل نہ ہو۔
ایک عام منظرنامہ سیٹنگز کی فہرست یا نیویگیشن میں آئیکن اور ٹیکسٹ والی قطار ہے۔ اگر آئیکن اور ٹیکسٹ کو مرکز میں رکھا جائے تو ٹیکسٹ بصری طور پر اونچا نظر آئے گا کیونکہ baseline کنٹینر کے ہندسی مرکز سے نیچے واقع ہے۔ حل یہ ہے کہ آئیکن کو ٹیکسٹ baseline پر سیدھ میں لایا جائے۔ Material Design (2025) موبائل ایپلیکیشنز میں ٹیکسٹ اور آئیکن والی تمام مخلوط قطاروں کے لیے اس طریقہ کار کی سفارش کرتا ہے۔
| منظرنامہ | مرکز میں صف بندی | Baseline صف بندی |
|---|---|---|
| آئیکن + ٹیکسٹ | ٹیکسٹ آئیکن سے اوپر نظر آتا ہے | آئیکن اور ٹیکسٹ baseline مماثل ہیں |
| ٹیکسٹ + ٹیکسٹ | مختلف سائز جھٹکا پیدا کرتے ہیں | واحد baseline، واضح درجہ بندی |
| بٹن کے ساتھ ٹیکسٹ | ٹیکسٹ مرکز سے ہٹا ہوا | ٹیکسٹ بصری طور پر مرکز میں |
| سرخی + کیپشن | سطور کا بصری ٹوٹنا | سطور تال میل اور مربوط |
Baseline کے ذریعے بصری صف بندی خاص طور پر اسکرین فارمز کے لیے اہم ہے: ان پٹ فیلڈز، لیبلز اور خرابی کے پیغامات ایک پیچیدہ ٹائپوگرافک گرڈ بناتے ہیں، اور صرف 1–2 پکسلز کا baseline ہٹاؤ بھی ادراک کو نمایاں طور پر خراب کرتا ہے۔
iOS ڈویلپمنٹ میں، baseline کئی میکانزم کے ذریعے سپورٹ کیا جاتا ہے، Auto Layout سے لے کر SwiftUI لے آؤٹ سسٹم تک۔ UIKit میں، ملحقہ عناصر کے نسبت ٹیکسٹ کی پوزیشننگ کے لیے .firstBaseline اور .lastBaseline خصوصیات کے ساتھ NSLayoutConstraint استعمال کیا جاتا ہے۔ پہلا ایک سطر والے ٹیکسٹ کے لیے موزوں ہے، دوسرا متعدد سطور والے ٹیکسٹ کے لیے جہاں آخری سطر اہم ہے۔
// UIKit: لیبل اور آئیکن کو baseline کے ذریعے سیدھ میں لائیں
let label = UILabel()
label.text = "ترتیبات"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
SwiftUI میں، baseline صف بندی حسب ضرورت AlignmentGuide کے ذریعے نافذ کی جاتی ہے۔ ڈیفالٹ طور پر، SwiftUI عناصر کو مرکز میں سیدھ میں لاتا ہے، لیکن آئیکن والے ٹیکسٹ لیبلز کے لیے، baseline زیادہ درست نتیجہ دیتا ہے۔ SwiftUI بلٹ ان VerticalAlignment.firstTextBaseline اور .lastTextBaseline فراہم کرتا ہے۔
// SwiftUI: HStack میں baseline صف بندی
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("ترتیبات")
.font(.title3)
}
Apple HIG — Typography (2025) کے مطابق، SwiftUI میں firstTextBaseline کا استعمال مرکز میں صف بندی کے مقابلے میں دستی پیڈنگ ایڈجسٹمنٹ کو 40% کم کرتا ہے۔ یہ خاص طور پر متحرک اقسام والی فہرستوں میں نمایاں ہے، جہاں صارف کی رسائی کی ترتیبات کے مطابق فونٹ کا سائز تبدیل ہوتا ہے۔
Baseline ویلیو فونٹ API کے ذریعے حاصل کی جا سکتی ہے۔ UIKit میں، UIFont.ascender پراپرٹی baseline سے سطر کے اوپری حصے تک کا فاصلہ لوٹاتی ہے، اور UIFont.descender baseline سے نیچے تک کا فاصلہ (منفی قدر) لوٹاتی ہے۔ leading کو مدنظر رکھتے ہوئے ascender اور descender کا مجموعہ مکمل سطر کی اونچائی دیتا ہے۔
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // baseline سے اوپر تک کا فاصلہ
let descent = font.descender // منفی، baseline کے نیچے
let totalHeight = font.lineHeight // مکمل سطر کی اونچائی
Android ڈویلپمنٹ میں، baseline کلاسک View سسٹم اور Jetpack Compose دونوں میں سپورٹ کیا جاتا ہے۔ View سسٹم میں، baseline صف بندی کے لیے ALIGN_BASELINE اور ALIGN_TOP قوانین کے ساتھ RelativeLayout.LayoutParams استعمال کیا جاتا ہے۔ TextView کے لیے android:baselineAligned وصف دستیاب ہے، جو LinearLayout میں ٹیکسٹ عناصر کی خودکار صف بندی کو کنٹرول کرتا ہے۔
<!-- Android XML: baseline alignment in LinearLayout -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:baselineAligned="true">
<TextView
android:id="@+id/label"
android:text="Price"
android:textSize="16sp" />
<TextView
android:id="@+id/value"
android:text="$24.99"
android:textSize="20sp"
android:layout_alignBaseline="@id/label" />
</LinearLayout>
Jetpack Compose میں، baseline صف بندی Modifier.alignWithBaseline یا حسب ضرورت لے آؤٹ میں AlignmentLine کے ذریعے نافذ کی جاتی ہے۔ Compose بلٹ ان FirstBaseline اور LastBaseline فراہم کرتا ہے، جو Column اور Row میں مختلف سائز کے ٹیکسٹ عناصر کو سیدھ میں لانے کے لیے استعمال کیا جا سکتا ہے۔
// Jetpack Compose: Modifier کے ذریعے baseline صف بندی
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "ترتیبات",
style = MaterialTheme.typography.titleMedium
)
}
Android Developers — Typography and Alignment (2025) کے مطابق، Jetpack Compose میں baseline صف بندی دستی طور پر پیڈنگ یا آفسیٹ سیٹ کرنے کے مقابلے میں ٹیکسٹ کی غلط پوزیشننگ سے متعلق UI ٹیسٹ بگز کو 30% کم کرتی ہے۔
Flutter بنیادی لکیر کے ساتھ کام کرنے کے لیے دو بلٹ ان میکانزم فراہم کرتا ہے: ٹائپوگرافک کنونشن (alphabetic یا ideographic) منتخب کرنے کے لیے TextBaseline enum اور Row اور Column میں صف بندی کے لیے CrossAxisAlignment.baseline۔ TextBaseline.alphabetic مغربی ٹائپوگرافی سے مطابقت رکھتا ہے، جبکہ TextBaseline.ideographic مشرقی ایشیائی ٹائپوگرافی سے مطابقت رکھتا ہے۔
// Flutter: baseline صف بندی
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('ترتیبات', style: TextStyle(fontSize: 20)),
],
)
عین پوزیشننگ کے لیے، Flutter Baseline ویجیٹ بھی فراہم کرتا ہے، جو چائلڈ عنصر کو اس طرح منتقل کرتا ہے کہ اس کا baseline کنٹینر کے اوپری حصے سے ایک مخصوص فاصلے پر ہو۔ یہ غیر معیاری صف بندی کے ساتھ حسب ضرورت ٹیکسٹ لے آؤٹ بناتے وقت مفید ہے۔
// Flutter: Baseline ویجیٹ
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'سیدھ میں لایا گیا متن',
style: TextStyle(fontSize: 24),
),
)
Flutter Documentation — Layout and Typography (2025) کے مطابق، CrossAxisAlignment.baseline دستی طور پر پیڈنگ کا حساب لگائے بغیر Flutter میں مختلف فونٹ سائز کے ٹیکسٹ کو درست طریقے سے سیدھ میں لانے کا واحد طریقہ ہے۔ یہ خاص طور پر ان قطاروں کے لیے اہم ہے جہاں سرخیاں اور کیپشن ملے جلے ہوتے ہیں، جیسے قیمت اور ڈسکاؤنٹ والے پروڈکٹ کارڈز میں۔
سب سے عام غلطیوں میں سے ایک آئیکن یا تصویر والی قطاروں میں ٹیکسٹ کو مرکز میں رکھنا ہے۔ جب آئیکن اور ٹیکسٹ کو کنٹینر کے اندر مرکز میں رکھا جاتا ہے، تو ٹیکسٹ بصری طور پر آئیکن کے نسبت اوپر کی طرف منتقل ہو جاتا ہے۔ ایسا اس لیے ہوتا ہے کیونکہ ٹیکسٹ کا مرکز اس کے baseline سے اوپر ہوتا ہے، جبکہ آئیکن کا مرکز ہندسی مرکز سے مماثل ہوتا ہے۔
NN Group — Typography in UI Design (2025) کے مطابق، غلط baseline صف بندی صارف کی فہرست اسکین کرنے کے وقت کو صحیح طریقے سے سیدھ میں لائے گئے انٹرفیس کے مقابلے میں 22% بڑھا دیتی ہے۔ یہ فہرستوں اور فارمز کے لیے ایک اہم میٹرک ہے جو زیادہ تر موبائل ایپلیکیشنز کی بنیاد بناتے ہیں۔
اکثر پوچھے گئے سوالات
Baseline وہ افقی لکیر ہے جس پر حروف واقع ہوتے ہیں، جبکہ line-height دو متواتر سطروں کی بنیادی لکیروں کے درمیان فاصلہ ہے۔ Baseline عمودی جگہ میں ٹیکسٹ کی پوزیشن کا تعین کرتا ہے، جبکہ line-height سطروں کے درمیان تال کا تعین کرتا ہے۔ دونوں تصورات آپس میں جڑے ہوئے ہیں: line-height ایک سطر کے baseline سے اگلی سطر کے baseline تک حساب کیا جاتا ہے۔
UIKit میں، baseline ویلیو UILabel، UITextView اور UIButton کی lastBaselineAnchor یا firstBaselineAnchor پراپرٹی کے ذریعے حاصل کی جا سکتی ہے۔ فونٹ میٹرکس تک براہ راست رسائی کے لیے، UIFont.ascender (baseline سے اوپر تک کا فاصلہ) اور UIFont.descender (baseline سے نیچے تک کا فاصلہ، منفی نشان کے ساتھ) استعمال کریں۔
ہاں، SwiftUI متحرک اقسام (Dynamic Type) کے ساتھ baseline صف بندی کو سپورٹ کرتا ہے۔ .firstTextBaseline اور .lastTextBaseline کے ذریعے صف بندی خود بخود فونٹ سائز کی تبدیلی کے مطابق ڈھل جاتی ہے۔ یہ دستی پیڈنگ ایڈجسٹمنٹ کی ضرورت کے بغیر فونٹ سائز بڑھنے پر ٹیکسٹ کی صحیح پوزیشننگ فراہم کرتا ہے۔
Jetpack Compose میں، Row کے verticalAlignment پیرامیٹر میں Alignment.FirstBaseline استعمال کریں: Row(verticalAlignment = Alignment.FirstBaseline)۔ اس Row میں رکھے گئے Icon اور Text کے لیے، Compose خود بخود ان کی بنیادی لکیروں کو سیدھ میں لائے گا۔ اگر آپ کو آئیکن کو مزید درست طریقے سے ایڈجسٹ کرنے کی ضرورت ہو، تو Modifier.alignWithBaseline استعمال کریں۔
کسٹم فونٹس کے اپنے میٹرکس (ascender، descender اور x-height) ہوتے ہیں جو سسٹم فونٹس سے مختلف ہو سکتے ہیں۔ اگر baseline صف بندی غلط نتیجہ دیتی ہے تو پلیٹ فارم API (iOS میں UIFont.descender، Android میں Paint.getFontMetrics()) کے ذریعے فونٹ میٹرکس چیک کریں۔ آرائشی فونٹس کو اضافی 1–2 پکسلز ایڈجسٹمنٹ کی ضرورت ہو سکتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں