تایپوگرافی
نقشهای متنی (22 / 18 / 14)، یک وزن برای همهٔ عنوانها، عدد شاخص 24 / 400 — و دلیل هر عدد
اصل
تایپوگرافی پرتو نقش دارد، نه اندازهی دلخواه: عنوان صفحه، عنوان بخش، عنوان کارت، متن، متادیتا و عدد شاخص. هر نقش یک utility و یک تصمیم است و اجزای سیستم طراحی فقط از همین نقشها استفاده میکنند. سلسلهمراتب از نردبان کوتاه اندازه و یک وزن یگانه برای همهٔ عنوانها میآید، مثل سوپابیس — نه از وزنی که هر جزء برای خودش انتخاب کند.
چرا این عددها: نقشهای سوپابیس 22 / 18 / 15 / 13 / 12 با عنوانهای 600 است، با Inter. متن 14 پیکسلی یکانبخ از نظر دیداری هماندازهٔ 13 پیکسل Inter است و جعبهٔ خطش 1.55em است (Inter 1.21em)؛ پس متن بدنه 14 روی خط 22 است و متادیتا یک پله زیر آن، 13. عدد شاخص 24 است، نه 30 یا 32: عدد نباید از عنوان صفحه بلندتر فریاد بزند.
قوانین اجباری
<h1 className="text-display">گزارشها</h1><h1 className="text-2xl font-bold">گزارشها</h1><p className="text-body text-light">توضیح</p><p style={{ fontSize: '14px', color: '#888' }}>توضیح</p><MetricCardValue>{formatNumber(124580)}</MetricCardValue><p className="text-3xl font-bold">124,580</p><h1 className="tracking-normal">عنوان فارسی</h1><h1 className="tracking-widest">عنوان فارسی</h1>منشنهای امروز
منشنهای امروز
124,580
گزارش کمپین SUMMER
گزارش کمپین SUMMER
نقشها
| نقش | utility | اندازه / خط | وزن | کجا |
|---|---|---|---|---|
| عنوان صفحه | text-display | 22 / 32 | 600 | PageHeader، تنها <h1> صفحه |
| عنوان بخش | text-heading | 18 / 28 | 600 | PageSectionTitle، عنوان دیالوگ و پنل کناری، FormHeader |
| عنوان کارت و پنل | text-subheading | 14 / 22 | 600 | CardTitle، عنوان وضعیت خالی |
| متن بدنه و رابط | text-body | 14 / 22 | 400 | متن، توضیح صفحه و کارت؛ پیشفرض body |
| برچسب فیلد | text-label | 14 / 22 | 500 | برچسبی که خودتان مینویسید؛ Label در پایین جدول |
| متادیتا | .text-meta | 13 / 20 | 500 | سرِ ستون جدول، برچسب شاخص |
| متن فشرده | text-compact | 13 / 20 | 400 | متن کنترل sm، جدول compact |
| زیرنویس | text-caption | 12 / 18 | 400 | راهنمای فیلد، زمان؛ کف خوانایی فارسی |
| عدد شاخص | .text-stat | 24 / 32 | 400 | MetricCardValue، StatDisplay، امتیاز کارتهای امتیاز |
گزارشها
گزارش هفتگی کمپینها و بازخورد مشتریان
گزارشها
گزارش هفتگی کمپینها و بازخورد مشتریان
برچسب فیلد در اجزای سیستم طراحی: برچسب FormItemLayout و FormLabel 14 / 500 روی خط 21 پیکسل (leading-normal)
است. Label تنها 14 / 500 با leading-none است (جعبهٔ خط 14 پیکسل، مثل shadcn): جوهر فارسی بالا و پایین از جعبه بیرون
میزند ولی بریده نمیشود. برچسبی که بالای فیلد میگذارید با FormItemLayout بسازید، یا به Label کلاس text-label بدهید.
ارتفاع خط هر نقش یک نسبت بیواحد است (مثل توکنهای خود Tailwind، مثلاً calc(22 / 14)): خط خود نقش دقیقاً همان
پیکسل جدول است، و متنی درون آن که فقط اندازهٔ خودش را عوض میکند (استایل درونخطی، CSS ماژول، text-micro، ویجت بیرونی)
خطی متناسب با اندازهٔ خودش میگیرد، نه 22 پیکسل ثابت.
یک وزن برای همهٔ عنوانها: 600
- هر
h1تاh6در لایهٔ پایه 600 است، و نقشهای عنوان (text-display،text-heading،text-subheading) خودشان 600 را دارند. روی عنوان کلاس وزن ننویسید. - تأکید در متن حداکثر 500 (
font-medium) است. - عدد شاخص و امتیاز 400 است (
.text-stat). عدد پررنگ نداریم. شمارنده یا عددی که درون متن تأکید دارد، مثل هر تأکید متنی، حداکثر 500 است. - برچسب متادیتایی که بهصورت عنوان نوشته شده (
<h3 className="text-meta">) 500 میماند؛ کلاس وزن یا.text-metaروی عنوان بر لایهٔ پایه غلبه میکند. تیتر پست (خبر یا ویدیو) درPostعنوان همان پست است و روی نقشهای عنوان میآید: در چیدمانcardنقش عنوان کارت (text-subheading، 14 / 600) و درdetailsنقش عنوان بخش (text-heading، 18 / 600)؛ درrowوtileیک خط متن با تأکید است (text-body font-medium، 14 / 500؛ روی پنل کاشیِ بیرسانه نقش برچسبtext-label font-mediumدر همان جعبهٔ 14 / 22)، نه عنوان. نامAccountهم همین قاعده را دارد. عنوان نسخهها درWhatsNewPanelوReleaseTimelineروی نقشهای عنوان (600) است. - هیچ چیز بالاتر از 600 نیست. قانون
parto/no-heavy-font-weightهمین را کنترل میکند:font-boldو بالاتر همهجا، وfont-semiboldروی متنی که عنوان نیست.
بازخورد بستهبندی
مشتریان از بستهبندی تازه راضیترند.
بازخورد بستهبندی
مشتریان از بستهبندی تازه راضیترند.
فقط نقشها
text-xs تا text-4xl هنوز اندازههای Tailwindاند (با خط فارسی بازتر)، ولی برای نقش از نام نقش استفاده کنید. اگر
جایی واقعاً اندازهی دیگری لازم است:
- روی جزء سیستم طراحی (
<CardTitle className="text-base">):cn()نقش را با اندازهٔ شما جایگزین میکند و وزن همراه نقش هم میرود؛ عنصر آن جزء اگرh1تاh6باشد، لایهٔ پایه باز هم 600 میدهد و چیزی لازم نیست. - روی عنصری که عنوان نیست (
<p>،<span>،<div>): بعد از جایگزینی نقش،font-semiboldرا خودتان بنویسید. - در
classNameخام (بدونcn()) هر دو کلاس اعمال میشوند و 600 میماند.
اندازهی دلخواه مثل text-[18px] ممنوع است (parto/no-offscale-text).
خود سیستم طراحی هم همین قاعده را رعایت میکند. در اجزای سیستم طراحی هر text-xs و text-sm به
text-caption و text-body تبدیل شده است (همان جعبهٔ 12 / 18 و 14 / 22). پلهٔ پیشفرض اندازهٔ هر جزء همیشه یک نقش
است؛ مثلاً عنوان Account در چیدمان card نقش عنوان کارت (14 / 600) و در header نقش عنوان بخش (18 / 600) را دارد.
اندازهٔ خام فقط در این جاها مانده است: پلههای غیرپیشفرض اندازهٔ خود یک جزء (lg و xl، و xs و md در
StatDisplay، md در ErrorState)، متن پلهٔ xl نردبان کنترلها (16)، متنی که با یک گرافیک یا نسبت به یک عدد
اندازه میگیرد (حروف آواتار، مرکز حلقهٔ پیشرفت، واحد کنار عدد با 0.6em)، تیتر خود پست و اندازهٔ خواندن متن پست در
نمای جزئیات (15)، و کد درونخطی با 0.875em. آزمون text-roles-only.test.ts هر کدام را، چه نامدار و چه دلخواه، با
دلیلش فهرست کرده است و اندازهٔ خام تازه را رد میکند. کدی که از اجزای سیستم طراحی کپی میکنید نام نقش دارد، نه اندازه.
استثنای امتیاز بزرگ: کارت امتیاز در اندازهٔ lg (CriterionScoreCard) عددش را یک پله بالاتر،
30 / 400، نشان میدهد؛ در sm و md (پیشفرض) امتیاز همان .text-stat 24 است، هماندازهٔ MetricCardValue در همان
ردیف. عدد رنگی زیر 24 پیکسل با وزن 400 «متن معمولی» است و کنتراست 4.5 به 1 لازم دارد؛ رنگهای امتیاز (--score-*) برای
پرکردن و متن بزرگ کالیبره شدهاند، برای همین امتیاز هیچوقت کوچکتر از 24 نیست.
نمونه بصری
text-display — عنوان صفحه
text-heading — عنوان بخش
text-subheading — عنوان کارت
text-body — متن اصلی و محتوای بدنه به زبان فارسی
text-caption — 2 ساعت پیش · 1,245 نمایش
124,580
موارد استفاده رایج
سرِ صفحه
<PageHeader title="اینفلوئنسرها" description="248 اینفلوئنسر در فهرست شما" />
// عنوان: text-display (22 / 600)، توضیح: text-body (14) با رنگ روشنترکارت
<Card>
<CardHeader>
<CardTitle>نام اینفلوئنسر</CardTitle>
</CardHeader>
<CardContent>
<p className="text-lighter text-body">@username · 125 هزار دنبالکننده</p>
</CardContent>
</Card>شاخص
<MetricCard>
<MetricCardHeader>
<MetricCardLabel>نرخ تعامل</MetricCardLabel>
</MetricCardHeader>
<MetricCardContent>
<MetricCardValue>3.2٪</MetricCardValue>
</MetricCardContent>
</MetricCard>
// برچسب: .text-meta (13 / 500)، عدد: .text-stat (24 / 400)جدول
سرِ ستون نقش متادیتا را دارد (13 / 500، در جدول compact 12) — پاسخ فارسی به سرِ ستونهای mono و حروف بزرگ سوپابیس:
بدون uppercase و بدون tracking. متن سلول از تراکم جدول میآید (14، در compact 13). اندازهی دستی ننویسید.
فونت و ارقام
پرتو فقط یکان بخ Variable را به کار میبرد (وزن 100 تا 950). فونت سفارشی اضافه نکنید.
- ارقام فارسی از فونت میآیند، با قابلیت
ss01و فقط برای محتوای فارسی (lang="fa")؛ صفحهٔ عربی و انگلیسی رقم لاتین دارند. در متن صفحه همیشه رقم لاتین (0–9) است: هیچ کد سیستم طراحی رقم را به فارسی یا عربی تبدیل نمیکند. پس کسی که عددی را از صفحه کپی میکند رقم لاتین میگیرد، و Excel، ماشینحساب، جستجو و صفحهخوان آن را عدد میشناسند. - شناسههایی که باید همانطور که تایپ شدهاند دیده شوند (نام کاربری، IP، URL، کد) را در
LatinDigitsبگذارید؛ اینss01را برای همان تکه خاموش میکند. کد (code،pre،kbd) خودش رقم لاتین دارد. جزئیات: فارسیمحور بودن.
امکانات فونت
یکان بخ چند قابلیت OpenType دارد (Stylistic Set و بقیه). همه را از جدولهای خود فونت خواندیم و یکییکی رندر کردیم. نتیجه یک قاعده برای هر کدام است:
- همیشه روشن:
ss01(ارقام فارسی، زیرlang="fa") وkern(فاصلهگذاری جفت حروف). لایهٔ پایهٔ سیستم طراحی هر دو را روشن میکند و شما کاری لازم ندارید. خاموشکردنشان فقط با دلیل:ss01برای شناسه باLatinDigits. - خودکار: شکلدهی خط فارسی (
rlig،init،medi،fina،mark،mkmk) وloclرا مرورگر از روی زبان روشن میکند. دست نزنید. - فقط روی همان تکه:
ss06(نماد تومان و ریال)، اگر محصولی واقعاً نماد میخواهد، فقط روی خود واحد پول. - هرگز:
ss02،ss03،salt،ss07وaalt، و محورDOTSجز مقدار پیشفرض. - در فونت نیست:
tnumوliga،dlig،calt،lnum،onum،zero،frac،case،sups،subs. روشنکردنشان اثری ندارد.
| قابلیت | چه میکند | قاعده | چرا |
|---|---|---|---|
ss01ارقام فارسی | رقم لاتین (0–9) و رقم عربی-هندی را با شکل رقم فارسی میکشد. ویرگول، نقطه، % و ٪ را عوض نمیکند. | همیشه روشن | پایهٔ قاعدهٔ ارقام: متن صفحه رقم لاتین است و فونت آن را فارسی نشان میدهد، پس کپی و جستجو و صفحهخوان رقم لاتین میگیرند. خودکار زیر lang="fa" روشن است؛ برای شناسه (IP، URL، کد) با LatinDigits خاموش میشود. |
kernفاصلهگذاری جفت حروف | فاصلهٔ بین جفتحروفی مثل AV یا To را تنظیم میکند، در لاتین و فارسی. | همیشه روشن | بدون آن متن ناهموار میشود. مرورگر معمولاً روشنش میکند و سیستم طراحی صریحاً روشنش نگه میدارد. |
rlig · init · medi · fina · mark · mkmkشکلدهی خط فارسی | شکل اول و وسط و آخر حروف، لیگاتورهای اجباری (مثل ا + ٓ ← آ) و جای اعراب و نقطهها. | خودکار، دست نزنید | لازمهٔ خواندن خط فارسی است و مرورگر همیشه روشنش میکند. دست نزنید. |
loclشکلهای وابسته به زبان | زیر lang="en" فاصله کمی پهنتر و دونقطه همقد حروف کوچک لاتین میشود؛ زیر lang="ur" چند رقم شکل اردو میگیرند. | خودکار، دست نزنید | مرورگر از روی lang خودش انتخاب میکند. تفاوت ریز است و کاری لازم ندارد. |
ss06نماد تومان و ریال | «ت» تنها را نماد تومان و «﷼» را نسخهٔ جمعوجورتر روی خط کرسی میکند. | فقط روی همان تکه | فقط روی خود تکهٔ واحد پول، هیچوقت سراسری: روشنکردنش روی متن هر «ت» تنها را (مثلاً در «ت.») نماد تومان میکند. واژهٔ «تومان» همیشه درست است. |
ss02کاف کشیده | ک و گ را در همهٔ شکلها کشیده و تزیینی میکند. | هرگز | تزیینی است و طول کلمه را زیاد میکند؛ به رابط کاربری نمیخورد. |
ss03ی برگشته | ی پایانی و تنها را به شکل ے (شبیه اردو و نستعلیق) میکند. | هرگز | فارسی معیار رابط کاربری نیست و خواندن را کند میکند. |
saltجایگزینهای سبکی | هر دو تغییر بالا با هم: کاف کشیده و ی برگشته. | هرگز | تکرار ss02 و ss03 است، با همان دلیلها. |
ss07رقم پایینافتاده | رقمهای فارسی را 10٪ اندازهٔ em پایین میبرد. با ss01 زنجیر میشود. | هرگز | رقم از خط کرسی پایین میافتد و با ویرگول، ٪ و حروف لاتین همتراز نمیماند؛ تراز جدول و کارت شاخص خراب میشود. |
DOTS (محور)سبک نقطهها | فقط خوشهٔ سهنقطه (ث ش چ پ ژ) را عوض میکند: 0 دو نقطهٔ پایینی را یک خط کوتاه میکند، 1 سه نقطهٔ جدا. | خودکار، دست نزنید | ظاهر برند همان مقدار پیشفرض 0 است. محور را تغییر ندهید. |
tnum · pnumرقم همعرض | tnum در فونت نیست؛ pnum هست ولی کاری نمیکند چون رقمها از اول متناسباند. گلیفهای همعرض در خود فونت هست، ولی هیچ قابلیتی به آنها نمیرسد. | در فونت نیست | tabular-nums امروز ستون عددی را تراز نمیکند. افزودن tnum به فونت (یا گرفتن نسخهٔ تازه از سازنده) تصمیم مجوز است، چون فونت تجاری است. تا آن موقع عرض ظرف را ثابت کنید. |
liga · dlig · calt · lnum · onum · zero · frac · case · sups · subsقابلیتهایی که فونت ندارد | هیچکدام در جدولهای فونت نیست و روشنکردنشان اثری ندارد. | در فونت نیست | کلیدی که کاری نمیکند گمراهکننده است؛ به کارشان نبرید. |
aaltهمهٔ جایگزینها | فهرست همهٔ گلیفهای جایگزین، برای پنل گلیف نرمافزارهای طراحی. | هرگز | برای وب نیست؛ روشنکردنش گلیفهای نامربوط میآورد. |
`font-feature-settings` جمع نمیشود، جایگزین میشود
اگر روی عنصری font-feature-settings بنویسید، فهرستی که از لایهٔ پایه به ارث میرسد کنار میرود. پس ss01 و kern را
هم دوباره بنویسید، وگرنه رقم آن عنصر لاتین میشود. مثلاً برای نماد تومان:
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'ss06' 1.
قبل و بعد، زنده
هر نمونه یک متن را دو بار نشان میدهد: «قبل» بدون قابلیت و «بعد» با آن. کد زیر هر نمونه همان چیزی است که روی آن متن اعمال شده.
ss01ارقام فارسیهمیشه روشن1,250,000 تومان · 12.5٪ · 1405/07/09
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 01,250,000 تومان · 12.5٪ · 1405/07/09
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1رقمها فارسی میشوند؛ کاما و ٪ همان میمانند.
kernفاصلهگذاری جفت حروفهمیشه روشنAVATAR · Type · WAVE
font-feature-settings: 'kern' 0, 'rlig' 1, 'ss01' 1AVATAR · Type · WAVE
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1در «AVATAR» حروف A و V به هم نزدیک میشوند.
ss06نماد تومان و ریالفقط روی همان تکه250,000 ت · 1,000 ﷼
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1250,000 ت · 1,000 ﷼
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'ss06' 1«ت» تنها نماد تومان میشود و ﷼ روی خط مینشیند.
ss02کاف کشیدههرگزکتاب کوچک · گزارش گروه
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1کتاب کوچک · گزارش گروه
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'ss02' 1کاف و گاف کشیده میشوند.
ss03ی برگشتههرگزکی میآیی · بازی
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1کی میآیی · بازی
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'ss03' 1انتهای کلمهها برمیگردد.
saltجایگزینهای سبکیهرگزکی کتاب میآوری
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1کی کتاب میآوری
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'salt' 1ss07رقم پایینافتادههرگزنرخ 12.5٪ از 48 KPI
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1نرخ 12.5٪ از 48 KPI
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'ss07' 1رقمها پایینتر از ٪ و حروف مینشینند.
DOTS (محور)سبک نقطههاخودکار، دست نزنیدپژوهش ثبت شد · چشم
font-variation-settings: "DOTS" 1پژوهش ثبت شد · چشم
font-variation-settings: "DOTS" 0قبل: سه نقطهٔ جدا (1) · بعد: پیشفرض برند (0).
tnum · pnumرقم همعرضدر فونت نیست111,111 · 888,888
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1111,111 · 888,888
font-feature-settings: 'kern' 1, 'rlig' 1, 'ss01' 1, 'tnum' 1هیچ تغییری نمیبینید: قابلیت در فونت نیست.
زمین بازی
ارقام فارسی (ss01) و kern مثل خود سیستم طراحی از اول روشناند. بقیهٔ کلیدها فقط برای دیدناند و در محصول خاموش
میمانند (جز ss06 روی خود واحد پول).
کیک تازه با 123,456 ریال · 250,000 ت · 1,000 ﷼ · کی میآیی · پژوهش
تنظیمات اصلی
کلیدها
پیشفرض سیستم طراحی (روشن)
فقط برای دیدن (در محصول خاموش)
font-variation-settings: "wght" 400, "DOTS" 0;
font-feature-settings: "kern" 1, "rlig" 1, "ss01" 1;رقم همعرض (tnum)
فونت قابلیت tnum ندارد و عرض رقمهایش متناسب است (رقم فارسی از 260 تا 700 واحد در em هزارواحدی). پس tabular-nums
امروز ستون عددی را تراز نمیکند؛ اگر پایداری چیدمان لازم است، عرض ظرف را ثابت کنید. گلیفهای همعرض در خود فونت هست
و با افزودن یک قابلیت tnum به فونت، کلاسهای tabular-nums موجود در جدول و کارت شاخص و نمودار بدون هیچ تغییری کار
میکنند. چون یکان بخ تجاری است، این تغییر (یا نسخهٔ تازه از سازنده) منتظر بررسی مجوز است.
چه نکنیم
- وزن روی عنوان.
font-boldیاfont-semiboldروی<h1>لازم نیست وfont-boldممنوع است؛ نقش و لایهٔ پایه 600 را میدهند. - عدد پررنگ و بزرگ.
text-3xl font-boldبرای شاخص؛ از.text-stat(24 / 400) استفاده کنید. - letter-spacing روی فارسی. حروف پیوسته از هم جدا میشوند (
parto/no-tracking-on-persian-text). - خاموشکردن
ss01یاkernبیدلیل، یا روشنکردنss02،ss03،salt،ss07.check-digit-doctrineآن را رد میکند؛ اگر دلیلی هست، کنار همان خطparto-font-feature-ok: <دلیل>بنویسید. - زیر 12 پیکسل برای متن فارسی.
text-microوtext-miniفقط برای شمارندهها و برچسبهای عددی یا لاتین کوچکاند. - آندرلاین برای لینک. با خط پیوستهٔ فارسی تداخل دارد (
parto/no-text-underline). - بیش از سه اندازه در یک کارت. نقشها کافیاند: عنوان کارت، متن، متادیتا.
صفحات مرتبط
- اندازه و تراکم — نردبان کنترلها و متن هر پله
- فارسیمحور بودن — دکترین ارقام
- تایپوگرافی در راهنمای برند — قلم و نقشهای متن در ارتباطات برند
- قالببندی عدد و تاریخ — کدام تابع رقم را چطور برمیگرداند