Corner Radius — รัศมีการปัดมุมในแอปพลิเคชันมือถือ

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

Corner radius คือพารามิเตอร์สำหรับการปัดมุมขององค์ประกอบ UI ซึ่งวัดเป็นพิกเซลเชิงตรรกะ (pt บน iOS, dp บน Android) และกำหนดรัศมีของวงกลมที่บรรจุในมุมของสี่เหลี่ยมผืนผ้า การเลือก corner radius ที่ถูกต้องส่งผลต่อการรับรู้อินเทอร์เฟซ: การปัดมุมขนาดใหญ่สร้างโทนที่นุ่มนวลและเป็นมิตร ส่วนขนาดเล็กสร้างโทนที่เข้มงวดและเป็นทางการ ตาม Material Design Guidelines (Google, 2026) radius ที่แนะนำสำหรับการ์ดคือ 8–16 dp สำหรับปุ่ม — 4–8 dp เรียนรู้เพิ่มเติมเกี่ยวกับการจัดการลักษณะขององค์ประกอบได้ในบทความเกี่ยวกับเงาใน UI

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

  • Corner radius — รัศมีการปัดมุม วัดเป็น pt (iOS) หรือ dp (Android)
  • Material Design แนะนำ 8–16 dp สำหรับการ์ด 4–8 dp สำหรับปุ่ม 16–28 dp สำหรับไดอะล็อก
  • บน iOS ตั้งค่า cornerRadius ผ่าน CALayer.cornerRadius หรือ ClipRRect ใน SwiftUI
  • บน Android การปัดมุมถูกใช้งานผ่าน shape (drawable XML), MaterialShapeDrawable หรือ ClipRRect ใน Compose
  • การปัดมุมมากเกินไปทำให้อ่านข้อความได้ยากและอาจซ่อนเนื้อหาที่ขอบ

Corner radius คืออะไร?

Corner radius คือค่าตัวเลขที่กำหนดระดับการปัดมุมขององค์ประกอบรูปสี่เหลี่ยมผืนผ้า ยิ่งค่าสูง มุมก็จะยิ่งโค้งมนมากขึ้น ที่ค่า 0 มุมจะคงเป็นมุมฉาก (90°) ที่ค่าเท่ากับครึ่งหนึ่งของด้านที่สั้นกว่า องค์ประกอบจะเปลี่ยนเป็นวงกลม (สำหรับสี่เหลี่ยมจัตุรัส) หรือสี่เหลี่ยมผืนผ้าโค้งมนที่มีด้านตรง (แคปซูล)

ในการออกแบบมือถือ corner radius ถูกใช้สำหรับ: การ์ดและแผ่นกระเบื้อง ปุ่ม ฟิลด์ป้อนข้อมูล หน้าต่างโมดอล รูปภาพและอวาตาร์ ตัวบ่งชี้ความคืบหน้า ชิปและป้าย องค์ประกอบแต่ละประเภทมีช่วงที่แนะนำของการปัดมุมตาม Material Design และ Human Interface Guidelines

ตาม Material Design 3 (Google, 2026) การปัดมุมถูกจำแนกเป็นสามระดับ: เล็ก (4 dp) สำหรับปุ่มและฟิลด์ป้อนข้อมูล กลาง (8–12 dp) สำหรับการ์ดและชีต ใหญ่ (16–28 dp) สำหรับไดอะล็อกและบอททอมชีต Apple HIG (2025) แนะนำ corner radius ที่สม่ำเสมอ 10–12 pt สำหรับองค์ประกอบระบบ (UIButton, UITextField) และ 20+ pt สำหรับการนำเสนอแบบโมดอล

Corner radius บน iOS: CALayer และ SwiftUI

บน iOS การปัดมุมถูกใช้งานผ่านคุณสมบัติ cornerRadius ของ CALayer ใน UIKit ทุก UIView มีเลเยอร์ที่สามารถตั้งค่า cornerRadius ได้ สำหรับการปัดมุมที่ซับซ้อนมากขึ้น (รัศมีต่างกันสำหรับมุมต่าง) จะใช้ maskedCorners และ CACornerMask ร่วมกับ UIBezierPath

swift
// UIKit: การปัดมุมผ่าน CALayer
import UIKit

let cardView = UIView()
cardView.backgroundColor = .systemBackground
cardView.layer.cornerRadius = 12
cardView.layer.maskedCorners = [
    .layerMinXMinYCorner,
    .layerMaxXMinYCorner
]

ใน SwiftUI การปัดมุมถูกตั้งค่าผ่านตัวปรับแต่ง cornerRadius() หรือผ่าน ClipShape กับ RoundedRectangle SwiftUI ยังรองรับการปัดมุมแต่ละมุมผ่าน UIRectCorner ร่วมกับ clipped() และ overlay()

swift
// SwiftUI: การปัดมุมผ่าน RoundedRectangle
import SwiftUI

VStack {
    Text("Corner Radius 16")
        .padding()
        .background(
            RoundedRectangle(cornerRadius: 16)
                .fill(Color.blue)
        )
}

// การปัดมุมแต่ละมุม
RoundedRectangle(
    cornerSize: CGSize(width: 16, height: 16),
    style: .continuous
)

Continuous corner radius คือสไตล์การปัดมุมที่ Apple ใช้ใน iOS ตั้งแต่ iOS 7 ต่างจากรัศมีแบบคลาสสิก (วงกลม) รัศมีต่อเนื่องสร้างการปัดมุมที่นุ่มนวลกว่าโดยใช้เส้นโค้ง Bezier อันดับสามแทนส่วนโค้งของวงกลม SwiftUI รองรับสไตล์นี้ผ่านพารามิเตอร์ style: .continuous ใน RoundedRectangle Apple แนะนำ continuous corner radius สำหรับองค์ประกอบระบบทั้งหมดเนื่องจากดูเป็นธรรมชาติมากกว่า

Corner radius ใน Android: shape และ Compose

บน Android การปัดมุมถูกใช้งานแบบดั้งเดิมผ่านทรัพยากร XML shape ในโฟลเดอร์ res/drawable Shape กำหนดรูปร่างพื้นหลังด้วยพารามิเตอร์ cornerRadius และ solid สำหรับมุมต่าง ๆ ใช้ <corners android:bottomLeftRadius="..." /> ใน Material Design 3 ได้เพิ่ม MaterialShapeDrawable พร้อมรองรับธีมและรูปร่างไดนามิก

xml
<!-- res/drawable/bg_card.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <corners android:radius="12dp" />
</shape>

ใน Jetpack Compose การปัดมุมถูกตั้งค่าผ่านพารามิเตอร์ shape ของ Modifier Compose ให้ RoundedCornerShape ที่รองรับรัศมีต่างกันสำหรับแต่ละมุมและสไตล์ (CircularShape หรือ CutCornerShape) Compose ยังรองรับ continuous corner radius ผ่าน RoundedCornerShape ร่วมกับเส้นกราฟิก

kotlin
// Jetpack Compose: การปัดมุมผ่าน RoundedCornerShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

Card(
    shape = RoundedCornerShape(
        topStart = 16.dp,
        topEnd = 16.dp,
        bottomStart = 4.dp,
        bottomEnd = 4.dp
    ),
    elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
    Text(text = "Card ที่มีการปัดมุมแบบกำหนดเอง")
}

MaterialShapeDrawable ในระบบ View ของ Android อนุญาตให้เปลี่ยน corner radius แบบไดนามิกโดยไม่ต้องสร้าง drawable ใหม่ ใช้ ShapeAppearanceModel สำหรับการกำหนดค่าที่แม่นยำ: ตั้งค่า cornerFamily (rounded หรือ cut) และ cornerSize สำหรับแต่ละมุมแยกกัน

วิธีเลือก corner radius ที่เหมาะสม

การเลือก corner radius ขึ้นอยู่กับประเภทขององค์ประกอบ บริบทการใช้งาน และแพลตฟอร์ม ไม่มีกฎสากล แต่ Material Design และ Apple HIG ให้คำแนะนำที่ชัดเจนสำหรับส่วนประกอบมาตรฐาน หลักการสำคัญ: การปัดมุมควรสังเกตเห็นได้แต่ไม่ควรรบกวนเนื้อหา

ประเภทองค์ประกอบRadius ที่แนะนำแพลตฟอร์มหมายเหตุ
ปุ่ม4–8 dp / 8 ptiOS, Androidยิ่งปุ่มใหญ่ radius ยิ่งใหญ่
การ์ด8–16 dp / 10–12 ptiOS, AndroidMaterial Design: 12 dp เริ่มต้น
ฟิลด์ป้อนข้อมูล4–8 dp / 8 ptiOS, Androidการปัดมุมมากเกินไปดูไม่เป็นธรรมชาติ
หน้าต่างโมดอล16–28 dp / 20+ ptiOS, AndroidiOS 18: 24 pt เริ่มต้น
อวาตาร์50% ของขนาดiOS, Androidสำหรับอวาตาร์วงกลม radius = ครึ่งหนึ่งของด้าน
ชิป / ป้าย16–20 dp / 14 ptAndroidรูปทรงแคปซูลเมื่อปัดมุมมาก

กฎความแตกต่าง: องค์ประกอบที่มี corner radius ต่างกันในอินเทอร์เฟซเดียวกันควรแตกต่างกันอย่างน้อย 4 dp เพื่อให้เห็นความแตกต่างทางสายตา อย่าใช้การปัดมุม 3 ระดับบนหน้าจอเดียว — สิ่งนี้สร้างสัญญาณรบกวนทางสายตา Material Design 3 แนะนำให้ใช้ไม่เกิน สองระดับการปัดมุม ต่อหน้าจอ: หนึ่งสำหรับคอนเทนเนอร์ (การ์ด ไดอะล็อก) และหนึ่งสำหรับองค์ประกอบแบบโต้ตอบ (ปุ่ม ฟิลด์)

Corner radius ใน Flutter

ใน Flutter การปัดมุมถูกใช้งานผ่านคลาส BorderRadius ซึ่งรับค่า Radius.circular() หรือ Radius.elliptical() Flutter รองรับการปัดมุมแต่ละมุมผ่าน BorderRadius.only() และ BorderRadius.horizontal()/vertical() วิดเจ็ต ClipRRect ตัดองค์ประกอบลูกตาม BorderRadius ที่กำหนด

dart
// Flutter: การปัดมุมผ่าน ClipRRect และ Container
import 'package:flutter/material.dart';

Container(
    decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.only(
            topLeft: Radius.circular(16.0),
            topRight: Radius.circular(16.0),
            bottomLeft: Radius.circular(4.0),
            bottomRight: Radius.circular(4.0),
        ),
    ),
    child: Text('การปัดมุมแบบกำหนดเอง'),
)

// ClipRRect กับ Image
ClipRRect(
    borderRadius: BorderRadius.circular(12.0),
    child: Image.network(
        'https://example.com/image.jpg',
        fit: BoxFit.cover,
    ),
)

ClipRRect ใน Flutter ใช้เมื่อคุณต้องการตัดภาพหรือวิดเจ็ตที่ซับซ้อนตามขอบโค้งมน สำหรับคอนเทนเนอร์พื้นหลังแบบง่าย BoxDecoration กับ borderRadius ก็เพียงพอ — มีประสิทธิภาพมากกว่าเนื่องจากไม่สร้างเลเยอร์การตัดแยกต่างหาก Material Flutter 3.22+ รองรับ continuous corner radius ผ่าน ContinuousRectangleBorder

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

Corner radius ใน dp แตกต่างจาก pt อย่างไร?

dp (density-independent pixels) ใน Android และ pt (points) ใน iOS เป็นหน่วยเชิงตรรกะที่สอดคล้องกับขนาดทางกายภาพบนหน้าจอโดยไม่ขึ้นกับความหนาแน่นของพิกเซล 1 dp ≈ 1 pt ≈ 1/160 นิ้ว ค่าตัวเลขของ corner radius ใน dp และ pt สามารถใช้แทนกันได้เมื่อย้ายการออกแบบระหว่างแพลตฟอร์ม

วิธีปัดมุมเฉพาะด้านบนเท่านั้น?

บน iOS ใช้ maskedCorners กับ CACornerMask: layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] ใน Android XML — ใน Jetpack Compose — RoundedCornerShape(topStart = 12.dp, topEnd = 12.dp) ใน Flutter — BorderRadius.only(topLeft: Radius.circular(12), topRight: Radius.circular(12))

Continuous corner radius คืออะไร?

Continuous corner radius คือสไตล์การปัดมุมที่มุมถูกสร้างขึ้นไม่ใช่โดยส่วนโค้งของวงกลม แต่โดยเส้นโค้ง Bezier อันดับสาม Apple ใช้สไตล์นี้ตั้งแต่ iOS 7 สำหรับองค์ประกอบระบบทั้งหมด ในทางสายตา การปัดมุมต่อเนื่องดูนุ่มนวลและเป็นธรรมชาติมากกว่าเมื่อเทียบกับสไตล์วงกลมแบบคลาสสิก

ควรใช้ corner radius ใดสำหรับคีย์บอร์ดแบบกำหนดเอง?

แนะนำ 10–12 pt บน iOS (เหมือนคีย์บอร์ดระบบ) และ 8–12 dp บน Android ปุ่มภายในคีย์บอร์ดสามารถมี radius เล็กกว่า (4–6 dp) หรือไม่ปัดมุมก็ได้ เพื่อเพิ่มพื้นที่สัมผัส ใช้ padding 4–8 dp ระหว่างขอบโค้งมนและขอบปุ่ม

ทำไมการปัดมุมถึงไม่ใช้กับ UITableViewCell?

UITableViewCell ไม่ได้รับค่า cornerRadius จาก contentView โดยอัตโนมัติเพราะพื้นหลังของเซลล์ถูกวาดใน backgroundView ในการปัดมุมเซลล์ ให้ตั้งค่า cornerRadius ทั้งบน contentView.layer และ backgroundView.layer พร้อมกัน ใน SwiftUI ให้ใช้ .listRowBackground() กับ RoundedRectangle

สรุป

  • Corner radius — รัศมีการปัดมุมขององค์ประกอบ UI วัดเป็น dp (Android) หรือ pt (iOS)
  • Material Design แนะนำ 8–16 dp สำหรับการ์ด 4–8 dp สำหรับปุ่ม 16–28 dp สำหรับไดอะล็อก
  • บน iOS การปัดมุมตั้งค่าผ่าน CALayer.cornerRadius (UIKit) หรือ RoundedRectangle (SwiftUI)
  • บน Android — ผ่าน shape XML (View System) หรือ RoundedCornerShape (Jetpack Compose)
  • Continuous corner radius — การปัดมุมที่นุ่มนวลขึ้นผ่านเส้นโค้ง Bezier ใช้ใน iOS ตั้งแต่ iOS 7
  • Flutter ใช้ BorderRadius และ ClipRRect สำหรับปัดมุมคอนเทนเนอร์และตัดภาพ
  • อย่าใช้การปัดมุมมากกว่าสองระดับบนหน้าจอเดียวเพื่อรักษาความสมบูรณ์ทางสายตา

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

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

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

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