متن خبر

نحوه ایجاد یک سیستم طراحی در Next.js با Tailwind CSS و Class Variance Authority

نحوه ایجاد یک سیستم طراحی در Next.js با Tailwind CSS و Class Variance Authority

شناسهٔ خبر: 435939 -




ساختن یک برنامه وب و ایجاد یک تجربه کاربری روان در دنیای همیشه در حال تغییر توسعه وب، به چیزی بیش از ظاهر زیبا نیاز دارد - همچنین باید مطمئن شوید که طراحی برنامه شما کارآمد و سازگار است.

اگر یک سیستم طراحی دارید، می‌توانید به راحتی اجزای رابط کاربری ایجاد کنید که سازگار هستند و می‌توانند در پروژه‌های متعدد مورد استفاده مجدد قرار گیرند و در عین حال زیبا به نظر می‌رسند.

سیستم طراحی مجموعه ای از اجزای رابط کاربری قابل استفاده مجدد و توکن های طراحی است. این توکن ها مانند بلوک های ساختمانی هستند که شامل مواردی مانند دکمه ها، رنگ ها و فونت ها هستند. هدف آن این است که توسعه دهندگان و طراحان را قادر سازد تا با ارائه تجربه کاربری ثابت در همه محصولات، تجربه های جذابی از محصول ایجاد کنند.

طراحان اغلب از ابزارهایی مانند Figma برای ایجاد این سیستم ها استفاده می کنند. در اینجا یک نمونه از یک سیستم طراحی ساخته شده در Figma آورده شده است:

طراحی-سیستم

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

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

اینجاست که یک سیستم طراحی فوق العاده ارزشمند می شود. با داشتن دانش نحوه پیاده‌سازی یک سیستم طراحی، توانایی ایجاد یک طراحی متناسب را به دست می‌آورید که به طور یکپارچه با سیستم طراحی موجود ادغام می‌شود و سطح انعطاف‌پذیری مورد نظر شما را ارائه می‌دهد.

علاوه بر این، این رویکرد این مزیت را ارائه می دهد که فقط باید اجزایی را بسازید که واقعاً به آنها نیاز دارید. برخلاف استفاده از کتابخانه ها، که اغلب با اجزای از پیش ساخته شده متعددی همراه هستند که ممکن است هرگز از آنها استفاده نکنید، این روش پایگاه کد شما را متمرکز و کارآمد نگه می دارد.

ایجاد طرح شخصی شما ممکن است جذاب به نظر برسد، اما آنقدرها هم که به نظر می رسد ساده نیست.

با این وجود، با کمک ابزارهای سبک مانند Tailwind CSS (که به دلیل سطح بالای سفارشی سازی ایده آل است)، کتابخانه ای به نام cva (که مخفف عبارت class-variance-authority است) و همراه با TypeScript ، فرآیند ایجاد سیستم طراحی سفارشی خود در Next.js به طور قابل توجهی قابل دستیابی است.

اکنون که درک روشنی از چیستی یک سیستم طراحی و اهمیت آن دارید، به خواندن ادامه دهید تا کشف کنید چگونه این ابزارها می توانند به طور موثر برای رسیدن به اهداف ما ترکیب شوند.

راه اندازی پروژه: نصب کتابخانه CVA

برای هدف این مقاله، فرض بر این است که شما قبلا پروژه Next.js خود را راه اندازی کرده اید و TypeScript و Tailwind CSS وارد کرده اید.

اگر نه، ادغام این دو عنصر در یک پروژه Next.js جدید یک فرآیند ساده است.

پس از این تنظیمات اولیه، می توانید با استفاده از دستور زیر، کتابخانه CVA را بدون زحمت به پروژه خود اضافه کنید:

 npm i class-variance-authority

با گنجاندن CVA ، یک رابط کاربر پسند در اختیار شما قرار می گیرد که تعریف انواع را ساده می کند.

این گونه‌ها کاربرد شرطی مجموعه‌های کلاس را امکان‌پذیر می‌کنند، در حالی که ابزارهایی را برای بیان تغییرات پیش‌فرض ارائه می‌دهند. اگر این در حال حاضر کمی پیچیده به نظر می رسد، نگران نباشید - در حالی که به جلو می رویم به نمونه های عملی می پردازیم.

مثال عملی: پیاده سازی یک سیستم طراحی سفارشی

موقعیتی را تصور کنید که در حال ساخت یک برنامه CRUD هستید که مجهز به buttons برای انجام اقدامات مختلف مانند create ، read ، update و delete است.

در حالی که این buttons ممکن است آپشن های مشترکی مانند font-size و border-radius را به اشتراک بگذارند، ممکن است کمی متفاوت باشند - به عنوان مثال، در رنگ‌هایشان. شاید شما یک button قرمز را برای عمل حذف، یک دکمه آبی برای ایجاد و یک سیاه را برای به روز رسانی ترجیح دهید.

به طور سنتی، ممکن است در نظر داشته باشید که برای هر button اجزای جداگانه ایجاد کنید و رنگ های متمایز به آنها اختصاص دهید. به عنوان مثال، برای ایجاد button سیاه، باید کلاس ابزار Tailwind CSS را bg-black برای تنظیم رنگ پس‌زمینه قرار دهید:

 export default function Button() { return ( <button className="bg-black rounded-3xl py-2 text-white w-80 font-sm" // other button attributes > //button text </button> ); }

با این حال، به جای ایجاد مؤلفه‌های جداگانه برای هر button ، می‌توانید با طراحی یک مؤلفه تک button که می‌تواند با انواع مختلف دکمه‌های مورد نیاز شما سازگار شود، فرآیند را ساده کنید. این مفهوم قلب یک سیستم طراحی است.

بیایید تحلیل کنیم که چگونه می‌توانیم همین مولفه دکمه‌ای را که قبلاً ایجاد کرده‌ایم، مطابق با نیازهایمان تغییر دهیم.

اولین قدم ما وارد کردن تابع cva و VariantProps از کتابخانه class-variance-authority است. در ادامه، اهمیت این واردات آشکار خواهد شد:

 import { cva, VariantProps } from 'class-variance-authority'

متعاقباً متغیری به نام buttonStyles تعریف می کنیم. این متغیر فراخوانی تابع cva را در خود جای خواهد داد.

در این تابع، ابتدا styles پیش‌فرض برای دکمه‌ها و به دنبال آن شیء variants ارائه می‌کنیم. این شی شامل تغییراتی برای انواع مختلف دکمه های مورد نظر ما خواهد بود. این بخش هنگام اجرای سیستم طراحی بسیار مهم است.

در کد خود، قطعه کد زیر را قرار دهید:

 const buttonStyles = cva("rounded-3xl py-2 text-white w-80 font-sm", { variants: { intent: { primary: "bg-blue-700", secondary: "bg-black", danger: "bg-red-600", }, defaultVariants: { intent: "primary", }, }, });

در شیء variants جاسازی شده، شی دیگری به نام intent وجود دارد. این جایی است که شما نام‌ها را به تغییرات دکمه‌های متمایز مورد نظر خود اختصاص می‌دهید - به عنوان مثال، primary ، secondary ، و danger ، که به ترتیب مربوط به دکمه‌های create ، update و delete هستند.

سبکی که برای intent مشخص شده هنگام رندر کردن button تعریف شده است، در هر کجا که ظاهر شود، روی آن button اعمال می شود.

علاوه بر این، شی variants دارای ویژگی دیگری به نام defaultVariants است. intent درون شی defaultVariant زمانی اعمال خواهد شد که هیچ intent صریحی ارائه نشود. در این مثال، intent پیش‌فرض را روی primary قرار داده‌ایم.

در مرحله بعد، رابطی به نام ButtonProps تعریف می کنیم که نوع VariantProps ارائه شده توسط کتابخانه class-variance-authority را گسترش می دهد:

 interface ButtonProps extends VariantProps<typeof buttonStyles> { text: string; }

از این رابط برای تعریف مواردی که مؤلفه Button می پذیرد استفاده می شود. نوع VariantProps از class-variance-authority ویژگی intent را اضافه می کند که برای تعیین variant button استفاده می شود. این رابط همچنین شامل یک ویژگی اضافی به نام text است که از نوع string است، متن واقعی است که روی button ظاهر می شود.

پس از انجام این کار، می توانیم ادامه دهیم و مولفه Button را با توجه به این interface تعریف شده پیاده سازی کنیم:

 export default function Button({ intent, text, ...props }: ButtonProps) { return ( <button className={buttonStyles({ intent })} {...props}> {text} </button> ); }

در تابع کامپوننت Button ، ما از ساختارشکنی شی برای دریافت ویژگی intent از ButtonProps ارسال شده به کامپوننت استفاده کردیم.

علاوه بر این، ما از عملگر spread (...props) برای پخش هر گونه props دیگری که ممکن است به کامپوننت ارسال شود، استفاده کردیم. این به ما این امکان را می دهد که به راحتی هر ویژگی یا کنترل کننده رویداد دیگری را به عنصر <button> منتقل کنیم.

این همچنین باعث می‌شود که props ما با دقت تایپ شوند، و انواع آنها دقیقاً در یک راستا قرار می‌گیرند که روی هر کدام قرار می‌گیرید. به عنوان مثال، intent prop به شدت به intents که در متغیر buttonStyles تعریف کرده‌ایم، پایبند است و از یک نوع مطابقت قوی اطمینان می‌دهد:

اسکرین شات--166-

در ادامه، بخش مهم صفت className در عنصر <button> است. ما از تابع buttonStyles برای عبور از یک شی با ویژگی intent استفاده می کنیم که با نوع دکمه مورد نظر ( primary ، secondary یا danger ) مطابقت دارد.

این به صورت پویا styles مناسب را بر اساس intent انتخاب شده ایجاد می کند و styles مرتبط را روی دکمه اعمال می کند.

در نهایت، ما فرآیند ایجاد buttons با styles مختلف را ساده‌سازی کرده‌ایم، به ما این امکان را می‌دهد که از یک مؤلفه Button استفاده کنیم و در عین حال ظاهر آن را به‌طور پویا از طریق پایه intent تغییر دهیم، و اجرای مؤثر سیستم طراحی شخصی‌شده خود را به نمایش بگذاریم.

با وجود این، اکنون مجهز به رندر مؤلفه Button با توجه به نیازها و ترجیحات خود هستید. به عنوان یک نمایش بصری، اجازه دهید پس از ارائه هر یک از انواع، نتایج را مشاهده کنیم:

 <> <Button intent="primary" text="Create" /> <br /> <br /> <Button intent="secondary" text="Update" /> <br /> <br /> <Button intent="danger" text="Delete" /> <br /> <br /> </>

نتیجه بصری:

chrome-capture-2023-7-15--1-

این نمایش بصری بر تطبیق پذیری و تطبیق پذیری مؤلفه ساده Button ما تأکید می کند و استایل متمایز به دست آمده از طریق رویکرد مبتنی بر هدف در سیستم طراحی دستکاری شده خودمان را نشان می دهد.

بسته بندی

در طول این سفر، بینش هایی در مورد پتانسیل یک سیستم طراحی برای تولید یک جزء دکمه همه کاره که به صورت پویا رنگ ها را در پاسخ به هدف ارائه شده تغییر می دهد، به دست آورده اید.

مهم است که توجه داشته باشید که این سازگاری فقط به رنگ ها محدود نمی شود - شما می توانید به طور مشابه اندازه فونت، رنگ متن و سایر ویژگی های CSS را آزمایش کنید.

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

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است