نسخه
فونت
جهت
۳۸ بلوک · ۹ بخش
نسخهٔ ۳·NES.css 2.3.0 ·فارسی و راست‌چین·بدون CDN

NES.css، همان‌طور که هست v3.0

این صفحه فریم‌ورک را بازطراحی نمی‌کند: nes.min.css بایت‌به‌بایت همان فایل منتشرشدهٔ ۲.۳.۰ است و هیچ قاعده‌ای از آن بازنویسی نشده. کاری که شده، سه چیز است: فونت پیکسلی میزبانی‌شده روی همین سرور (چون فریم‌ورک فونت را همراه ندارد و از CDN هم چیزی نمی‌گیریم)، یک لایهٔ راست‌چین ۳۴ خطی، و پوستهٔ همین صفحه. هر جزء که می‌بینی، خودِ NES.css است.

۳۸بلوک زنده
۹بخش
۳۳کلاس کامپوننت
۲۸۸KBحجم CSS
۰خط جاوااسکریپت
۰درخواست بیرونی
۰۱

پایه‌ها

۵ بلوک

پالت NES.css هشت رنگ است و در خود فریم‌ورک به‌صورت ثابت نوشته شده، نه متغیر. رنگ‌ها را از فایل خواندم، از حافظه ننوشتم.

پالت رنگ--primary / --success / --warning / --error
#212529
ink
#ffffff
paper
#209cee
primary
#92cc41
success
#f7d51d
warning
#e76e55
error
#6c757d
muted
#adafbc
rule

این هشت مقدار در CSS فریم‌ورک hardcode شده‌اند: #209cee برای اصلی، #92cc41 موفق، #f7d51d هشدار، #e76e55 خطا.

مقیاس عنوانreboot (Bootstrap 4.1.3)

عنوان یک

عنوان دو

عنوان سه

عنوان چهار

NES.css مقیاس تایپوگرافی خودش را ندارد؛ از reboot بوت‌استرپ می‌آید. h1 تا h6 اندازه دارند، بقیه نه.

قاب پیکسلیborder-width:4px + border-image
قاب ۴ پیکسلی

گوشهٔ پله‌ای از border-image می‌آید، نه border-radius. هیچ گوشهٔ گردی در فریم‌ورک نیست جز .is-rounded که خودش هم پله‌ای است.

شبکهٔ ۸ پیکسلیbackground-size:8px 8px

همان شبکهٔ نقطه‌ای که در کیت v1 و v2 داشتی — این‌جا با مربع ۲ پیکسلی و گام ۸ پیکسلی، بدون آنتی‌الیاس.

نشانگر ماوسcursor: url(data:image/png;base64,…)
نشانگر را روی این کادر ببر

فریم‌ورک خودش یک نشانگر پیکسلی ۳۲×۳۲ به‌صورت base64 داخل CSS دارد. روی همهٔ صفحه اعمال می‌شود.

۰۲

کنش‌ها

۳ بلوک

شش کلاس دکمه، بدون اندازه‌بندی: NES.css تنها یک اندازه دارد. برای کوچک و بزرگ باید خودت font-size را عوض کنی، و همین‌جا اولین جای اصطکاک است.

دکمه‌ها.nes-btn + .is-primary/.is-success/.is-warning/.is-error/.is-disabled
دکمه با آیکون.nes-btn > .nes-icon

آیکون‌ها span خالی‌اند که با box-shadow نقاشی می‌شوند؛ پس داخل دکمه بدون تصویر کار می‌کنند.

حالت‌هاhover / active / focus / is-disabled
• hover: پس‌زمینه یک پله تیره می‌شود و سایهٔ داخلی ۴ پیکسلی می‌افتد
• active: دکمه ۴ پیکسل پایین می‌رود (ترنزیشن ندارد)
• focus: خط‌چین دور عنصر
• is-disabled: خاکستری، pointer-events:none نیست، خودت باید جلوی کلیک را بگیری
۰۳

فرم‌ها

۶ بلوک

ورودی‌ها، انتخاب‌گر و چک‌باکس همه هستند. آنچه نیست: اندازهٔ کوچک/بزرگ، آیکون داخل فیلد، و پیام خطای زیر فیلد (فقط رنگ حاشیه عوض می‌شود).

ورودی متن.nes-input + .is-error/.is-success/.is-warning
ناحیهٔ متن.nes-textarea
انتخاب‌گر.nes-select + .is-error/.is-success
چک‌باکس.nes-checkbox (+ .is-dark)
رادیو.nes-radio
فیلد با برچسب.nes-field / .nes-field.is-inline

در حالت inline، NES.css برچسب را با margin-right کنار می‌گذارد — یکی از جاهایی که لایهٔ راست‌چین باید دخالت کند.

۰۴

داده

۵ بلوک

جدول، نشان و نوار پیشرفت هست. آنچه نیست: مرتب‌سازی، فیلتر، صفحه‌بندی، انتخاب ردیف، حالت خالی، اسکلتون. جدول فقط ظاهر است.

جدول ساده.nes-table
کاربردسترسیوضعیت
pariآزمون اسکرامفعال
adminهمهٔ سامانه‌هافعال
rezaصورتحسابدر انتظار
saraبدون دسترسیمسدود
جدول خط‌کشی‌شده و وسط‌چین.nes-table.is-bordered.is-centered
کاربردسترسیوضعیت
pariآزمون اسکرامفعال
adminهمهٔ سامانه‌هافعال
rezaصورتحسابدر انتظار
saraبدون دسترسیمسدود
جدول تیره.nes-table.is-dark.is-bordered
کاربردسترسیوضعیت
pariآزمون اسکرامفعال
adminهمهٔ سامانه‌هافعال
rezaصورتحسابدر انتظار
saraبدون دسترسیمسدود
نشان.nes-badge > span.is-success / .is-warning / .is-error / .is-dark
اصلیفعالدر انتظارخطاتیره
نوار پیشرفت.nes-progress + .is-primary/.is-success/.is-warning/.is-error
۰۵

ظرف و متن

۹ بلوک

قوی‌ترین بخش فریم‌ورک: ظرف با تیتر، دیالوگ، بالن گفتگو و فهرست. همه با گوشهٔ پله‌ای و سایهٔ سخت.

ظرف ساده.nes-container
یک ظرف ساده با حاشیهٔ ۴ پیکسلی و گوشهٔ پله‌ای.
ظرف گرد.nes-container.is-rounded
حالت گرد — همچنان پله‌ای، بدون منحنی.
ظرف تیره.nes-container.is-dark
پس‌زمینهٔ #212529 و متن سفید.
ظرف با تیتر.nes-container.with-title > .title

دسترسی‌ها

تیتر روی خط حاشیه می‌نشیند.
چیدمان ظرف.is-centered / .is-right
وسط‌چین
راست‌چین
رنگ متن.nes-text.is-primary/.is-success/.is-warning/.is-error/.is-disabled
متن اصلیمتن موفقمتن هشدارمتن خطامتن غیرفعال
دیالوگ.nes-dialog (+ .is-rounded/.is-dark)

حذف کاربر

این کاربر حذف شود؟ این کار برگشت‌پذیر نیست.

فریم‌ورک ::backdrop را استایل می‌دهد، پس حالت مودال درست کار می‌کند؛ آنچه ندارد باز و بسته کردن است: showModal() و close() را باید خودت صدا بزنی. این نمونه داخل کارت سنجاق شده، چون خودِ Chrome دیالوگ باز را مطلق روی صفحه می‌گذارد.

بالن گفتگو.nes-balloon.from-left / .from-right (+ .is-dark)
بالن از چپ
بالن از راست
بالن تیره
فهرست.nes-list.is-disc / .is-circle
  • آزمون اسکرام
  • صورتحساب
  • گزارش‌ها
  • آزمون اسکرام
  • صورتحساب
  • گزارش‌ها
۰۶

آیکون‌ها و نماها

۶ بلوک

۲۰ آیکون، ۹ کاراکتر، ۹ آواتار. همه با box-shadow نقاشی می‌شوند، پس هیچ فایل تصویری در فریم‌ورک نیست.

آیکون‌های پایه در سه اندازه.nes-icon.is-small / .is-medium / .is-large
آیکون شبکه‌های اجتماعی.nes-icon.twitter / .github / .instagram …
آواتار.nes-avatar + .is-small/.is-medium/.is-large/.is-rounded

آواتارها را خودم با SVG ۱۶×۱۶ ساختم و base64 داخل صفحه گذاشتم تا هیچ درخواست بیرونی نباشد.

لوگوها.nes-logo / .nes-jp-logo
کاراکترها.nes-mario / .nes-ash / .nes-octocat / .nes-pokeball …
دستگاه‌ها.nes-phone / .nes-smartphone / .nes-pointer
۰۷

راست‌چین و فارسی

۲ بلوک

این بخش دلیل وجود این نسخه است. NES.css هیچ پشتیبانی‌ای از راست‌چین ندارد؛ شش قاعده کل فاصله را می‌بندد. تصاویر پیکسلی را عمداً آینه نکردم — آرت، آرت است.

مقایسهٔ زندههمان مارک‌آپ، دو جهت
dir="rtl" — با لایه
  • مورد
dir="ltr" — NES.css خام
  • item

راست: اجزا با dir=rtl و لایه. چپ: همان اجزا NES.css خام در LTR. چک‌باکس، فلش انتخاب‌گر و گلولهٔ فهرست هر سه سمت خودشان را عوض می‌کنند.

شش چیزی که باید اصلاح شودRTL layer — scoped to [dir=rtl]
  1. text-align روی html — reboot صریحاً text-align:left می‌گذارد و dir=rtl آن را باطل نمی‌کند. بدون این یک خط، کل سند چپ‌چین می‌ماند.
  2. چک‌باکس — آرت ۱۶ پیکسلی در left:-28px و فاصله را margin-left:28px خودِ input باز می‌کند. فاصله و آرت باید هر دو آینه شوند.
  3. رادیو — همان ساختار با فاصلهٔ ۲۰ پیکسل.
  4. انتخاب‌گر — فلش در right:36px و padding-right:2.5rem. هر دو باید جابه‌جا شوند.
  5. فهرست — گلولهٔ فهرست در left:-22px نقاشی می‌شود.
  6. فیلد inline — برچسب با margin-right:1.5rem کنار گذاشته می‌شود.

جمعاً ۳۴ خط CSS. چیزی که اصلاح نمی‌شود: فونت. Press Start 2P هیچ گلیف فارسی ندارد و فریم‌ورک هیچ fallback ننوشته، پس متن فارسی به فونت پیش‌فرض مرورگر می‌افتد. راه‌حل همان چیزی است که در نوار بالا به اسم «ترکیبی» گذاشتم: پیکسلی برای لاتین و رقم، وزیرمتن برای فارسی.

۰۸

آنچه NES.css ندارد

۱ بلوک

این جدول تصمیم را می‌سازد. هر ردیف یک قابلیت است که برای ساختن یک پنل ادمین لازم می‌شود و NES.css آن را ندارد — با برآورد واقعی کار.

شکاف‌ها۳۳ کلاس کامپوننت، بدون JS
قابلیتNES.cssهزینهٔ ساختیادداشت
سایدبار و ناوبری اصلیندارد~۶۰ خط + گریدخودت با grid می‌نویسی
تبندارد~۴۰ خط—
بردکرامبندارد~۲۰ خط—
صفحه‌بندیندارد~۴۰ خط + منطق JS—
توستندارد~۵۰ خط + JS—
مودال با لایهجعبه دارد~۴۰ خط + JSnes-dialog و ::backdrop هست؛ باز/بسته کردن با JS خودت
آکاردئونندارد~۳۰ خط + JS—
تولتیپندارد~۳۰ خط—
منوی بازشوندارد~۵۰ خط + JS—
انتخاب تاریخ شمسیندارد~۲۰۰ خطبدون کتابخانه عملاً ممکن نیست
اسکلتون لودینگندارد~۱۵ خطفقط nes-progress هست
حالت خالی / خطاندارد~۲۵ خط—
درختندارد~۴۰ خط—
نمودارندارد—باید کتابخانهٔ جدا
پالت فرمانندارد~۶۰ خط + JS—
آپلود فایلندارد~۴۰ خط—
جدول با مرتب‌سازی و فیلترظاهر دارد~۸۰ خط + JSnes-table فقط استایل است
راست‌چینندارد~۳۴ خطاین صفحه انجامش داده
فونت فارسیندارد~۱۰ خطبدون fallback، فارسی به فونت سیستم می‌افتد
حالت تیرهٔ سراسریجزئی~۵۰ خطis-dark روی چند جزء هست، نه روی کل صفحه
جاوااسکریپتصفر—فریم‌ورک فقط CSS است
۰۹

یک پنل با NES.css

۱ بلوک

همین حالا می‌شود با NES.css یک پنل ساخت — تا جایی که به چیدمان برسی. این نمونه فقط از اجزای فریم‌ورک ساخته شده و سه چیز را باید با CSS خام درست می‌کردم: سایدبار، ستون‌بندی، و دکمهٔ کوچک‌تر از اندازهٔ ثابت فریم‌ورک.

پنل نمونه.nes-container + .nes-table + .nes-progress + .nes-badge

منو

نمای کلی

کاربران فعال
۷۸٪
مصرف سهمیه
۴۵٪
خطا در ۲۴ ساعت
۱۲٪

کاربران

کاربردسترسیوضعیتکنش
pariآزمون اسکرامفعال
adminهمهٔ سامانه‌هافعال
rezaصورتحسابدر انتظار
saraبدون دسترسیمسدود

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