Corner Radius — ما هو نصف قطر التدوير في تطبيقات الجوال

المؤلف: IT Sectr نُشر: 2026-02-28 وقت القراءة: 9 دق

Corner radius هو معلمة لتدوير زوايا عناصر واجهة المستخدم، تُقاس بالبكسل المنطقي (pt في iOS، dp في Android) وتحدد نصف قطر الدائرة المحصورة في زاوية المستطيل. يؤثر الاختيار الصحيح لـ corner radius على إدراك الواجهة: التدويرات الكبيرة تخلق نغمة ناعمة وودية، والصغيرة — صارمة ورسمية. وفقًا لـ إرشادات Material Design (Google، 2026)، فإن radius الموصى به للبطاقات هو 8–16 dp، للأزرار — 4–8 dp. اقرأ المزيد عن إدارة مظهر العناصر في مقالة عن الظلال في واجهة المستخدم.

الأهم

  • 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 (بكسل مستقل عن الكثافة) في Android وpt (نقاط) في 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 — نصف قطر تدوير زوايا عناصر واجهة المستخدم، يُقاس بـ 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. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا