Corner Radius — چیست، شعاع گرد کردن در برنامه‌های موبایل

نویسنده: IT Sectr منتشر شده: 2026-02-28 زمان مطالعه: 9 دقیقه

Corner radius — پارامتر گرد کردن گوشه‌های عناصر UI است که در پیکسل‌های منطقی (pt در iOS، dp در Android) اندازه‌گیری می‌شود و شعاع دایره محاط شده در گوشه مستطیل را تعیین می‌کند. انتخاب صحیح corner radius بر درک رابط تأثیر می‌گذارد: گرد کردن بزرگ لحنی نرم و دوستانه ایجاد می‌کند، گرد کردن کوچک — سختگیرانه و رسمی. طبق Material Design Guidelines (Google، 2026)، radius توصیه شده برای کارت‌ها ۸–۱۶ dp، برای دکمه‌ها ۴–۸ dp است. درباره مدیریت ظاهر عناصر بیشتر در مقاله درباره سایه‌ها در UI بخوانید.

نکات اصلی

  • Corner radius — شعاع گرد کردن گوشه‌ها، اندازه‌گیری شده در pt (iOS) یا dp (Android).
  • Material Design برای کارت‌ها ۸–۱۶ dp، برای دکمه‌ها ۴–۸ dp، برای دیالوگ‌ها ۱۶–۲۸ dp توصیه می‌کند.
  • در iOS cornerRadius از طریق CALayer.cornerRadius یا ClipRRect در SwiftUI تنظیم می‌شود.
  • در Android گرد کردن از طریق shape (drawable XML)، MaterialShapeDrawable یا ClipRRect در Compose پیاده‌سازی می‌شود.
  • گرد کردن بیش از حد بزرگ خوانایی متن را کاهش می‌دهد و ممکن است محتوا را در لبه‌ها پنهان کند.

corner radius چیست؟

Corner radius — مقدار عددی است که درجه گرد کردن گوشه‌های یک عنصر مستطیلی را تعیین می‌کند. هرچه مقدار بیشتر باشد، گوشه گردتر می‌شود. در مقدار ۰ گوشه مستقیم (۹۰°) باقی می‌ماند، در مقداری برابر با نصف ضلع کوچکتر، عنصر به دایره (برای مربع) یا مستطیل گرد با اضلاع مستقیم (کپسول) تبدیل می‌شود.

در طراحی موبایل corner radius برای موارد زیر استفاده می‌شود: کارت‌ها و کاشی‌ها، دکمه‌ها، فیلدهای ورودی، پنجره‌های مودال، تصاویر و آواتارها، نشانگرهای پیشرفت، چیپ‌ها و نشان‌ها. هر نوع عنصر دارای محدوده توصیه شده گرد کردن بر اساس راهنماهای Material Design و Human Interface Guidelines است.

طبق Material Design 3 (Google، ۲۰۲۶)، گرد کردن گوشه‌ها به سه سطح طبقه‌بندی می‌شود: small (۴ dp) برای دکمه‌ها و فیلدهای ورودی، medium (۸-۱۲ dp) برای کارت‌ها و برگه‌ها، large (۱۶-۲۸ dp) برای دیالوگ‌ها و bottom sheetها. HIG Apple (۲۰۲۵) برای عناصر سیستمی (UIButton، UITextField) corner radius واحد ۱۰-۱۲ pt و برای ارائه‌های مودال ۲۰+ 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("شعاع گوشه ۱۶")
        .padding()
        .background(
            RoundedRectangle(cornerRadius: 16)
                .fill(Color.blue)
        )
}

// گرد کردن فردی گوشه‌ها
RoundedRectangle(
    cornerSize: CGSize(width: 16, height: 16),
    style: .continuous
)

Continuous corner radius — سبک گرد کردنی است که اپل از iOS 7 به بعد در iOS استفاده می‌کند. برخلاف radius کلاسیک (circular)، continuous radius با استفاده از منحنی بزیه درجه سوم به جای قوس دایره، گرد کردن نرم‌تری ایجاد می‌کند. SwiftUI از این سبک از طریق پارامتر style: .continuous در RoundedRectangle پشتیبانی می‌کند. اپل continuous corner radius را برای همه عناصر سیستمی به عنوان گزینه‌ای بصری طبیعی‌تر توصیه می‌کند.

Corner radius در Android: shape و Compose

در Android گرد کردن گوشه‌ها به طور سنتی از طریق منابع XML shape در پوشه res/drawable پیاده‌سازی می‌شود. Shape شکل پس‌زمینه را با پارامترهای cornerRadius و solid تعریف می‌کند. برای گوشه‌های مختلف از <، bottom، top و <right استفاده می‌شود. در 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 = "کارت با گرد کردن سفارشی")
}

MaterialShapeDrawable در Android View System امکان تغییر پویای corner radius بدون بازآفرینی drawable را فراهم می‌کند. از ShapeAppearanceModel برای تنظیم دقیق استفاده کنید: cornerFamily (rounded یا cut) و cornerSize را برای هر گوشه جداگانه تنظیم کنید.

چگونه corner radius مناسب را انتخاب کنیم

انتخاب corner radius به نوع عنصر، زمینه استفاده و پلتفرم بستگی دارد. قانون جهانی وجود ندارد، اما Material Design و HIG Apple توصیه‌های روشنی برای کامپوننت‌های استاندارد ارائه می‌دهند. اصل اساسی: گرد کردن باید قابل توجه باشد، اما مزاحم محتوا نباشد.

نوع عنصرradius توصیه شدهپلتفرمتوضیح
دکمه‌ها۴–۸ dp / ۸ ptiOS، Androidهرچه دکمه بزرگتر باشد، radius بیشتر است
کارت‌ها۸–۱۶ dp / ۱۰-۱۲ ptiOS، AndroidMaterial Design: پیش‌فرض ۱۲ dp
فیلدهای ورودی۴–۸ dp / ۸ ptiOS، Androidگرد کردن خیلی بزرگ غیرطبیعی به نظر می‌رسد
پنجره‌های مودال۱۶–۲۸ dp / ۲۰+ ptiOS، AndroidiOS ۱۸: پیش‌فرض ۲۴ pt
آواتارها۵۰٪ از اندازهiOS، Androidبرای آواتارهای گرد radius = نصف ضلع
چیپ‌ها / نشان‌ها۱۶–۲۰ dp / ۱۴ ptAndroidشکل کپسول در گرد کردن بزرگ

قانون تضاد: عناصر با corner radius متفاوت در یک رابط باید حداقل ۴ dp تفاوت داشته باشند تا تفاوت بصری قابل توجه باشد. از ۳ سطح گرد کردن در یک صفحه استفاده نکنید — این باعث ایجاد نویز بصری می‌شود. 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 ۳.۲۲+ از continuous corner radius از طریق ContinuousRectangleBorder پشتیبانی می‌کند.

سوالات متداول

تفاوت corner radius در dp و pt چیست؟

dp (density-independent pixels) در Android و pt (points) در iOS — واحدهای منطقی هستند که بدون توجه به تراکم پیکسل‌ها با اندازه فیزیکی روی صفحه مطابقت دارند. ۱ dp ≈ ۱ pt ≈ ۱/۱۶۰ اینچ. مقادیر عددی 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 — سبک گرد کردنی است که در آن گوشه نه با قوس دایره، بلکه با منحنی بزیه درجه سوم تشکیل می‌شود. اپل از این سبک از iOS ۷ برای همه عناصر سیستمی استفاده می‌کند. از نظر بصری، continuous گرد کردن در مقایسه با سبک کلاسیک circular نرم‌تر و طبیعی‌تر به نظر می‌رسد.

برای کیبورد سفارشی از چه corner radius استفاده کنیم؟

در iOS ۱۰-۱۲ pt (مانند کیبورد سیستمی) و در Android ۸-۱۲ dp توصیه می‌شود. کلیدهای داخل کیبورد می‌توانند radius کوچکتری (۴-۶ dp) داشته باشند یا بدون گرد کردن باشند. برای افزایش سطح لمس، از padding ۴-۸ dp بین مرز گرد و لبه دکمه استفاده کنید.

چرا گرد کردن گوشه‌ها به UITableViewCell اعمال نمی‌شود؟

UITableViewCell به طور خودکار cornerRadius را از contentView به ارث نمی‌برد، زیرا پس‌زمینه سلول در backgroundView رسم می‌شود. برای گرد کردن سلول، cornerRadius را هم برای contentView.layer و هم برای backgroundView.layer تنظیم کنید. در SwiftUI از .listRowBackground() با RoundedRectangle استفاده کنید.

خلاصه

  • Corner radius — شعاع گرد کردن گوشه‌های عناصر UI، اندازه‌گیری شده در dp (Android) یا pt (iOS).
  • Material Design برای کارت‌ها ۸-۱۶ dp، برای دکمه‌ها ۴-۸ dp، برای دیالوگ‌ها ۱۶-۲۸ dp توصیه می‌کند.
  • در iOS گرد کردن از طریق CALayer.cornerRadius (UIKit) یا RoundedRectangle (SwiftUI) تنظیم می‌شود.
  • در Android — از طریق shape XML (View System) یا RoundedCornerShape (Jetpack Compose).
  • Continuous corner radius — گرد کردن نرم‌تر با منحنی بزیه، استفاده شده در iOS از iOS ۷.
  • Flutter از BorderRadius و ClipRRect برای گرد کردن ظروف و برش تصاویر استفاده می‌کند.
  • برای حفظ یکپارچگی بصری، بیش از دو سطح گرد کردن در یک صفحه استفاده نکنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید