فاصله‌گذاری

فاصله در رابط کاربری یک چیز نیست، سه چیز است و هر کدام منطق خودش را دارد. نام‌بردنشان جدا از هم جلوی این را می‌گیرد که کسی پدینگِ کارت را برای فاصلهٔ دو دکمه به کار ببرد، فقط چون هر دو اتفاقاً ۱۲ بودند.

قاعدهٔ اعداد: پایه ۴ با ریتم ۸

هر مقدارِ ۱۶ به بالا مضرب ۸ است. زیر ۱۶، نیم‌پله‌های ۴ و ۱۲ هم مجازند.

دلیلش این است که در رابط‌های فشرده (جدول فشرده، فرم چندستونی) پرش ۸ به ۱۶ درشت است و «آیکون تا متن» با «دکمه تا دکمه» یکی می‌شود. شبکهٔ ۸ ریتمِ روی پایهٔ ۴ است، نه جایگزینش؛ همان کاری که Tailwind و Material و HIG هم می‌کنند.

48121624324048

پررنگ‌ها مضرب ۸‌اند. کم‌رنگ‌ها نیم‌پله‌های عمدی زیر ۱۶.

واحد پایه

--spacing برابر 0.25rem است و همهٔ پله‌های عددی p-4، gap-2، از آن ضرب می‌شوند.

1
2
3
4
5
6
8
10
12
16

محور اول: inset

پدینگِ درونِ یک کانتینر، از کوچک‌ترین کانتینر (دکمه) تا لبهٔ صفحه.

p-control
8pxدرونِ دکمه، اینپوت، آیتم منو
p-field
12pxدرونِ گروه فرم و ردیف جدول
p-card
24pxپدینگ کارت
p-panel
32pxپدینگ پنل و مودال
px-gutter
32pxحاشیهٔ صفحه، سیّال بین ۱۶ تا ۳۲

محور دوم: stack

فاصلهٔ عمودیِ چیزهایی که روی هم می‌نشینند. با flex-col و gap به کار می‌رود، نه با margin، تا margin collapse و دوبرابرشدن پیش نیاید.

gap-stack-tight
4pxلیبل تا فیلد، تیتر تا زیرتیتر
gap-stack
8pxبین آیتم‌های هم‌خانواده
gap-stack-loose
16pxبین گروه‌های یک کارت
gap-section
24pxبین بلوک‌های اصلی صفحه

محور سوم: inline

فاصلهٔ افقیِ چیزهایی که کنار هم می‌آیند. در راست‌به‌چپ خودشان می‌چرخند، چون gap جهت ندارد.

gap-inline-tight
4pxآیکون تا متن
gap-inline
8pxبین دکمه‌ها و بج‌ها
gap-inline-loose
12pxبین گروه‌های نوار ابزار

هدف لمسی روی موبایل

اندازهٔ دیداریِ یک آیکون ربطی به ناحیهٔ قابل‌لمسش ندارد. آیکون ۱۶ پیکسلی می‌تواند و باید داخل دکمه‌ای بنشیند که ۴۴ پیکسل است. دو عدد لازم است، نه یکی: اندازهٔ هدف، و فاصلهٔ بین دو هدف.

size-touch۴۴pxکمینهٔ هدف لمسی، هم‌تراز با HIG و WCAG سطح AAA
size-touch-lg۴۸pxاندازهٔ راحت، هم‌تراز با Material
gap-touch۸pxکمینهٔ فاصلهٔ دو هدف مجاور

نادرست: ۳۲px و چسبیده

انگشت مرکز دقیق را نمی‌زند و لمس اشتباه می‌دهد.

درست: ۴۴px با فاصلهٔ ۸

آیکون همان ۱۶ پیکسل است؛ فقط ناحیهٔ لمس بزرگ شده.

روی دسکتاپ که ورودی موس است، همین دکمه می‌تواند فشرده‌تر باشد. اندازهٔ فشرده را برای اشاره‌گر دقیق نگه دارید و با pointer: coarse به هدف لمسی برسانید، نه با عرض صفحه.

عرض‌های نام‌دار

اینها را هر پروژه دستی اختراع می‌کند و بعد در دو صفحه دو عدد متفاوت می‌شود.

max-w-prose۶۵ حرفمتن خواندنی و پاراگراف بلند
max-w-form۶۲۰pxفرم تک‌ستونی و کارت گفت‌وگو
max-w-page۱۲۴۰pxبیشینهٔ عرض محتوای صفحه

گردی گوشه

پله‌ها از --radius مشتق می‌شوند، پس یک متغیر کل سیستم را نرم‌تر یا تیزتر می‌کند.

rounded-sm
rounded-md
rounded-lg
rounded-xl

فاصلهٔ دید در موبایل، دسکتاپ و تلویزیون

همهٔ مقادیر بالا در --font-scale ضرب می‌شوند. یعنی روی تلویزیون چیدمان با متن هماهنگ بزرگ می‌شود، نه اینکه متن بزرگ شود و پدینگ‌ها خفه بمانند.

این با عرض صفحه فعال نمی‌شود. ۱۹۲۰ رایج‌ترین مانیتور دسکتاپ است و عرض چیزی دربارهٔ فاصلهٔ دید نمی‌گوید. پس یک پیچ صریح است که اپلیکیشن خودش می‌چرخاند، همان نقطهٔ اتصالِ آمادهٔ حالت «متن بزرگ» برای کاربر کم‌بیناست.

app/globals.css
:root { --font-scale: 1.35 }   /* تلویزیون، فاصلهٔ سه متری */