Responsive Design — رویکردی برای ساخت رابطهای کاربری که در آن چیدمان بهطور خودکار با اندازه، جهت و نوع دستگاه سازگار میشود. در توسعه موبایل، responsive design از طریق size classes در iOS و configuration qualifiers در Android پیادهسازی میشود. مقاله اصول چیدمان تطبیقی، ابزارهای هر دو پلتفرم و نمونه کدها را بررسی میکند.
مهمترین
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 اغلب اشتباه گرفته میشوند، اگرچه رویکردهای متفاوتی را توصیف میکنند. Responsive design از شبکه انعطافپذیری استفاده میکند که به طور پیوسته با عرض صفحه سازگار میشود. Adaptive design از چیدمانهای ثابت برای breakpoints از پیش تعیینشده استفاده میکند — برنامه به طور ناگهانی بین آنها جابهجا میشود.
| ویژگی | Responsive Design | Adaptive Design |
|---|---|---|
| رویکرد | جریان پیوسته | جابهجایی گسسته |
| شبکه | درصدی، روان | ثابت برای هر breakpoint |
| پیادهسازی | Auto Layout, Flexbox, ConstraintLayout | Size 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) ترکیب میکند.
Size Classes — مکانیزم iOS که فضای موجود صفحه را در دو محور طبقهبندی میکند: افقی و عمودی. هر محور میتواند Compact (C) یا Regular (R) باشد. ترکیب چهار حالت برای تطبیق چیدمان ایجاد میکند: CR (iPhone معمولی عمودی)، RR (iPad عمودی/افقی)، RC (iPhone افقی در Plus/Pro Max)، CC (iPad Split View).
// تعریف 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 را دوباره ترسیم میکند.
// 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()
}
}
}
}Configuration Qualifiers — مکانیزم Android برای بارگذاری منابع مختلف (layout، values، drawables) بسته به ویژگیهای دستگاه. این qualifierها شامل اندازه صفحه (small، normal، large، xlarge)، جهت (port، land)، حداقل عرض (sw
// تعریف پیکربندی دستگاه در 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 sw
// 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 برای تطبیق با دستگاههای تاشو و تبلتها توصیه میشود.
شبکه تطبیقی پایه responsive design است. به جای اندازههای ثابت، عناصر از نسبتهای درصدی، محدودیتهای انعطافپذیر و intrinsic content size استفاده میکنند. Breakpoints — نقاط عرض صفحه که با رسیدن به آنها، چیدمان بین حالتها جابهجا میشود.
| Breakpoint | iOS Size Class | Android Qualifier | نوع دستگاه |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE، Android قدیمی |
| 375–599 pt / dp | Compact width | sw320dp | iPhone 14, Galaxy S24 |
| 600–839 pt / dp | Regular width | sw600dp | iPad mini، تبلتهای ۷ اینچ |
| 840+ pt / dp | Regular width | sw720dp | iPad 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 و تجربه پروژههای تولیدی آورده شده است.
اصل اصلی طراحی تطبیقی: محتوا چیدمان را تعیین میکند، نه برعکس. اگر در iPad همان پشته کارتهای iPhone، فقط کشیدهشده در عرض نمایش داده شود — این responsive design نیست. Responsive design ترکیب را بازاندیشی میکند: در iPhone — اسکرول عمودی، در iPad — master-detail با پنل کناری.
سوالات متداول
Responsive Design از شبکه انعطافپذیری استفاده میکند که به آرامی با عرض صفحه سازگار میشود. Adaptive Layout بین چیدمانهای ثابت در نقاط breakpoint جابهجا میشود. در عمل هر دو رویکرد ترکیب میشوند: شبکه پایه responsive + جابهجاییهای تطبیقی برای تغییرات اساسی (گوشی در مقابل تبلت).
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 (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 — الگوهای آماده ترکیب تطبیقی از Google Material Design 3: list-detail (فهرست + جزئیات)، feed (خوراک کارتها)، supporting pane (محتوای اصلی + پنل اقدامات). هر الگو سه حالت دارد (compact/medium/expanded) و به طور خودکار با WindowSizeClass تطبیق مییابد.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید