Baseline ในการพัฒนาแอปมือถือ: คืออะไร ความหมาย และหน้าที่

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-24 เวลาอ่าน: 10 นาที

Baseline คือเส้นแนวนอนที่มองไม่เห็นซึ่งใช้วางอักขระของฟอนต์ทั้งหมด ตัวอักษรส่วนใหญ่อยู่บน baseline ในขณะที่ส่วนที่ยื่นลงล่าง (descenders) อยู่ต่ำกว่าเส้นนี้ ในอินเทอร์เฟซมือถือ baseline ถูกใช้เพื่อจัดเรียงข้อความกับองค์ประกอบอื่นๆ อย่างแม่นยำ — ไอคอน ปุ่ม รูปภาพ ตาม Material Design Typography Guidelines (2025) การจัดเรียงที่สอดคล้องตาม baseline ช่วยปรับปรุงลำดับชั้นทางภาพของอินเทอร์เฟซและลดภาระทางปัญญาเมื่อสแกนเนื้อหา

ประเด็นสำคัญ

  • Baseline คือเส้นสมมติที่ใช้วางอักขระของฟอนต์ ยกเว้นส่วนที่ยื่นลงล่าง
  • การจัดเรียง — baseline ใช้เพื่อจัดตำแหน่งข้อความเทียบกับส่วนประกอบ UI ที่อยู่ติดกัน
  • แพลตฟอร์ม — iOS มี NSLayoutConstraint สำหรับ baseline, Android ใช้ Modifier.alignWithBaseline
  • หลายบรรทัด — ในหัวข้อหลายบรรทัด baseline ช่วยรักษาจังหวะบรรทัดที่สอดคล้องกัน
  • ความสม่ำเสมอ — การจัดเรียงตาม baseline ที่สม่ำเสมอช่วยปรับปรุงการรับรู้อินเทอร์เฟซและลดสัญญาณรบกวนทางภาพ

Baseline ในการพิมพ์คืออะไร

Baseline (เส้นฐาน) เป็นแนวคิดพื้นฐานของการพิมพ์ที่กำหนดแกนแนวนอนซึ่งใช้วางอักขระของฟอนต์ แต่ละกลิฟในฟอนต์ดิจิทัลมีจุดยึดกับ baseline — ตามเส้นนี้ตัวอักษรจะถูกจัดเรียงเมื่อแสดงผลข้อความ อักขระตัวพิมพ์เล็กส่วนใหญ่ (a, e, o, n, c) อยู่บน baseline โดยตรง ในขณะที่ส่วนที่ยื่นลงล่าง (ในตัวอักษร p, y, g, j) อยู่ต่ำกว่าเส้นนี้

เส้นฐานไม่ใช่จุดอ้างอิงเดียวในเมตริกของฟอนต์ นอกจากนี้ยังมี: 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 ทางสายตามีความสำคัญอย่างยิ่งสำหรับ ฟอร์มบนหน้าจอ: ช่องป้อนข้อมูล ป้ายกำกับ และข้อความผิดพลาดก่อตัวเป็นกริดการพิมพ์ที่ซับซ้อน และการเลื่อน baseline เพียง 1–2 พิกเซลก็ทำให้การรับรู้แย่ลงอย่างเห็นได้ชัด

Baseline บน iOS: UIKit และ SwiftUI

ในการพัฒนา iOS baseline รองรับผ่านกลไกหลายอย่าง ตั้งแต่ Auto Layout ไปจนถึงระบบเลย์เอาต์ของ SwiftUI ใน UIKit การจัดตำแหน่งข้อความเทียบกับองค์ประกอบที่อยู่ติดกันใช้ NSLayoutConstraint ด้วยแอตทริบิวต์ .firstBaseline และ .lastBaseline แบบแรกเหมาะสำหรับข้อความบรรทัดเดียว แบบหลังสำหรับข้อความหลายบรรทัดที่บรรทัดสุดท้ายมีความสำคัญ

swift
// 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 ในตัว

swift
// SwiftUI: การจัดเรียงตาม baseline ใน HStack
HStack(alignment: .firstTextBaseline) {
    Image(systemName: "gear")
    Text("การตั้งค่า")
        .font(.title3)
}

ตาม Apple HIG — Typography (2025) การใช้ firstTextBaseline ใน SwiftUI ช่วยลดการปรับ padding ด้วยตนเอง 40% เมื่อเทียบกับการจัดกึ่งกลาง ซึ่งเห็นได้ชัดเจนโดยเฉพาะในรายการที่มีประเภทไดนามิก ซึ่งขนาดฟอนต์เปลี่ยนไปตามการตั้งค่าการเข้าถึงของผู้ใช้

การรับค่า Baseline

ค่า baseline สามารถรับได้ผ่าน API ของฟอนต์ ใน UIKit คุณสมบัติ UIFont.ascender คืนค่าระยะทางจาก baseline ถึงด้านบนของบรรทัด และ UIFont.descender คืนค่าระยะทางจาก baseline ถึงด้านล่าง (ค่าลบ) ผลรวมของ ascender และ descender โดยคำนึงถึง leading ให้ความสูงเต็มของบรรทัด

swift
let font = UIFont.systemFont(ofSize: 17)
let baseline = font.ascender // ระยะทางจาก baseline ถึงด้านบน
let descent = font.descender // ค่าลบ ต่ำกว่า baseline
let totalHeight = font.lineHeight // ความสูงเต็มบรรทัด

Baseline บน Android: ระบบ View และ Compose

ในการพัฒนา Android baseline รองรับทั้งในระบบ View ดั้งเดิมและ Jetpack Compose ในระบบ View การจัดเรียงตาม baseline ใช้ RelativeLayout.LayoutParams ด้วยกฎ ALIGN_BASELINE และ ALIGN_TOP TextView มีแอตทริบิวต์ android:baselineAligned ซึ่งควบคุมการจัดเรียงอัตโนมัติขององค์ประกอบข้อความใน LinearLayout

xml
<!-- 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 เพื่อจัดเรียงองค์ประกอบข้อความที่มีขนาดต่างกัน

kotlin
// Jetpack Compose: การจัดเรียงตาม baseline ผ่าน Modifier
Row(
    verticalAlignment = Alignment.FirstBaseline
) {
    Icon(
        imageVector = Icons.Default.Settings,
        contentDescription = null
    )
    Text(
        text = "การตั้งค่า",
        style = MaterialTheme.typography.titleMedium
    )
}

ตาม Android Developers — Typography and Alignment (2025) การจัดเรียงตาม baseline ใน Jetpack Compose ลดข้อบกพร่องในการทดสอบ UI ที่เกี่ยวข้องกับการจัดตำแหน่งข้อความที่ไม่แม่นยำลง 30% เมื่อเทียบกับการตั้งค่า padding หรือ offset ด้วยตนเอง

Baseline ใน Flutter: TextBaseline และ alignWithBaseline

Flutter มีกลไกในตัวสองอย่างสำหรับการทำงานกับเส้นฐาน: enum TextBaseline สำหรับเลือกข้อตกลงการพิมพ์ (alphabetic หรือ ideographic) และ CrossAxisAlignment.baseline สำหรับการจัดเรียงใน Row และ Column TextBaseline.alphabetic สอดคล้องกับการพิมพ์แบบตะวันตก ในขณะที่ TextBaseline.ideographic สอดคล้องกับการพิมพ์แบบเอเชียตะวันออก

dart
// Flutter: การจัดเรียงตาม baseline
Row(
    crossAxisAlignment: CrossAxisAlignment.baseline,
    textBaseline: TextBaseline.alphabetic,
    children: [
        Icon(Icons.settings),
        Text('การตั้งค่า', style: TextStyle(fontSize: 20)),
    ],
)

สำหรับการจัดตำแหน่งที่แม่นยำ Flutter ยังมีวิดเจ็ต Baseline ที่เลื่อนองค์ประกอบลูกเพื่อให้ baseline อยู่ที่ระยะที่กำหนดจากด้านบนของคอนเทนเนอร์ ซึ่งมีประโยชน์เมื่อสร้างเลย์เอาต์ข้อความที่กำหนดเองด้วยการจัดเรียงที่ไม่เป็นมาตรฐาน

dart
// Flutter: วิดเจ็ต Baseline
Baseline(
    baseline: 40.0,
    baselineType: TextBaseline.alphabetic,
    child: Text(
        'ข้อความที่จัดเรียงแล้ว',
        style: TextStyle(fontSize: 24),
    ),
)

ตาม Flutter Documentation — Layout and Typography (2025) CrossAxisAlignment.baseline เป็นวิธีเดียวในการจัดเรียงข้อความที่มีขนาดฟอนต์ต่างกันใน Flutter อย่างแม่นยำโดยไม่ต้องคำนวณ padding ด้วยตนเอง ซึ่งสำคัญโดยเฉพาะสำหรับแถวที่มีหัวข้อและคำอธิบายผสมกัน เช่น ในบัตรสินค้าที่มีราคาและส่วนลด

ข้อผิดพลาดทั่วไปเมื่อทำงานกับ Baseline

ข้อผิดพลาดที่พบบ่อยที่สุดอย่างหนึ่งคือการ จัดข้อความกึ่งกลาง ในแถวที่มีไอคอนหรือรูปภาพ เมื่อจัดไอคอนและข้อความกึ่งกลางภายในคอนเทนเนอร์ ข้อความจะเลื่อนขึ้นทางสายตาเมื่อเทียบกับไอคอน สิ่งนี้เกิดขึ้นเพราะกึ่งกลางของข้อความอยู่เหนือ baseline ในขณะที่กึ่งกลางของไอคอนตรงกับจุดศูนย์กลางทางเรขาคณิต

  • การละเลย baseline ในรายการหลายบรรทัด — แถวที่มีขนาดฟอนต์ต่างกันดูไม่เป็นระเบียบหากไม่มีการจัดเรียงตาม baseline วิธีแก้ไข: ใช้ firstTextBaseline หรือ lastTextBaseline สำหรับคอลัมน์ข้อความเสมอ
  • การผสมการจัดเรียงแบบ baseline และกึ่งกลาง — หากบางแถวจัดเรียงตาม baseline และบางแถวจัดกึ่งกลาง อินเทอร์เฟซจะสูญเสียกริดการพิมพ์แบบรวมศูนย์ เลือกวิธีการเดียวสำหรับทั้งหน้าจอ
  • การจัดการ locale RTL ที่ไม่ถูกต้อง — สำหรับภาษาที่เขียนจากขวาไปซ้าย (อาหรับ ฮิบรู) การจัดเรียงตาม baseline ทำงานเหมือนกับ LTR แต่ทิศทางการจัดเรียงเปลี่ยนไป ตรวจสอบตำแหน่งของไอคอนเทียบกับข้อความในทั้งสองทิศทาง
  • ฟอนต์ที่กำหนดเองที่ถูกลืม — baseline เริ่มต้นอาจแตกต่างจาก baseline ของฟอนต์ที่กำหนดเอง ตรวจสอบเมตริกของฟอนต์ที่ใช้ผ่าน API ของแพลตฟอร์มเสมอ โดยเฉพาะสำหรับฟอนต์ตกแต่ง

ตาม NN Group — Typography in UI Design (2025) การจัดเรียง baseline ที่ไม่ถูกต้องเพิ่มเวลาการสแกนรายการของผู้ใช้ 22% เมื่อเทียบกับอินเทอร์เฟซที่จัดเรียงอย่างถูกต้อง นี่เป็นเมตริกสำคัญสำหรับรายการและฟอร์มซึ่งเป็นพื้นฐานของแอปพลิเคชันมือถือส่วนใหญ่

คำถามที่พบบ่อย

Baseline แตกต่างจาก line-height อย่างไร?

Baseline คือเส้นแนวนอนที่ใช้วางอักขระ ในขณะที่ line-height คือระยะห่างระหว่างเส้นฐานของสองบรรทัดติดกัน Baseline กำหนดตำแหน่งของข้อความในพื้นที่แนวตั้ง ในขณะที่ line-height กำหนดจังหวะระหว่างบรรทัด ทั้งสองแนวคิดเชื่อมโยงกัน: line-height คำนวณจาก baseline ของบรรทัดหนึ่งถึง baseline ของบรรทัดถัดไป

จะรับค่า Baseline ผ่าน UIKit ได้อย่างไร?

ใน UIKit ค่า baseline สามารถรับได้ผ่านคุณสมบัติ lastBaselineAnchor หรือ firstBaselineAnchor ของ UILabel, UITextView และ UIButton สำหรับการเข้าถึงเมตริกฟอนต์โดยตรง ใช้ UIFont.ascender (ระยะทางจาก baseline ถึงด้านบน) และ UIFont.descender (ระยะทางจาก baseline ถึงด้านล่าง พร้อมเครื่องหมายลบ)

การจัดเรียงตาม baseline ใน SwiftUI ทำงานกับประเภทไดนามิกหรือไม่?

ใช่ SwiftUI รองรับการจัดเรียงตาม baseline กับประเภทไดนามิก (Dynamic Type) การจัดเรียงผ่าน .firstTextBaseline และ .lastTextBaseline ปรับตัวโดยอัตโนมัติตามการเปลี่ยนแปลงขนาดฟอนต์ ซึ่งให้การจัดตำแหน่งข้อความที่ถูกต้องเมื่อขนาดฟอนต์เพิ่มขึ้น โดยไม่ต้องปรับ padding ด้วยตนเอง

จะจัดเรียงข้อความกับไอคอนใน Jetpack Compose ได้อย่างไร?

ใน Jetpack Compose ใช้ Alignment.FirstBaseline ในพารามิเตอร์ verticalAlignment ของ Row: Row(verticalAlignment = Alignment.FirstBaseline) สำหรับ Icon และ Text ที่วางใน Row นี้ Compose จะจัดเรียงเส้นฐานโดยอัตโนมัติ หากต้องปรับไอคอนให้แม่นยำยิ่งขึ้น ให้ใช้ Modifier.alignWithBaseline

ทำไมข้อความที่มีฟอนต์ที่กำหนดเองถึงเลื่อนเมื่อใช้การจัดเรียงตาม baseline?

ฟอนต์ที่กำหนดเองมี เมตริกของตัวเอง: ascender, descender และ x-height ซึ่งอาจแตกต่างจากฟอนต์ระบบ หากการจัดเรียงตาม baseline ให้ผลลัพธ์ที่ไม่แม่นยำ ให้ตรวจสอบเมตริกฟอนต์ผ่าน API ของแพลตฟอร์ม (UIFont.descender ใน iOS, Paint.getFontMetrics() ใน Android) ฟอนต์ตกแต่งอาจต้องการการปรับเพิ่มเติม 1–2 พิกเซล

สรุป

  • Baseline — เส้นฐานของฟอนต์ จุดอ้างอิงเดียวสำหรับอักขระทั้งหมดและเมตริกหลักสำหรับการจัดเรียงข้อความในอินเทอร์เฟซ
  • การจัดเรียงตาม baseline — วิธีการมาตรฐานสำหรับแถวที่มีไอคอน ปุ่ม และข้อความขนาดต่างกัน ซึ่งแนะนำโดย Material Design และ Apple HIG
  • iOS — NSLayoutConstraint พร้อม firstBaselineAnchor/lastBaselineAnchor ใน UIKit และ firstTextBaseline ใน SwiftUI
  • Android — ALIGN_BASELINE ในระบบ View และ Alignment.FirstBaseline ใน Jetpack Compose
  • Flutter — CrossAxisAlignment.baseline พร้อม TextBaseline.alphabetic และวิดเจ็ต Baseline แยกต่างหาก
  • ฟอนต์ที่กำหนดเอง — ตรวจสอบเมตริกของฟอนต์ผ่าน API ของแพลตฟอร์มเสมอ เนื่องจาก baseline อาจแตกต่างจากของระบบ
  • ผลกระทบต่อ UX — การจัดเรียงตาม baseline ที่ถูกต้องช่วยลดเวลาการสแกนอินเทอร์เฟซ 22% (NN Group, 2025) และลดจำนวนข้อบกพร่องของ UI

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม