Baseline, tüm yazı tipi karakterlerinin üzerine yerleştirildiği görünmez bir yatay çizgidir. Çoğu harf baseline üzerinde dururken, alt uzantılar (descenders) bunun altına uzanır. Mobil arayüzlerde baseline, metnin diğer öğelerle (simgeler, düğmeler, görseller) hassas bir şekilde hizalanması için kullanılır. Material Design Typography Guidelines (2025)'e göre, baseline boyunca tutarlı hizalama, arayüzün görsel hiyerarşisini iyileştirir ve içerik tararken bilişsel yükü azaltır.
Önemli Noktalar
Baseline (taban çizgisi), yazı tipi karakterlerinin üzerine yerleştirildiği yatay ekseni tanımlayan temel bir tipografi kavramıdır. Dijital bir yazı tipindeki her glifin baseline'a bir bağlanma noktası vardır — metin işlenirken harfler bu çizgi boyunca hizalanır. Küçük harflerin çoğu (a, e, o, n, c) doğrudan baseline üzerinde dururken, alt uzantı öğeleri (p, y, g, j harflerinde) bunun altına uzanır.
Taban çizgisi, yazı tipi metriklerindeki tek referans noktası değildir. Bunun yanında şunlar vardır: x-height (küçük harflerin yüksekliği), cap-height (büyük harflerin yüksekliği), ascender-line (üst çıkıntı öğelerinin çizgisi) ve descender-line (alt çıkıntı öğelerinin çizgisi). Baseline ile descender-line arasındaki mesafe alt çıkıntıyı, baseline ile ascender-line arasındaki mesafe ise üst çıkıntıyı belirler. Bu metrikler tam satır yüksekliğini oluşturur ve line-height hesaplamasını etkiler.
Bringhurst — The Elements of Typographic Style (2024)'e göre baseline, aynı yazı yüzünün tüm yazı tipleri için tutarlı olan tek evrensel metriktir. x-height ve cap-height stilden stile değişirken, baseline yazı tipinin koordinat ızgarasına göre sabit bir konumu korur. Bu, baseline'ı arayüzlerde öğeler arası hizalama için güvenilir bir referans haline getirir.
Mobil arayüzlerde baseline, metni metin dışı öğelerle hizalamak için bir referans çizgisi olarak kullanılır. Metnin yanına bir simge, düğme veya görsel yerleştirildiğinde, bunları ortalamak yeterli değildir — baseline'ı bitişik bileşenin merkezi veya baseline'ı ile çakışmazsa metin optik olarak kaymış görünür.
Tipik bir senaryo, ayarlar listesinde veya navigasyonda bir simge ve metin içeren satırdır. Simge ve metin ortalanırsa, baseline kap-ın geometrik merkezinin altında olduğu için metin görsel olarak daha yüksek görünür. Çözüm, simgeyi metin baseline'ına hizalamaktır. Material Design (2025), mobil uygulamalarda metin ve simgeler içeren tüm karma satırlar için bu yaklaşımı önerir.
| Senaryo | Merkez Hizalama | Baseline Hizalama |
|---|---|---|
| Simge + Metin | Metin simgenin üzerinde görünür | Simge ve metin baseline'ı çakışır |
| Metin + Metin | Farklı boyutlar titreme yaratır | Tek baseline, net hiyerarşi |
| Metinli düğme | Metin merkezden kaymış | Metin optik olarak ortalanmış |
| Başlık + altyazı | Satırların görsel kopukluğu | Satırlar ritmik ve bağlantılı |
Baseline ile optik hizalama özellikle ekran formları için önemlidir: giriş alanları, etiketler ve hata mesajları karmaşık bir tipografik ızgara oluşturur ve baseline'da 1–2 piksellik bir kayma bile algıyı belirgin şekilde bozar.
iOS geliştirmesinde baseline, Auto Layout'tan SwiftUI düzen sistemine kadar birçok mekanizma aracılığıyla desteklenir. UIKit'te, metni bitişik öğelere göre konumlandırmak için .firstBaseline ve .lastBaseline özniteliklerine sahip NSLayoutConstraint kullanılır. İlki tek satırlı metin için uygundur, ikincisi son satırın önemli olduğu çok satırlı metin için uygundur.
// UIKit: etiketi ve simgeyi baseline ile hizala
let label = UILabel()
label.text = "Ayarlar"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
SwiftUI'de baseline hizalaması, özel AlignmentGuide aracılığıyla uygulanır. Varsayılan olarak SwiftUI öğeleri merkeze hizalar, ancak simgeli metin etiketleri için baseline daha doğru bir sonuç verir. SwiftUI, yerleşik VerticalAlignment.firstTextBaseline ve .lastTextBaseline sağlar.
// SwiftUI: HStack'te baseline hizalaması
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Ayarlar")
.font(.title3)
}
Apple HIG — Typography (2025)'e göre, SwiftUI'de firstTextBaseline kullanmak, merkez hizalamaya kıyasla manuel padding ayarlamalarını %40 azaltır. Bu, özellikle kullanıcının erişilebilirlik ayarlarına göre yazı tipi boyutunun değiştiği dinamik türlere sahip listelerde belirgindir.
Baseline değeri, yazı tipi API'si aracılığıyla elde edilebilir. UIKit'te UIFont.ascender özelliği baseline'dan satırın üst kısmına olan mesafeyi döndürür ve UIFont.descender baseline'dan alt kısma olan mesafeyi (negatif değer) döndürür. leading hesaba katılarak ascender ve descender toplamı tam satır yüksekliğini verir.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // baseline'dan üste olan mesafe
let descent = font.descender // negatif, baseline'ın altında
let totalHeight = font.lineHeight // tam satır yüksekliği
Android geliştirmesinde baseline, klasik View sistemi ve Jetpack Compose'da desteklenir. View sisteminde baseline hizalaması için ALIGN_BASELINE ve ALIGN_TOP kurallarına sahip RelativeLayout.LayoutParams kullanılır. TextView, LinearLayout'ta metin öğelerinin otomatik hizalamasını kontrol eden android:baselineAligned özniteliğine sahiptir.
<!-- 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'da baseline hizalaması, Modifier.alignWithBaseline veya özel düzenlerde AlignmentLine aracılığıyla uygulanır. Compose, Column ve Row'da farklı boyutlardaki metin öğelerini hizalamak için kullanılabilen yerleşik FirstBaseline ve LastBaseline sağlar.
// Jetpack Compose: Modifier aracılığıyla baseline hizalaması
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Ayarlar",
style = MaterialTheme.typography.titleMedium
)
}
Android Developers — Typography and Alignment (2025)'e göre, Jetpack Compose'da baseline hizalaması, manuel olarak padding veya offset ayarlamaya kıyasla metnin hatalı konumlandırılmasıyla ilgili UI test hatalarını %30 azaltır.
Flutter, taban çizgisiyle çalışmak için iki yerleşik mekanizma sağlar: tipografi kuralını (alphabetic veya ideographic) seçmek için TextBaseline enum'u ve Row ile Column'da hizalama için CrossAxisAlignment.baseline. TextBaseline.alphabetic Batı tipografisine karşılık gelirken, TextBaseline.ideographic Doğu Asya tipografisine karşılık gelir.
// Flutter: baseline hizalaması
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Ayarlar', style: TextStyle(fontSize: 20)),
],
)
Hassas konumlandırma için Flutter ayrıca Baseline widget'ını sunar; bu, alt öğeyi, baseline'ı kabın üst kısmından belirtilen bir uzaklıkta olacak şekilde kaydırır. Bu, standart olmayan hizalamalarla özel metin düzenleri oluştururken kullanışlıdır.
// Flutter: Baseline widget'ı
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Hizalanmış metin',
style: TextStyle(fontSize: 24),
),
)
Flutter Documentation — Layout and Typography (2025)'e göre CrossAxisAlignment.baseline, padding'i manuel olarak hesaplamadan Flutter'da farklı yazı tipi boyutlarındaki metni doğru bir şekilde hizalamanın tek yoludur. Bu, özellikle fiyat ve indirim içeren ürün kartlarında olduğu gibi başlıkların ve altyazıların karıştığı satırlar için önemlidir.
En yaygın hatalardan biri, simge veya görsel içeren satırlarda metni ortalamaktır. Bir simge ve metin bir kap içinde ortalandığında, metin görsel olarak simgeye göre yukarı kayar. Bunun nedeni, metnin merkezinin baseline'ının üzerinde olması, simgenin merkezinin ise geometrik merkezle çakışmasıdır.
NN Group — Typography in UI Design (2025)'e göre, yanlış baseline hizalaması, kullanıcının listeyi tarama süresini doğru hizalanmış bir arayüze kıyasla %22 artırır. Bu, çoğu mobil uygulamanın temelini oluşturan listeler ve formlar için önemli bir ölçüttür.
Sıkça Sorulan Sorular
Baseline, karakterlerin üzerinde durduğu yatay çizgidir, line-height ise ardışık iki satırın taban çizgileri arasındaki mesafedir. Baseline, metnin dikey alandaki konumunu belirlerken, line-height satırlar arası ritmi belirler. Her iki kavram birbiriyle ilişkilidir: line-height, bir satırın baseline'ından sonraki satırın baseline'ına kadar hesaplanır.
UIKit'te baseline değeri, UILabel, UITextView ve UIButton'ın lastBaselineAnchor veya firstBaselineAnchor özelliği aracılığıyla elde edilebilir. Yazı tipi metriklerine doğrudan erişmek için UIFont.ascender (baseline'dan üste olan mesafe) ve UIFont.descender (baseline'dan alta olan mesafe, negatif işaretli) kullanın.
Evet, SwiftUI dinamik türlerle (Dynamic Type) baseline hizalamasını destekler. .firstTextBaseline ve .lastTextBaseline aracılığıyla hizalama, yazı tipi boyutu değişikliklerine otomatik olarak uyum sağlar. Bu, manuel padding ayarlamaları gerektirmeden yazı tipi boyutu büyüdüğünde doğru metin konumlandırması sağlar.
Jetpack Compose'ta Row'un verticalAlignment parametresinde Alignment.FirstBaseline kullanın: Row(verticalAlignment = Alignment.FirstBaseline). Bu Row'a yerleştirilen Icon ve Text için Compose, bunların taban çizgilerini otomatik olarak hizalar. Simgeyi daha hassas ayarlamanız gerekiyorsa Modifier.alignWithBaseline kullanın.
Özel yazı tiplerinin kendi metrikleri (ascender, descender ve x-height) vardır ve bunlar sistem yazı tiplerinden farklı olabilir. Baseline hizalaması hatalı bir sonuç verirse, platform API'si (iOS'ta UIFont.descender, Android'de Paint.getFontMetrics()) aracılığıyla yazı tipi metriklerini kontrol edin. Dekoratif yazı tipleri ek 1–2 piksellik ayar gerektirebilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun