Baseline là một đường ngang vô hình mà trên đó tất cả các ký tự phông chữ được đặt. Hầu hết các chữ cái nằm trên baseline, trong khi các yếu tố descender kéo dài xuống dưới. Trong giao diện di động, baseline được sử dụng để căn chỉnh chính xác văn bản với các yếu tố khác — biểu tượng, nút bấm, hình ảnh. Theo Material Design Typography Guidelines (2025), căn chỉnh nhất quán theo baseline cải thiện hệ thống phân cấp trực quan của giao diện và giảm tải nhận thức khi quét nội dung.
Các điểm chính
Baseline (đường cơ sở) là một khái niệm cơ bản của typography xác định trục ngang mà trên đó các ký tự phông chữ được đặt. Mỗi glyph trong phông chữ kỹ thuật số có một điểm gắn với baseline — dọc theo đường này các chữ cái được căn chỉnh khi hiển thị văn bản. Hầu hết các chữ cái viết thường (a, e, o, n, c) nằm trực tiếp trên baseline, trong khi các yếu tố descender (trong các chữ p, y, g, j) kéo dài xuống dưới.
Đường cơ sở không phải là điểm tham chiếu duy nhất trong số liệu phông chữ. Bên cạnh nó còn có: x-height (chiều cao chữ thường), cap-height (chiều cao chữ hoa), ascender-line (đường của các yếu tố kéo dài lên trên) và descender-line (đường của các yếu tố kéo dài xuống dưới). Khoảng cách giữa baseline và descender-line xác định descender dưới, và giữa baseline và ascender-line xác định ascender trên. Các số liệu này tạo thành chiều cao đầy đủ của dòng và ảnh hưởng đến việc tính toán line-height.
Theo Bringhurst — The Elements of Typographic Style (2024), baseline là số liệu phổ quát duy nhất thống nhất cho tất cả các phông chữ cùng một kiểu chữ. Trong khi x-height và cap-height thay đổi theo từng kiểu, baseline duy trì vị trí không đổi so với lưới tọa độ của phông chữ. Điều này làm cho baseline trở thành một tham chiếu đáng tin cậy cho việc căn chỉnh giữa các phần tử trong giao diện.
Trong giao diện di động, baseline được sử dụng như một đường tham chiếu để căn chỉnh văn bản với các yếu tố phi văn bản. Khi một biểu tượng, nút bấm hoặc hình ảnh được đặt cạnh văn bản, chỉ căn giữa chúng là không đủ — văn bản trông bị lệch về mặt thị giác nếu baseline của nó không trùng với tâm hoặc baseline của thành phần lân cận.
Một kịch bản điển hình là một hàng có biểu tượng và văn bản trong danh sách cài đặt hoặc điều hướng. Nếu biểu tượng và văn bản được căn giữa, văn bản sẽ trông cao hơn về mặt thị giác vì baseline nằm dưới tâm hình học của container. Giải pháp là căn chỉnh biểu tượng theo baseline của văn bản. Material Design (2025) khuyến nghị cách tiếp cận này cho tất cả các hàng hỗn hợp có văn bản và biểu tượng trong ứng dụng di động.
| Kịch bản | Căn giữa | Căn chỉnh theo baseline |
|---|---|---|
| Biểu tượng + Văn bản | Văn bản trông cao hơn biểu tượng | Biểu tượng và baseline văn bản trùng khớp |
| Văn bản + Văn bản | Kích thước khác nhau tạo rung động | Baseline duy nhất, phân cấp rõ ràng |
| Nút có văn bản | Văn bản lệch khỏi trung tâm | Văn bản được căn giữa quang học |
| Tiêu đề + chú thích | Đứt gãy thị giác của dòng | Các dòng nhịp nhàng và gắn kết |
Căn chỉnh quang học theo baseline đặc biệt quan trọng đối với các biểu mẫu trên màn hình: trường nhập liệu, nhãn và thông báo lỗi tạo thành một lưới typography phức tạp, và chỉ cần lệch baseline 1–2 pixel cũng làm suy giảm đáng kể nhận thức.
Trong phát triển iOS, baseline được hỗ trợ thông qua nhiều cơ chế, từ Auto Layout đến hệ thống bố cục SwiftUI. Trong UIKit, để định vị văn bản so với các yếu tố lân cận, sử dụng NSLayoutConstraint với các thuộc tính .firstBaseline và .lastBaseline. Cái đầu tiên phù hợp cho văn bản một dòng, cái thứ hai cho văn bản nhiều dòng nơi dòng cuối cùng quan trọng.
// UIKit: căn chỉnh nhãn và biểu tượng theo baseline
let label = UILabel()
label.text = "Cài đặt"
let icon = UIImageView(image: UIImage(systemName: "gear"))
let constraint = label.lastBaselineAnchor
.constraint(equalTo: icon.lastBaselineAnchor)
constraint.isActive = true
Trong SwiftUI, căn chỉnh theo baseline được thực hiện thông qua AlignmentGuide tùy chỉnh. Theo mặc định, SwiftUI căn chỉnh các yếu tố vào trung tâm, nhưng đối với nhãn văn bản có biểu tượng, baseline cho kết quả chính xác hơn. SwiftUI cung cấp VerticalAlignment.firstTextBaseline và .lastTextBaseline tích hợp sẵn.
// SwiftUI: căn chỉnh baseline trong HStack
HStack(alignment: .firstTextBaseline) {
Image(systemName: "gear")
Text("Cài đặt")
.font(.title3)
}
Theo Apple HIG — Typography (2025), sử dụng firstTextBaseline trong SwiftUI giảm 40% điều chỉnh padding thủ công so với căn chỉnh trung tâm. Điều này đặc biệt đáng chú ý trong danh sách với kiểu động, nơi kích thước phông chữ thay đổi theo cài đặt trợ năng của người dùng.
Giá trị baseline có thể được lấy thông qua API phông chữ. Trong UIKit, thuộc tính UIFont.ascender trả về khoảng cách từ baseline đến đỉnh dòng, và UIFont.descender trả về khoảng cách từ baseline đến đáy (giá trị âm). Tổng của ascender và descender, có tính đến leading, cho chiều cao đầy đủ của dòng.
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // khoảng cách từ baseline đến đỉnh
let descent = font.descender // âm, dưới baseline
let totalHeight = font.lineHeight // chiều cao đầy đủ dòng
Trong phát triển Android, baseline được hỗ trợ cả trong hệ thống View cổ điển và Jetpack Compose. Trong hệ thống View, để căn chỉnh theo baseline, sử dụng RelativeLayout.LayoutParams với các quy tắc ALIGN_BASELINE và ALIGN_TOP. TextView có thuộc tính android:baselineAligned kiểm soát việc căn chỉnh tự động các yếu tố văn bản trong 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>
Trong Jetpack Compose, căn chỉnh theo baseline được thực hiện thông qua Modifier.alignWithBaseline hoặc AlignmentLine trong bố cục tùy chỉnh. Compose cung cấp FirstBaseline và LastBaseline tích hợp sẵn, có thể được sử dụng trong Column và Row để căn chỉnh các yếu tố văn bản có kích thước khác nhau.
// Jetpack Compose: căn chỉnh baseline qua Modifier
Row(
verticalAlignment = Alignment.FirstBaseline
) {
Icon(
imageVector = Icons.Default.Settings,
contentDescription = null
)
Text(
text = "Cài đặt",
style = MaterialTheme.typography.titleMedium
)
}
Theo Android Developers — Typography and Alignment (2025), căn chỉnh theo baseline trong Jetpack Compose giảm 30% lỗi kiểm thử UI liên quan đến định vị văn bản không chính xác so với việc đặt padding hoặc offset thủ công.
Flutter cung cấp hai cơ chế tích hợp để làm việc với đường cơ sở: enum TextBaseline để chọn quy ước typography (alphabetic hoặc ideographic) và CrossAxisAlignment.baseline để căn chỉnh trong Row và Column. TextBaseline.alphabetic tương ứng với typography phương Tây, trong khi TextBaseline.ideographic tương ứng với typography Đông Á.
// Flutter: căn chỉnh baseline
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Icon(Icons.settings),
Text('Cài đặt', style: TextStyle(fontSize: 20)),
],
)
Để định vị chính xác, Flutter cũng cung cấp widget Baseline, dịch chuyển phần tử con sao cho baseline của nó ở một khoảng cách xác định từ đỉnh của container. Điều này hữu ích khi tạo bố cục văn bản tùy chỉnh với căn chỉnh không chuẩn.
// Flutter: widget Baseline
Baseline(
baseline: 40.0,
baselineType: TextBaseline.alphabetic,
child: Text(
'Văn bản đã căn chỉnh',
style: TextStyle(fontSize: 24),
),
)
Theo Flutter Documentation — Layout and Typography (2025), CrossAxisAlignment.baseline là cách duy nhất để căn chỉnh chính xác văn bản có kích thước phông chữ khác nhau trong Flutter mà không cần tính toán padding thủ công. Điều này đặc biệt quan trọng đối với các hàng nơi tiêu đề và chú thích được trộn lẫn, như trong thẻ sản phẩm có giá và chiết khấu.
Một trong những lỗi phổ biến nhất là căn giữa văn bản trong các hàng có biểu tượng hoặc hình ảnh. Khi một biểu tượng và văn bản được căn giữa trong container, văn bản dịch chuyển trực quan lên trên so với biểu tượng. Điều này xảy ra vì tâm của văn bản nằm trên baseline của nó, trong khi tâm của biểu tượng trùng với tâm hình học.
Theo NN Group — Typography in UI Design (2025), căn chỉnh baseline không chính xác làm tăng thời gian quét danh sách của người dùng lên 22% so với giao diện được căn chỉnh đúng cách. Đây là một số liệu quan trọng đối với danh sách và biểu mẫu, vốn là nền tảng của hầu hết các ứng dụng di động.
Các câu hỏi thường gặp
Baseline là đường ngang mà trên đó các ký tự nằm, trong khi line-height là khoảng cách giữa các đường cơ sở của hai dòng liên tiếp. Baseline xác định vị trí của văn bản trong không gian dọc, trong khi line-height xác định nhịp điệu giữa các dòng. Cả hai khái niệm có mối quan hệ tương hỗ: line-height được tính từ baseline của một dòng đến baseline của dòng tiếp theo.
Trong UIKit, giá trị baseline có thể được lấy thông qua thuộc tính lastBaselineAnchor hoặc firstBaselineAnchor của UILabel, UITextView và UIButton. Để truy cập trực tiếp vào số liệu phông chữ, sử dụng UIFont.ascender (khoảng cách từ baseline đến đỉnh) và UIFont.descender (khoảng cách từ baseline đến đáy, với dấu âm).
Có, SwiftUI hỗ trợ căn chỉnh baseline với kiểu động (Dynamic Type). Căn chỉnh qua .firstTextBaseline và .lastTextBaseline tự động thích ứng với sự thay đổi kích thước phông chữ. Điều này đảm bảo định vị văn bản chính xác khi tăng kích thước phông chữ mà không cần điều chỉnh padding thủ công.
Trong Jetpack Compose, sử dụng Alignment.FirstBaseline trong tham số verticalAlignment của Row: Row(verticalAlignment = Alignment.FirstBaseline). Đối với Icon và Text được đặt trong Row này, Compose sẽ tự động căn chỉnh các đường cơ sở của chúng. Nếu bạn cần điều chỉnh biểu tượng chính xác hơn, hãy sử dụng Modifier.alignWithBaseline.
Phông chữ tùy chỉnh có số liệu riêng: ascender, descender và x-height, có thể khác với phông chữ hệ thống. Nếu căn chỉnh baseline cho kết quả không chính xác, hãy kiểm tra số liệu phông chữ qua API nền tảng (UIFont.descender trên iOS, Paint.getFontMetrics() trên Android). Phông chữ trang trí có thể cần điều chỉnh thêm 1–2 pixel.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm