Responsive Design — مبانی، تطبیق رابط‌ها با صفحه‌نمایش

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

Responsive Design — رویکردی برای ساخت رابط‌های کاربری که در آن چیدمان به‌طور خودکار با اندازه، جهت و نوع دستگاه سازگار می‌شود. در توسعه موبایل، responsive design از طریق size classes در iOS و configuration qualifiers در Android پیاده‌سازی می‌شود. مقاله اصول چیدمان تطبیقی، ابزارهای هر دو پلتفرم و نمونه کدها را بررسی می‌کند.

مهمترین

  • Responsive Design — تطبیق رابط با اندازه‌های مختلف صفحه، جهت‌ها و انواع دستگاه
  • Size Classes — مکانیزم iOS برای تعیین اندازه فشرده یا معمولی در افق و عمود
  • Configuration Qualifiers — منابع Android (layout-w600dp, values-sw600dp) برای پیکربندی‌های مختلف صفحه
  • شبکه تطبیقی — بازچینی عناصر هنگام تغییر عرض صفحه، نه صرفاً کشیدن
  • Breakpoints — نقاط انتقال بین حالت‌های چیدمان (مثلاً 375 pt برای iPhone، 768 pt برای iPad)

Responsive Design چیست؟

Responsive Design — روش ساخت رابط‌هایی که در آن چیدمان به اندازه صفحه، جهت و فضای موجود واکنش نشان می‌دهد و مکان عناصر را بدون از دست دادن عملکرد بازچینی می‌کند. این اصطلاح توسط Ethan Marcotte در سال ۲۰۱۰ برای طراحی وب ارائه شد، اما اصول کاملاً برای برنامه‌های بومی موبایل قابل استفاده است.

در توسعه موبایل، responsive design به این معناست که یک برنامه واحد روی همه دستگاه‌ها به درستی نمایش داده می‌شود: از iPhone SE (375 pt) تا iPad Pro (1024 pt در حالت عمودی) و از گوشی Android (360 dp) تا تبلت (800 dp). عناصر کلیدی عبارتند از شبکه انعطاف‌پذیر (flexible grid)، تصاویر تطبیقی و پرسش‌های رسانه‌ای در سطح فریمورک (size classes، qualifiers).

طبق Apple Developer Documentation، برنامه باید universal باشد — روی همه دستگاه‌ها بدون ساخت جداگانه برای iPad کار کند. Google Play استفاده از adaptive layouts از طریق Jetpack WindowManager و canonical layouts را توصیه می‌کند. عدم تطبیق با تبلت‌ها یکی از دلایل رایج نظرات منفی است.

Responsive در مقابل Adaptive Design

اصطلاحات responsive و adaptive اغلب اشتباه گرفته می‌شوند، اگرچه رویکردهای متفاوتی را توصیف می‌کنند. Responsive design از شبکه انعطاف‌پذیری استفاده می‌کند که به طور پیوسته با عرض صفحه سازگار می‌شود. Adaptive design از چیدمان‌های ثابت برای breakpoints از پیش تعیین‌شده استفاده می‌کند — برنامه به طور ناگهانی بین آنها جابه‌جا می‌شود.

ویژگیResponsive DesignAdaptive Design
رویکردجریان پیوستهجابه‌جایی گسسته
شبکهدرصدی، روانثابت برای هر breakpoint
پیاده‌سازیAuto Layout, Flexbox, ConstraintLayoutSize Classes, layout-w600dp, storyboardهای جداگانه
تعداد طرح‌های چیدمانیک، اما انعطاف‌پذیرچندین (phone portrait, phone landscape, tablet)

در عمل برنامه‌های موبایل از ترکیب هر دو رویکرد استفاده می‌کنند. شبکه پایه به صورت responsive ساخته می‌شود (Auto Layout با وابستگی‌های constraint)، و پس از رسیدن به breakpoint (مثلاً عرض > 600 pt) چیدمان به نسخه تطبیقی با ترکیب متفاوت عناصر تغییر می‌کند. iOS Auto Layout (responsive) را با Size Classes (adaptive) ترکیب می‌کند. Android ConstraintLayout (responsive) را با منابع qualifier (adaptive) ترکیب می‌کند.

iOS Size Classes: Compact و Regular

Size Classes — مکانیزم iOS که فضای موجود صفحه را در دو محور طبقه‌بندی می‌کند: افقی و عمودی. هر محور می‌تواند Compact (C) یا Regular (R) باشد. ترکیب چهار حالت برای تطبیق چیدمان ایجاد می‌کند: CR (iPhone معمولی عمودی)، RR (iPad عمودی/افقی)، RC (iPhone افقی در Plus/Pro Max)، CC (iPad Split View).

swift
// تعریف Size Classes در Swift
import UIKit

class AdaptiveViewController: UIViewController {

    override func traitCollectionDidChange(
        _ previousTraitCollection: UITraitCollection?
    ) {
        super.traitCollectionDidChange(previousTraitCollection)
        adjustLayout(for: traitCollection)
    }

    private func adjustLayout(for traits: UITraitCollection) {
        switch (traits.horizontalSizeClass, traits.verticalSizeClass) {
        case (.regular, .regular):
            showSplitView() // iPad — نمایش master-detail
        case (.compact, .regular):
            showStackedView() // iPhone پرتره — چیدمان پشته‌ای
        case (.compact, .compact):
            showCompactView() // iPhone SE افقی — کمینه‌شده
        default:
            showDefaultView()
        }
    }

    private func showSplitView() {
        // ما از UISplitViewController یا HStack استفاده می‌کنیم
    }

    private func showStackedView() {
        // پشته عمودی برای iPhone
    }

    private func showCompactView() {
        // عناصر فرعی را پنهان می‌کنیم، اصلی را نشان می‌دهیم
    }
}

در Interface Builder، Size Classes از طریق پنل «wAny hAny» پیکربندی می‌شوند — توسعه‌دهنده ترکیب مشخصی را انتخاب می‌کند (wRegular hRegular، wCompact hRegular) و تغییرات constraint اضافه می‌کند. SwiftUI برای تطبیق واکنش‌گرا از @Environment(.horizontalSizeClass) و @Environment(.verticalSizeClass) استفاده می‌کند — با تغییر جهت یا اندازه پنجره، SwiftUI به طور خودکار view را دوباره ترسیم می‌کند.

swift
// Size Classes در SwiftUI
import SwiftUI

struct ResponsiveView: View {
    @Environment(\.horizontalSizeClass) private var hSizeClass

    var body: some View {
        if hSizeClass == .regular {
            // iPad — چیدمان افقی با پنل کناری
            HStack {
                SidebarView()
                    .frame(width: 300)
                ContentView()
            }
        } else {
            // iPhone — پشته عمودی تمام صفحه
            VStack {
                ContentView()
            }
        }
    }
}

Android Configuration Qualifiers

Configuration Qualifiers — مکانیزم Android برای بارگذاری منابع مختلف (layout، values، drawables) بسته به ویژگی‌های دستگاه. این qualifierها شامل اندازه صفحه (small، normal، large، xlarge)، جهت (port، land)، حداقل عرض (swdp)، عرض موجود (wdp) و ارتفاع (hdp) هستند.

kotlin
// تعریف پیکربندی دستگاه در Kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val config = resources.configuration
        val screenWidthDp = config.screenWidthDp
        val screenHeightDp = config.screenHeightDp
        val orientation = config.orientation

        when {
            screenWidthDp >= 900 -> setContentView(R.layout.activity_main_tablet)
            screenWidthDp >= 600 -> setContentView(R.layout.activity_main_sw600)
            else -> setContentView(R.layout.activity_main_phone)
        }
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            supportFragmentManager.beginTransaction()
                .replace(R.id.container, LandscapeFragment())
                .commit()
        }
    }
}

ساختار منابع برای صفحات مختلف: res/layout/activity_main.xml (گوشی)، res/layout-sw600dp/activity_main.xml (تبلت ۷ اینچ)، res/layout-sw720dp/activity_main.xml (تبلت ۱۰ اینچ). Android به طور خودکار layout مناسب را بر اساس smallestWidth انتخاب می‌کند — حداقل عرض صفحه بر حسب dp بدون توجه به جهت. qualifier swdp — پایدارترین روش تطبیق.

kotlin
// Jetpack Compose — WindowSizeClass برای تطبیق
@Composable
fun ResponsiveScreen() {
    val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass

    when {
        windowSizeClass.windowSizeClass == WindowWidthSizeClass.EXPANDED -> {
            TabletLayout() // >= 840 dp
        }
        windowSizeClass.windowSizeClass == WindowWidthSizeClass.MEDIUM -> {
            MediumLayout() // 600–840 dp
        }
        else -> {
            CompactLayout() // < 600 dp
        }
    }
}

Jetpack WindowManager (کتابخانه androidx.window) WindowSizeClass را با سه دسته عرض ارائه می‌دهد: COMPACT (0–600 dp)، MEDIUM (600–840 dp)، EXPANDED (>840 dp). این جایگزین مدرنی برای پوشه‌های qualifier قدیمی است. توسط Google برای تطبیق با دستگاه‌های تاشو و تبلت‌ها توصیه می‌شود.

شبکه تطبیقی و breakpoints

شبکه تطبیقی پایه responsive design است. به جای اندازه‌های ثابت، عناصر از نسبت‌های درصدی، محدودیت‌های انعطاف‌پذیر و intrinsic content size استفاده می‌کنند. Breakpoints — نقاط عرض صفحه که با رسیدن به آنها، چیدمان بین حالت‌ها جابه‌جا می‌شود.

BreakpointiOS Size ClassAndroid Qualifierنوع دستگاه
0–374 pt / dpCompact widthiPhone SE، Android قدیمی
375–599 pt / dpCompact widthsw320dpiPhone 14, Galaxy S24
600–839 pt / dpRegular widthsw600dpiPad mini، تبلت‌های ۷ اینچ
840+ pt / dpRegular widthsw720dpiPad Pro، تبلت‌های ۱۰ اینچ

breakpoints توصیه‌شده توسط Google Material Design و Apple HIG: 0–599 dp (گوشی، یک ستون)، 600–839 dp (تبلت، دو ستون، navigation rail)، 840+ dp (تبلت، سه ستون، navigation drawer). تعداد breakpoints نباید از ۴ تجاوز کند — نقاط انتقال زیاد نگهداری و آزمایش را پیچیده می‌کند.

بهترین روش‌های طراحی تطبیقی

responsive design موفق مستلزم رعایت مجموعه‌ای از قوانین است که توسط جامعه توسعه‌دهندگان iOS و Android در دهه گذشته تدوین شده است. در زیر توصیه‌های کلیدی بر اساس Apple HIG، Google Material Design و تجربه پروژه‌های تولیدی آورده شده است.

  • از کوچکترین صفحه شروع کنید — چیدمان را برای iPhone SE (375 pt) یا Android compact (360 dp) طراحی کنید، سپس برای صفحات بزرگتر توسعه دهید. این تضمین می‌کند که محتوای حیاتی در همه جا جا می‌شود
  • از intrinsic content size استفاده کنید — UILabel، UIButton، ImageView اندازه طبیعی دارند. Auto Layout و ConstraintLayout از آن برای موقعیت‌یابی خودکار بدون محدودیت‌های اضافی استفاده می‌کنند
  • محتوای صفحات کوچک را پنهان نکنید — به جای پنهان کردن، بازچینی کنید (reflow). کاربر باید به همان قابلیت‌ها، فقط در ترتیبی متفاوت دسترسی داشته باشد
  • در همه size classes آزمایش کنید — شبیه‌ساز iOS امکان تغییر Size Classes بدون راه‌اندازی مجدد را فراهم می‌کند. شبیه‌ساز Android پروفایل‌های دستگاه مختلفی ارائه می‌دهد. حتماً روی تبلت‌ها و دستگاه‌های تاشو آزمایش کنید
  • Material 3 Adaptive Layout — Google canonical layouts آماده برای فهرست/جزئیات، پنل‌های ابزار و ناوبری ارائه می‌دهد. به جای ابداع الگوهای خود از آنها استفاده کنید

اصل اصلی طراحی تطبیقی: محتوا چیدمان را تعیین می‌کند، نه برعکس. اگر در iPad همان پشته کارت‌های iPhone، فقط کشیده‌شده در عرض نمایش داده شود — این responsive design نیست. Responsive design ترکیب را بازاندیشی می‌کند: در iPhone — اسکرول عمودی، در iPad — master-detail با پنل کناری.

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

تفاوت Responsive Design با Adaptive Layout چیست؟

Responsive Design از شبکه انعطاف‌پذیری استفاده می‌کند که به آرامی با عرض صفحه سازگار می‌شود. Adaptive Layout بین چیدمان‌های ثابت در نقاط breakpoint جابه‌جا می‌شود. در عمل هر دو رویکرد ترکیب می‌شوند: شبکه پایه responsive + جابه‌جایی‌های تطبیقی برای تغییرات اساسی (گوشی در مقابل تبلت).

چه Size Classes در iOS وجود دارد؟

iOS از دو محور استفاده می‌کند: افقی (Compact/Regular) و عمودی (Compact/Regular). iPhone در حالت عمودی — Compact width، Regular height (CR). iPad — Regular width، Regular height (RR). iPhone Plus/Pro Max در حالت افقی — Regular width، Compact height (RC). توسعه‌دهنده برای هر ترکیب تغییرات constraint تنظیم می‌کند.

sw600dp در Android چیست؟

sw600dp (smallestWidth 600 dp) — qualifier منابع Android به این معنی که حداقل عرض صفحه دستگاه حداقل 600 dp است. برای بارگذاری چیدمان‌های جایگزین برای تبلت‌ها (۷ اینچ و بزرگتر) استفاده می‌شود. جهت تأثیری ندارد — sw کوچکترین ضلع صفحه را در نظر می‌گیرد.

چگونه تطبیق‌پذیری برنامه را آزمایش کنیم؟

در iOS از شبیه‌ساز با Size Classes مختلف و Preview در SwiftUI با دستگاه‌های اندازه‌های مختلف استفاده کنید. در Android — پروفایل‌های دستگاه در شبیه‌ساز (Pixel 5, Pixel C, Galaxy Tab) و Layout Validation در Android Studio. در هر دو پلتفرم حتماً روی iPad/Android تبلت فیزیکی و دستگاه تاشو آزمایش کنید.

canonical layouts در Material Design چیست؟

Canonical layouts — الگوهای آماده ترکیب تطبیقی از Google Material Design 3: list-detail (فهرست + جزئیات)، feed (خوراک کارت‌ها)، supporting pane (محتوای اصلی + پنل اقدامات). هر الگو سه حالت دارد (compact/medium/expanded) و به طور خودکار با WindowSizeClass تطبیق می‌یابد.

خلاصه

  • Responsive Design — تطبیق چیدمان با اندازه و جهت صفحه از طریق شبکه‌های انعطاف‌پذیر و breakpoints
  • Size Classes در iOS (Compact/Regular) چیدمان را برای iPhone، iPad و Split View تعیین می‌کنند
  • Configuration Qualifiers در Android (swdp، wdp، layout-land) منابع را برای دستگاه بارگذاری می‌کنند
  • Jetpack WindowManager WindowSizeClass را با سه دسته ارائه می‌دهد: COMPACT، MEDIUM، EXPANDED
  • Breakpoints: 0–599 dp (گوشی)، 600–839 dp (تبلت)، 840+ dp (تبلت عریض)
  • Responsive ≠ کشیدن ساده — بازچینی عناصر (reflow) لازم است، نه پنهان کردن محتوا
  • آزمایش روی همه انواع دستگاه‌ها، از جمله تبلت‌ها و دستگاه‌های تاشو، مرحله اجباری توسعه است

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

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

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

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